[
  {
    "path": ".eslintignore",
    "content": "src/rari-sdk/**.*"
  },
  {
    "path": ".github/workflows/tests.yml",
    "content": "name: Tests\n\non: [push, pull_request]\n\njobs:\n  e2e-and-unit:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v2\n        with:\n          persist-credentials: false\n\n      - name: Reconfigure git to use HTTP authentication\n        run: >\n          git config --global url.\"https://github.com/\".insteadOf\n          ssh://git@github.com/\n\n      - name: Run our Cypress E2E tests\n        uses: cypress-io/github-action@v2\n        with:\n          # Passing environment variables here will pass them as Cypress Environment Variables (https://docs.cypress.io/guides/guides/environment-variables.html), and will not be accessible to the start script\n          # env: DATABASE_URL=${{ secrets.DATABASE_URL }}\n\n          start: npm start\n          wait-on: \"http://localhost:3000\"\n          wait-on-timeout: 120\n\n          record: ${{ contains(github.event_name, 'push') }}\n        env:\n          # These environment variables will be picked up by the start script\n          CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}\n          REACT_APP_PORTIS_ID: ${{ secrets.REACT_APP_PORTIS_ID }}\n          REACT_APP_FORTMATIC_KEY: ${{ secrets.REACT_APP_FORTMATIC_KEY }}\n\n      - name: Run unit tests with coverage\n        run: npm run unit-test\n        env:\n          CI: true\n\n      - name: Merge our test reports\n        run: npx merge-cypress-jest-coverage\n\n      - name: Upload coverage report to Coveralls\n        uses: coverallsapp/github-action@master\n        with:\n          github-token: ${{ secrets.GITHUB_TOKEN }} # This is passed by Github, don't worry about setting this.\n\n      - name: Report the bundle size of this build\n        uses: sarthak-saxena/JSBundleSize@master\n        with:\n          build_command: npm run build\n          dist_path: \"build\"\n          token: ${{ secrets.GITHUB_TOKEN }}\n        env:\n          CI: false\n"
  },
  {
    "path": ".github/workflows/translations.yml",
    "content": "name: Translations\n\non: [push]\n\njobs:\n  check-translations:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v2\n\n      - name: Check all text has been translated\n        run: npm run check-translations\n"
  },
  {
    "path": ".gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n**/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n/jest-coverage\n/cypress-coverage\n/.nyc_output\n/reports\n\n\n/src/static/contracts/compiled/*.ts\n\n\n# production\n/build\n\n# misc\n.DS_Store\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\ncypress/screenshots\ncypress/videos\ncypress.env.json\n\n.next\n.now\n.vercel\n.env\n\n.eslintcache\n"
  },
  {
    "path": ".nycrc.json",
    "content": "{\n  \"report-dir\": \"cypress-coverage\"\n}\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"printWidth\": 80,\n  \"tabWidth\": 2,\n  \"semicolons\": true,\n  \"singleQuote\": false,\n  \"jsxBracketSameLine\": false\n}\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n  // Use IntelliSense to learn about possible attributes.\n  // Hover to view descriptions of existing attributes.\n  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"chrome\",\n      \"request\": \"launch\",\n      \"name\": \"Launch Chrome against localhost\",\n      \"url\": \"http://localhost:3000\",\n      \"webRoot\": \"${workspaceFolder}\"\n    }\n  ]\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU Affero General Public License is a free, copyleft license for\nsoftware and other kinds of works, specifically designed to ensure\ncooperation with the community in the case of network server software.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nour General Public Licenses are intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  Developers that use our General Public Licenses protect your rights\nwith two steps: (1) assert copyright on the software, and (2) offer\nyou this License which gives you legal permission to copy, distribute\nand/or modify the software.\n\n  A secondary benefit of defending all users' freedom is that\nimprovements made in alternate versions of the program, if they\nreceive widespread use, become available for other developers to\nincorporate.  Many developers of free software are heartened and\nencouraged by the resulting cooperation.  However, in the case of\nsoftware used on network servers, this result may fail to come about.\nThe GNU General Public License permits making a modified version and\nletting the public access it on a server without ever releasing its\nsource code to the public.\n\n  The GNU Affero General Public License is designed specifically to\nensure that, in such cases, the modified source code becomes available\nto the community.  It requires the operator of a network server to\nprovide the source code of the modified version running there to the\nusers of that server.  Therefore, public use of a modified version, on\na publicly accessible server, gives the public access to the source\ncode of the modified version.\n\n  An older license, called the Affero General Public License and\npublished by Affero, was designed to accomplish similar goals.  This is\na different license, not a version of the Affero GPL, but Affero has\nreleased a new version of the Affero GPL which permits relicensing under\nthis license.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU Affero General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Remote Network Interaction; Use with the GNU General Public License.\n\n  Notwithstanding any other provision of this License, if you modify the\nProgram, your modified version must prominently offer all users\ninteracting with it remotely through a computer network (if your version\nsupports such interaction) an opportunity to receive the Corresponding\nSource of your version by providing access to the Corresponding Source\nfrom a network server at no charge, through some standard or customary\nmeans of facilitating copying of software.  This Corresponding Source\nshall include the Corresponding Source for any work covered by version 3\nof the GNU General Public License that is incorporated pursuant to the\nfollowing paragraph.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the work with which it is combined will remain governed by version\n3 of the GNU General Public License.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU Affero General Public License from time to time.  Such new versions\nwill be similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU Affero General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU Affero General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU Affero General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU Affero General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU Affero General Public License for more details.\n\n    You should have received a copy of the GNU Affero General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If your software can interact with users remotely through a computer\nnetwork, you should also make sure that it provides a way for users to\nget its source.  For example, if your program is a web application, its\ninterface could display a \"Source\" link that leads users to an archive\nof the code.  There are many ways you could offer source, and different\nsolutions will be better for different programs; see section 13 for the\nspecific requirements.\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU AGPL, see\n<https://www.gnu.org/licenses/>.\n"
  },
  {
    "path": "README.md",
    "content": "# Rari dApp &middot; ![Tests](https://github.com/Rari-Capital/rari-dApp/workflows/Tests/badge.svg) &middot; [![Coverage Status](https://coveralls.io/repos/github/Rari-Capital/rari-dApp/badge.svg?branch=master)](https://coveralls.io/github/Rari-Capital/rari-dApp?branch=master)\n\nRari Capital's Web3 Portal.\n\n## Requirements\n\n- node: `v14.17.0`\n- npm: `v7.21.0`\n\n## Notes:\n\n<details>\n  <summary>What are the \"compiled\" folders in src/static?</summary>\n  \n- The `src/static/compiled` folder has misc. files that are auto generated from scripts like: [rari-tokens-generator](https://github.com/Rari-Capital/rari-tokens-generator)\n- You can generate these files using `npm install`.\n- These files are gitignored so do not worry about trying to commit them!\n </details>\n"
  },
  {
    "path": "api/rss.ts",
    "content": "import { NowRequest, NowResponse } from \"@vercel/node\";\n\nimport { variance, median } from \"mathjs\";\nimport fetch from \"node-fetch\";\n\nimport { fetchFusePoolData } from \"../src/utils/fetchFusePoolData\";\nimport { initFuseWithProviders, alchemyURL } from \"../src/utils/web3Providers\";\n\nfunction clamp(num, min, max) {\n  return num <= min ? min : num >= max ? max : num;\n}\n\ntype ThenArg<T> = T extends PromiseLike<infer U> ? U : T;\n\nconst weightedCalculation = async (\n  calculation: () => Promise<number>,\n  weight: number\n) => {\n  return clamp((await calculation()) ?? 0, 0, 1) * weight;\n};\n\nconst fuse = initFuseWithProviders(alchemyURL);\n\nasync function computeAssetRSS(address: string): Promise<{\n  liquidityUSD: number;\n\n  mcap: number;\n  volatility: number;\n  liquidity: number;\n  swapCount: number;\n  coingeckoMetadata: number;\n  exchanges: number;\n  transfers: number;\n\n  totalScore: number;\n}> {\n  address = address.toLowerCase();\n\n  // swap sOHM to OHM with a penalty.\n  if (address === \"0x04f2694c8fcee23e8fd0dfea1d4f5bb8c352111f\") {\n    let OHM_RSS = await computeAssetRSS(\n      \"0x383518188c0c6d7730d91b2c03a03c837814a899\"\n    );\n\n    // 10% smart contract risk penalty.\n    OHM_RSS.totalScore *= 0.9;\n\n    return OHM_RSS;\n  }\n\n  // max score for ETH.\n  if (address === \"0x0000000000000000000000000000000000000000\") {\n    return {\n      liquidityUSD: 4_000_000_000,\n\n      mcap: 33,\n      volatility: 20,\n      liquidity: 32,\n      swapCount: 7,\n      coingeckoMetadata: 2,\n      exchanges: 3,\n      transfers: 3,\n\n      totalScore: 100,\n    };\n  }\n\n  try {\n    // Fetch all the data in parallel\n    const [\n      {\n        market_data: {\n          market_cap: { usd: asset_market_cap },\n          current_price: { usd: price_usd },\n        },\n        tickers,\n        community_data: { twitter_followers },\n      },\n\n      uniData,\n\n      sushiData,\n\n      defiCoins,\n\n      assetVariation,\n\n      ethVariation,\n    ] = await Promise.all([\n      fetch(\n        `https://api.coingecko.com/api/v3/coins/ethereum/contract/${address}`\n      ).then((res) => res.json()),\n\n      fetch(\"https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2\", {\n        method: \"post\",\n\n        body: JSON.stringify({\n          query: `{\n  token(id: \"${address}\") {\n    totalLiquidity\n    txCount\n  }\n}`,\n        }),\n\n        headers: { \"Content-Type\": \"application/json\" },\n      }).then((res) => res.json()),\n\n      fetch(\n        \"https://api.thegraph.com/subgraphs/name/zippoxer/sushiswap-subgraph-fork\",\n        {\n          method: \"post\",\n\n          body: JSON.stringify({\n            query: `{\n            token(id: \"${address}\") {\n              totalLiquidity\n              txCount\n            }\n          }`,\n          }),\n\n          headers: { \"Content-Type\": \"application/json\" },\n        }\n      ).then((res) => res.json()),\n\n      fetch(\n        `https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&category=decentralized_finance_defi&order=market_cap_desc&per_page=10&page=1&sparkline=false`\n      )\n        .then((res) => res.json())\n        .then((array) => array.slice(0, 30)),\n\n      fetch(\n        `https://api.coingecko.com/api/v3/coins/ethereum/contract/${address}/market_chart/?vs_currency=usd&days=30`\n      )\n        .then((res) => res.json())\n        .then((data) => data.prices.map(([, price]) => price))\n        .then((prices) => variance(prices)),\n\n      fetch(\n        `https://api.coingecko.com/api/v3/coins/ethereum/market_chart/?vs_currency=usd&days=30`\n      )\n        .then((res) => res.json())\n        .then((data) => data.prices.map(([, price]) => price))\n        .then((prices) => variance(prices)),\n    ]);\n\n    const mcap = await weightedCalculation(async () => {\n      const medianDefiCoinMcap = median(\n        defiCoins.map((coin) => coin.market_cap)\n      );\n\n      // Make exception for WETH\n      if (address === \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\") {\n        return 1;\n      }\n\n      if (asset_market_cap < 1_000_000) {\n        return 0;\n      } else {\n        return asset_market_cap / medianDefiCoinMcap;\n      }\n    }, 33);\n\n    let liquidityUSD = 0;\n\n    const liquidity = await weightedCalculation(async () => {\n      const uniLiquidity = parseFloat(\n        uniData.data.token?.totalLiquidity ?? \"0\"\n      );\n      const sushiLiquidity = parseFloat(\n        sushiData.data.token?.totalLiquidity ?? \"0\"\n      );\n\n      const totalLiquidity = uniLiquidity + sushiLiquidity * price_usd;\n\n      liquidityUSD = totalLiquidity;\n\n      return totalLiquidity / 220_000_000;\n    }, 32);\n\n    const volatility = await weightedCalculation(async () => {\n      const peak = ethVariation * 3;\n\n      return 1 - assetVariation / peak;\n    }, 20);\n\n    const swapCount = await weightedCalculation(async () => {\n      const uniTxCount = parseFloat(uniData.data.token?.txCount ?? \"0\");\n\n      const sushiTxCount = parseFloat(sushiData.data.token?.txCount ?? \"0\");\n\n      const totalTxCount = uniTxCount + sushiTxCount;\n\n      return totalTxCount >= 10_000 ? 1 : 0;\n    }, 7);\n\n    const exchanges = await weightedCalculation(async () => {\n      let reputableExchanges: any[] = [];\n\n      for (const exchange of tickers) {\n        const name = exchange.market.identifier;\n\n        if (\n          !reputableExchanges.includes(name) &&\n          name !== \"uniswap\" &&\n          exchange.trust_score === \"green\"\n        ) {\n          reputableExchanges.push(name);\n        }\n      }\n\n      return reputableExchanges.length >= 3 ? 1 : 0;\n    }, 3);\n\n    const transfers = await weightedCalculation(async () => {\n      return 1;\n    }, 3);\n\n    const coingeckoMetadata = await weightedCalculation(async () => {\n      // USDC needs an exception because Circle twitter is not listed on Coingecko.\n      if (address === \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\") {\n        return 1;\n      }\n\n      return twitter_followers >= 1000 ? 1 : 0;\n    }, 2);\n\n    return {\n      liquidityUSD,\n\n      mcap,\n      volatility,\n      liquidity,\n      swapCount,\n      coingeckoMetadata,\n      exchanges,\n      transfers,\n\n      totalScore:\n        mcap +\n          volatility +\n          liquidity +\n          swapCount +\n          coingeckoMetadata +\n          exchanges +\n          transfers || 0,\n    };\n  } catch (e) {\n    console.log(e);\n\n    return {\n      liquidityUSD: 0,\n\n      mcap: 0,\n      volatility: 0,\n      liquidity: 0,\n      swapCount: 0,\n      coingeckoMetadata: 0,\n      exchanges: 0,\n      transfers: 0,\n\n      totalScore: 0,\n    };\n  }\n}\n\nexport default async (request: NowRequest, response: NowResponse) => {\n  const { address, poolID } = request.query as { [key: string]: string };\n\n  response.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n\n  let lastUpdated = new Date().toLocaleString(\"en-US\", {\n    timeZone: \"America/Los_Angeles\",\n  });\n\n  try {\n\n  if (address) {\n    response.setHeader(\"Cache-Control\", \"s-maxage=3600\");\n\n    response.json({ ...(await computeAssetRSS(address)), lastUpdated });\n  } else if (poolID) {\n    console.time(\"poolData\");\n    const { assets, totalLiquidityUSD, comptroller } = (await fetchFusePoolData(\n      poolID,\n      \"0x0000000000000000000000000000000000000000\",\n      fuse\n    ))!;\n\n    console.timeEnd(\"poolData\");\n\n    const liquidity = await weightedCalculation(async () => {\n      return totalLiquidityUSD > 50_000 ? totalLiquidityUSD / 2_000_000 : 0;\n    }, 25);\n\n    const collateralFactor = await weightedCalculation(async () => {\n      // @ts-ignore\n      const avgCollatFactor = assets.reduce(\n        (a, b, _, { length }) => a + b.collateralFactor / 1e16 / length,\n        0\n      );\n\n      // Returns a percentage in the range of 45% -> 90% (where 90% is 0% and 45% is 100%)\n      return -1 * (1 / 45) * avgCollatFactor + 2;\n    }, 10);\n\n    const reserveFactor = await weightedCalculation(async () => {\n      // @ts-ignore\n      const avgReserveFactor = assets.reduce(\n        (a, b, _, { length }) => a + b.reserveFactor / 1e16 / length,\n        0\n      );\n\n      return avgReserveFactor <= 2 ? 0 : avgReserveFactor / 13;\n    }, 10);\n\n    const utilization = await weightedCalculation(async () => {\n      for (let i = 0; i < assets.length; i++) {\n        const asset = assets[i];\n\n        // If this asset has more than 75% utilization, fail\n        if (\n          // @ts-ignore\n          asset.totalSupply === \"0\"\n            ? false\n            : asset.totalBorrow / asset.totalSupply >= 0.75\n        ) {\n          return 0;\n        }\n      }\n\n      return 1;\n    }, 10);\n\n    let assetsRSS: ThenArg<ReturnType<typeof computeAssetRSS>>[] = [];\n    let totalRSS = 0;\n\n    let promises: Promise<any>[] = [];\n\n    for (let i = 0; i < assets.length; i++) {\n      const asset = assets[i];\n\n      console.time(asset.underlyingSymbol);\n      promises.push(\n        fetch(\n          `http://${process.env.VERCEL_URL}/api/rss?address=` +\n            asset.underlyingToken\n        )\n          .then((res) => res.json())\n          .then((rss) => {\n            assetsRSS[i] = rss;\n            totalRSS += rss.totalScore;\n\n            console.timeEnd(asset.underlyingSymbol);\n          })\n      );\n    }\n\n    await Promise.all(promises);\n\n    const averageRSS = await weightedCalculation(async () => {\n      return totalRSS / assets.length / 100;\n    }, 15);\n\n    const upgradeable = await weightedCalculation(async () => {\n      try {\n        const { 0: admin, 1: upgradeable } =\n          await fuse.contracts.FusePoolLens.methods\n            .getPoolOwnership(comptroller)\n            .call({ gas: 1e18 });\n\n        // These addresses MUST be ALL LOWERCASE!\n        const rariMultisigs = [\n          \"0xa731585ab05fc9f83555cf9bff8f58ee94e18f85\",\n          \"0x5ea4a9a7592683bf0bc187d6da706c6c4770976f\",\n          \"0x7d7ec1c9b40f8d4125d2ee524e16b65b3ee83e8f\",\n          \"0x7b502f1aa0f48b83ca6349e1f42cacd8150307a6\",\n          \"0x521cf3d673f4b2025be0bdb03d6410b111cd17d5\",\n          \"0x49529a7ccbd9f8cabbfa36c65feb39ae08bdea0f\",\n          \"0x639572471f2f318464dc01066a56867130e45e25\",\n          \"0x7b34e07da62c716ab79390d37e09182b48f1936d\",\n          \"0x0cf30dc0d48604a301df8010cdc028c055336b2e\",\n        ];\n\n        if (rariMultisigs.includes(admin.toLowerCase())) {\n          return 1;\n        }\n\n        return upgradeable ? 0 : 1;\n      } catch (e) {\n        // Assume upgradeable.\n        return 0;\n      }\n    }, 10);\n\n    const mustPass = await weightedCalculation(async () => {\n      const comptrollerContract = new fuse.web3.eth.Contract(\n        JSON.parse(\n          fuse.compoundContracts[\"contracts/Comptroller.sol:Comptroller\"].abi\n        ),\n        comptroller\n      );\n\n      // Ex: 8\n      const liquidationIncentive =\n        (await comptrollerContract.methods\n          .liquidationIncentiveMantissa()\n          .call()) /\n          1e16 -\n        100;\n\n      for (let i = 0; i < assetsRSS.length; i++) {\n        const rss = assetsRSS[i];\n        const asset = assets[i];\n\n        // Ex: 75\n        const collateralFactor = asset.collateralFactor / 1e16;\n\n        // If the AMM liquidity is less than 2x the $ amount supplied, fail\n        if (rss.liquidityUSD < 2 * asset.totalSupplyUSD) {\n          return 0;\n        }\n\n        // If any of the RSS asset scores are less than 60, fail\n        if (rss.totalScore < 60) {\n          return 0;\n        }\n\n        // If the collateral factor and liquidation incentive do not have at least a 5% safety margin, fail\n        if (collateralFactor + liquidationIncentive > 95) {\n          /* \n        \n          See this tweet for why: https://twitter.com/transmissions11/status/1378862288266960898\n        \n          TLDR: If CF and LI add up to be greater than 100 then any liquidation will result in instant insolvency. 95 has been determined to be the highest sum that could be considered \"safe\".\n        \n          */\n\n          return 0;\n        }\n\n        // If the liquidation incentive is less than or equal to 1/10th of the collateral factor, fail\n        if (liquidationIncentive <= collateralFactor / 10) {\n          return 0;\n        }\n      }\n\n      return 1;\n    }, 20);\n\n    response.setHeader(\"Cache-Control\", \"s-maxage=3600\");\n    response.json({\n      liquidity,\n      collateralFactor,\n      reserveFactor,\n      utilization,\n      averageRSS,\n      upgradeable,\n      mustPass,\n\n      totalScore:\n        liquidity +\n          collateralFactor +\n          reserveFactor +\n          utilization +\n          averageRSS +\n          upgradeable +\n          mustPass || 0,\n\n      lastUpdated,\n    });\n\n    console.log(\"done!\");\n  } else {\n    return response.status(404).send(\"Specify address or poolID!\");\n  }\n} catch (err) {\n    return response.status(500).send(\"Error fetching RSS.\");\n}\n\n};\n"
  },
  {
    "path": "api/stats.ts",
    "content": "import { NowRequest, NowResponse } from \"@vercel/node\";\n\nimport Rari from \"../src/rari-sdk/index\";\n\nimport { alchemyURL, initFuseWithProviders } from \"../src/utils/web3Providers\";\n\nimport { perPoolTVL } from \"../src/utils/fetchTVL\";\nimport {\n  fetchDAIPoolAPY,\n  fetchPoolAPY,\n  fetchRGTAPR,\n} from \"../src/utils/fetchPoolAPY\";\nimport { Pool } from \"../src/utils/poolUtils\";\n\nconst rari = new Rari(alchemyURL);\nconst fuse = initFuseWithProviders();\n\nconst mantissaToFloat = (BN: any) => {\n  return parseFloat(rari.web3.utils.fromWei(BN));\n};\n\nexport default async (request: NowRequest, response: NowResponse) => {\n  const [\n    tvls,\n    rawStablePoolAPY,\n    rawYieldPoolAPY,\n    rawEthPoolAPY,\n    rawDaiPoolAPY,\n    rawRgtAPR,\n  ] = await Promise.all([\n    perPoolTVL(rari, fuse),\n    fetchPoolAPY(rari, Pool.USDC),\n    fetchPoolAPY(rari, Pool.YIELD),\n    fetchPoolAPY(rari, Pool.ETH),\n    fetchDAIPoolAPY(rari),\n    fetchRGTAPR(rari),\n  ]);\n\n  const stablePoolAPY = parseFloat(rawStablePoolAPY!);\n  const yieldPoolAPY = parseFloat(rawYieldPoolAPY!);\n  const ethPoolAPY = parseFloat(rawEthPoolAPY!);\n  const daiPoolAPY = parseFloat(rawDaiPoolAPY!);\n\n  const rgtAPR = parseFloat(rawRgtAPR);\n\n  response.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n  response.setHeader(\"Cache-Control\", \"s-maxage=600\");\n\n  response.json({\n    tvl: mantissaToFloat(\n      tvls.stableTVL\n        .add(tvls.yieldTVL)\n        .add(tvls.ethTVL)\n        .add(tvls.daiTVL)\n        .add(tvls.stakedTVL)\n        .add(tvls.fuseTVL)\n    ),\n\n    stableTVL: mantissaToFloat(tvls.stableTVL),\n    yieldTVL: mantissaToFloat(tvls.yieldTVL),\n    ethTVL: mantissaToFloat(tvls.ethTVL),\n    daiTVL: mantissaToFloat(tvls.daiTVL),\n    stakedTVL: mantissaToFloat(tvls.stakedTVL),\n    fuseTVL: mantissaToFloat(tvls.fuseTVL),\n    ///////////\n    rgtAPR,\n    stablePoolAPY,\n    ethPoolAPY,\n    yieldPoolAPY,\n    daiPoolAPY,\n  });\n};\n"
  },
  {
    "path": "api/tokenData.ts",
    "content": "import Vibrant from \"node-vibrant\";\nimport { Palette } from \"node-vibrant/lib/color\";\nimport fetch from \"node-fetch\";\nimport Web3 from \"web3\";\nimport ERC20ABI from \"../src/rari-sdk/abi/ERC20.json\";\nimport { TokenDataOverrides } from \"../src/constants/tokenData\";\nimport {\n  ChainID,\n  isSupportedChainId,\n  coingeckoNetworkPath,\n  networkData,\n} from \"../src/constants/networks\";\n\nimport { VercelRequest, VercelResponse } from \"@vercel/node\";\n\nimport axios from \"axios\";\n\ntype TokenData = {\n  color;\n  overlayTextColor;\n  address;\n  chainId;\n};\n\n/**\n * Ok so coingecko has minimal data on tokens not on Ethereum\n * For L2, we must rely on projects maintaining L2 tokenLists\n *\n */\n\n// params: address (required), chainId (optional) (default 1)\nlet method: \"RARI\" | \"COINGECKO\" | \"CONTRACT\";\nexport default async (request: VercelRequest, response: VercelResponse) => {\n  response.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n  response.setHeader(\"Cache-Control\", \"max-age=3600, s-maxage=3600\");\n\n  const { address: _address, chainId: _chainId = \"1\" } = request.query;\n\n  let chainId: number;\n\n  // Validate ChainID\n  try {\n    chainId = parseInt(_chainId as string);\n    if (!isSupportedChainId(chainId)) {\n      throw \"Unsupported ChainID\";\n    }\n  } catch {\n    return response.status(500).send(`Unsupported Chain ID: ${_chainId}`);\n  }\n\n  // Try to get networkdata\n  const netData = networkData[chainId];\n  if (!netData) {\n    return response\n      .status(500)\n      .send(\n        `Network supported but Could not find network data for chain ID: ${chainId}`\n      );\n  }\n\n  // Instiantate variables\n  let name: string;\n  let symbol: string;\n  let logoURL: string =\n    \"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\";\n\n  // Instantiate Token Contract on proper chain\n  const web3 = new Web3(netData.rpc);\n  const address = web3.utils.toChecksumAddress(_address as string);\n  const tokenContract = new web3.eth.Contract(ERC20ABI as any, address);\n\n  // L1/L2 URLS\n  const rariURL = `https://raw.githubusercontent.com/sharad-s/rari-token-list/main/tokens/${chainId}/${address}/info.json`;\n  const coingeckoURL = `https://api.coingecko.com/api/v3/coins/${coingeckoNetworkPath[chainId]}/contract/${address}`;\n\n  // L1 URLS\n  const trustWalletURL = `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/${address}/logo.png`;\n  const yearnLogoURL = `https://raw.githubusercontent.com/yearn/yearn-assets/master/icons/tokens/${address}/logo-128.png`;\n\n  let decimals = 18;\n  let rariTokenData;\n\n  // Get decimals, return 404 if cant\n  try {\n    decimals = await tokenContract.methods.decimals().call();\n  } catch {\n    return response\n      .status(404)\n      .send(`Invalid Token ${address} on chain ${chainId}`);\n  }\n\n  // Rari Token Data\n  try {\n    // Fetch data from rari token data first\n    const { data } = await axios.get(rariURL);\n    rariTokenData = data;\n  } catch (err) {\n    console.log(`Could not find Rari Token Data at url ${rariURL}}`);\n  } finally {\n    console.log({ rariTokenData, rariURL });\n  }\n\n  //1.) Try Rari Token list 2.) Try Coingecko 3.) Try contracts\n  if (!!rariTokenData) {\n    // We got data from rari token list\n    let { symbol: _symbol, name: _name, logoURI } = rariTokenData;\n    symbol =\n      _symbol == !!_symbol?.toLowerCase() ? _symbol.toUpperCase() : _symbol;\n    name = _name;\n    logoURL = logoURI;\n    method = \"RARI\";\n  } else {\n    // We could not get data from rari token list. Try Coingecko\n\n    const { data: coingeckoData } = await axios.get(coingeckoURL);\n\n    if (!!coingeckoData) {\n      // We got data from Coingecko\n      let {\n        symbol: _symbol,\n        name: _name,\n        image: { small },\n      } = coingeckoData;\n\n      symbol =\n        _symbol == !!_symbol?.toLowerCase() ? _symbol?.toUpperCase() : _symbol;\n      name = _name;\n      // Prefer the logo from trustwallet if possible!\n      const trustWalletLogoResponse = await fetch(trustWalletURL);\n      if (trustWalletLogoResponse.ok) {\n        logoURL = trustWalletURL;\n      } else {\n        logoURL = small;\n      }\n      method = \"COINGECKO\";\n    } else {\n      // We could not get data from coingecko. Use the contract data\n      try {\n        name = await tokenContract.methods.name().call();\n        symbol = await tokenContract.methods.symbol().call();\n      } catch (err) {\n        return response\n          .status(404)\n          .send(\n            `Could not get name and symbol for token ${address} on chain ${chainId}`\n          );\n      }\n\n      // We can't get the logo data from literally anywhere else so try one last time from yearn\n      const yearnLogoResponse = await fetch(yearnLogoURL);\n      if (yearnLogoResponse.ok) {\n        // A lot of the yearn tokens are curve tokens with long names,\n        // so we flatten them here and just remove the Curve part\n        symbol = symbol.replace(\"Curve-\", \"\");\n        logoURL = yearnLogoURL;\n      }\n      method = \"CONTRACT\";\n    }\n  }\n\n  // Assign any overides if any specified\n  let overrides = {};\n  if (!!TokenDataOverrides[chainId]) {\n    overrides = TokenDataOverrides[chainId][address] ?? {};\n  }\n  const basicTokenInfo = Object.assign(\n    {},\n    {\n      symbol,\n      name,\n      decimals,\n      logoURL,\n    },\n    overrides\n  );\n\n  console.log({ overrides, basicTokenInfo, address });\n\n  // Get the color\n  let color: Palette;\n  try {\n    if (basicTokenInfo.logoURL === undefined) {\n      // If we have no logo no need to try to get the color\n      // just go to the catch block and return the default logo.\n      throw \"Go to the catch block\";\n    }\n\n    color = await Vibrant.from(basicTokenInfo.logoURL).getPalette();\n  } catch (error) {\n    return response.json({\n      ...basicTokenInfo,\n      color: \"#FFFFFF\",\n      overlayTextColor: \"#000\",\n      address,\n    });\n  }\n\n  if (!color.Vibrant) {\n    response.json({\n      ...basicTokenInfo,\n      color: \"#FFFFFF\",\n      overlayTextColor: \"#000\",\n      address,\n    });\n\n    return;\n  }\n\n  response.json({\n    ...basicTokenInfo,\n    color: color.Vibrant.getHex(),\n    overlayTextColor: color.Vibrant.getTitleTextColor(),\n    address,\n  });\n};\n"
  },
  {
    "path": "api/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"noImplicitAny\": false,\n    \"noFallthroughCasesInSwitch\": true\n  },\n  \"include\": [\".\"]\n}\n"
  },
  {
    "path": "cypress/README.md",
    "content": "# Cypress.io end-to-end tests\n\n[Cypress.io](https://www.cypress.io) is an open source, MIT licensed end-to-end test runner\n\n## Folder structure\n\nThese folders hold end-to-end tests and supporting files for the Cypress Test Runner.\n\n- [fixtures](fixtures) holds optional JSON data for mocking, [read more](https://on.cypress.io/fixture)\n- [e2e](integration) holds the actual test files, [read more](https://on.cypress.io/writing-and-organizing-tests)\n- [plugins](plugins) allow you to customize how tests are loaded, [read more](https://on.cypress.io/plugins)\n- [support](support) file runs before all tests and is a great place to write or load additional custom commands, [read more](https://on.cypress.io/writing-and-organizing-tests#Support-file)\n\n## `cypress.json` file\n\nYou can configure project options in the [../cypress.json](../cypress.json) file, see [Cypress configuration doc](https://on.cypress.io/configuration).\n\n## More information\n\n- [https://github.com/cypress.io/cypress](https://github.com/cypress.io/cypress)\n- [https://docs.cypress.io/](https://docs.cypress.io/)\n- [Writing your first Cypress test](http://on.cypress.io/intro)\n"
  },
  {
    "path": "cypress/e2e/E2E.spec.js",
    "content": "// type definitions for Cypress object \"cy\"\n/// <reference types=\"cypress\" />\n\ndescribe(\"E2E\", function () {\n  before(() => {\n    cy.visit(\"/\");\n  });\n\n  it(\"renders the pool page\", () => {\n    cy.findByText(/Latest Rari News/i).should(\"be.visible\");\n  });\n});\n"
  },
  {
    "path": "cypress/fixtures/example.json",
    "content": "{\n  \"name\": \"Using fixtures to represent data\",\n  \"email\": \"hello@cypress.io\",\n  \"body\": \"Fixtures are a great way to mock data for responses to routes\"\n}\n"
  },
  {
    "path": "cypress/plugins/index.js",
    "content": "// ***********************************************************\n// This example plugins/index.js can be used to load plugins\n//\n// You can change the location of this file or turn off loading\n// the plugins file with the 'pluginsFile' configuration option.\n//\n// You can read more here:\n// https://on.cypress.io/plugins-guide\n// ***********************************************************\n\n// This function is called when a project is opened or re-opened (e.g. due to\n// the project's config changing)\n\nmodule.exports = (on, config) => {\n  // `on` is used to hook into various events Cypress emits\n  // `config` is the resolved Cypress config\n\n  require(\"@cypress/code-coverage/task\")(on, config);\n\n  return config;\n};\n"
  },
  {
    "path": "cypress/support/commands.js",
    "content": "// ***********************************************\n// This example commands.js shows you how to\n// create various custom commands and overwrite\n// existing commands.\n//\n// For more comprehensive examples of custom\n// commands please read more here:\n// https://on.cypress.io/custom-commands\n// ***********************************************\n//\n//\n// -- This is a parent command --\n// Cypress.Commands.add(\"login\", (email, password) => { ... })\n//\n//\n// -- This is a child command --\n// Cypress.Commands.add(\"drag\", { prevSubject: 'element'}, (subject, options) => { ... })\n//\n//\n// -- This is a dual command --\n// Cypress.Commands.add(\"dismiss\", { prevSubject: 'optional'}, (subject, options) => { ... })\n//\n//\n// -- This will overwrite an existing command --\n// Cypress.Commands.overwrite(\"visit\", (originalFn, url, options) => { ... })\n\nimport \"@testing-library/cypress/add-commands\";\n"
  },
  {
    "path": "cypress/support/index.js",
    "content": "// ***********************************************************\n// This example support/index.js is processed and\n// loaded automatically before your test files.\n//\n// This is a great place to put global configuration and\n// behavior that modifies Cypress.\n//\n// You can change the location of this file or turn off\n// automatically serving support files with the\n// 'supportFile' configuration option.\n//\n// You can read more here:\n// https://on.cypress.io/configuration\n// ***********************************************************\n\n// Import commands.js using ES2015 syntax:\nimport \"./commands\";\n\n// Import cypress/code-coverage/support for code coverage\nimport \"@cypress/code-coverage/support\";\n\n// Alternatively you can use CommonJS syntax:\n// require('./commands')\n"
  },
  {
    "path": "cypress.json",
    "content": "{\n  \"baseUrl\": \"http://localhost:3000\",\n  \"integrationFolder\": \"cypress/e2e\",\n  \"projectId\": \"s8v41s\"\n}\n"
  },
  {
    "path": "hardhat.config.js",
    "content": "/**\n * @type import('hardhat/config').HardhatUserConfig\n */\n module.exports = {\n    solidity: \"0.7.3\",\n    networks: {\n      hardhat: {\n        forking: {\n          url: \"https://eth-mainnet.alchemyapi.io/v2/2Mt-6brbJvTA4w9cpiDtnbTo6qOoySnN\"\n        },\n        blockGasLimit: 12500000,\n        initialBaseFeePerGas: \"0\",\n        allowUnlimitedContractSize: true,   \n      }\n    }\n  };"
  },
  {
    "path": "i18next-scanner.config.js",
    "content": "module.exports = {\n  input: [\"./src/**/*.{ts,tsx}\"],\n  output: \"./\",\n  options: {\n    debug: true,\n\n    removeUnusedKeys: true,\n\n    func: {\n      list: [\"t\"],\n      extensions: [\".ts\", \".tsx\"],\n    },\n\n    lngs: [\"en\", \"zh-CN\", \"zh-TW\"],\n    defaultLng: \"en\",\n\n    ns: [\"translation\"],\n    defaultNs: \"translation\",\n\n    defaultValue: function (lng, ns, key) {\n      if (lng === \"en\") {\n        // Return key as the default value for English language\n        return key;\n      }\n      // Return the string '__NOT_TRANSLATED__' for other languages\n      return \"__NOT_TRANSLATED__\";\n    },\n\n    resource: {\n      loadPath: \"./src/locales/{{lng}}.json\",\n      savePath: \"./src/locales/{{lng}}.json\",\n    },\n\n    nsSeparator: false,\n    keySeparator: false,\n  },\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"rari-dapp\",\n  \"version\": \"3.0.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@aave/protocol-v2\": \"^1.0.1\",\n    \"@brainhubeu/react-carousel\": \"^2.0.3\",\n    \"@chakra-ui/icons\": \"^1.0.0\",\n    \"@chakra-ui/react\": \"^1.3.4\",\n    \"@cypress/code-coverage\": \"^3.8.1\",\n    \"@cypress/instrument-cra\": \"^1.4.0\",\n    \"@emotion/react\": \"^11.0.0\",\n    \"@emotion/styled\": \"^11.0.0\",\n    \"@loadable/component\": \"^5.13.2\",\n    \"@sushiswap/default-token-list\": \"^20.11.0\",\n    \"@testing-library/cypress\": \"^7.0.1\",\n    \"@testing-library/jest-dom\": \"^5.11.2\",\n    \"@testing-library/react\": \"^11.0.4\",\n    \"@testing-library/user-event\": \"^12.1.6\",\n    \"@types/jest\": \"^26.0.13\",\n    \"@types/loadable__component\": \"^5.13.1\",\n    \"@types/mathjs\": \"^6.0.11\",\n    \"@types/node\": \"^14.11.7\",\n    \"@types/node-fetch\": \"^2.5.8\",\n    \"@types/react\": \"^17.0.0\",\n    \"@types/react-dom\": \"^17.0.0\",\n    \"@types/react-virtualized-auto-sizer\": \"^1.0.0\",\n    \"@types/react-window\": \"^1.8.2\",\n    \"@walletconnect/web3-provider\": \"^1.7.1\",\n    \"apexcharts\": \"3.20.2\",\n    \"axios\": \"^0.20.0\",\n    \"bad-words\": \"^3.0.4\",\n    \"bignumber.js\": \"^9.0.1\",\n    \"buttered-chakra\": \"^4.3.0\",\n    \"chakra-ui-steps\": \"^1.3.0\",\n    \"cypress\": \"^5.3.0\",\n    \"focus-visible\": \"^5.2.0\",\n    \"framer-motion\": \"^4.1.11\",\n    \"fuse.js\": \"^6.4.6\",\n    \"history\": \"^5.0.0\",\n    \"i18next\": \"^19.7.0\",\n    \"istanbul-lib-coverage\": \"^3.0.0\",\n    \"logrocket\": \"^1.0.14\",\n    \"mathjs\": \"^9.0.0\",\n    \"node-fetch\": \"^2.6.1\",\n    \"node-vibrant\": \"^3.1.6\",\n    \"nyc\": \"^15.1.0\",\n    \"rari-tokens-generator\": \"^2.0.0\",\n    \"react\": \"^16.13.1\",\n    \"react-apexcharts\": \"1.3.7\",\n    \"react-awesome-reveal\": \"^3.3.1\",\n    \"react-dom\": \"^16.13.1\",\n    \"react-double-marquee\": \"^1.0.6\",\n    \"react-error-boundary\": \"^3.0.2\",\n    \"react-fast-marquee\": \"^1.1.3\",\n    \"react-i18next\": \"^11.7.3\",\n    \"react-icons\": \"^3.11.0\",\n    \"react-ios-pwa-prompt\": \"^1.8.1\",\n    \"react-jazzicon\": \"^0.1.3\",\n    \"react-query\": \"^3.13.10\",\n    \"react-responsive-carousel\": \"^3.2.18\",\n    \"react-router-dom\": \"^6.0.0-beta.0\",\n    \"react-scripts\": \"4.0.1\",\n    \"react-spinners\": \"^0.9.0\",\n    \"react-virtualized-auto-sizer\": \"^1.0.2\",\n    \"react-window\": \"^1.8.5\",\n    \"typescript\": \"^4.0.3\",\n    \"walletlink\": \"^2.4.3\",\n    \"web3\": \"^1.2.11\",\n    \"web3modal\": \"^1.9.5\",\n    \"window-table\": \"^1.0.0-alpha.11\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"tsc --skipLibCheck -p ./tsconfig.json\",\n    \"start\": \"react-scripts -r @cypress/instrument-cra start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\",\n    \"unit-test\": \"react-scripts test --coverage --watchAll=false --coverageDirectory='jest-coverage'\",\n    \"e2e-test\": \"cypress run\",\n    \"test-all-with-coverage\": \"npm run unit-test && npm run e2e-test && npx merge-cypress-jest-coverage\",\n    \"translate\": \"npx i18next-scanner@2.11.0\",\n    \"check-translations\": \"npm run translate && if grep -q \\\"__NOT_TRANSLATED__\\\" src/locales/*.json; then echo \\\"Translations missing!\\\"; exit 1; else echo \\\"All translations present!\\\"; fi\",\n    \"compile-tokens\": \"node ./src/utils/compileTokenData.js\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.25%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  },\n  \"devDependencies\": {\n    \"@nomiclabs/hardhat-ethers\": \"^2.0.2\",\n    \"@nomiclabs/hardhat-waffle\": \"^2.0.1\",\n    \"@types/react-query\": \"^1.1.2\",\n    \"@types/react-slick\": \"^0.23.4\",\n    \"@vercel/node\": \"^1.8.3\",\n    \"chai\": \"^4.3.4\",\n    \"ethereum-waffle\": \"^3.4.0\",\n    \"ethers\": \"^5.4.7\",\n    \"hardhat\": \"^2.6.5\"\n  }\n}\n"
  },
  {
    "path": "public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Easily access the Rari Protocol through the Portal’s simple interface.\"\n    />\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>Rari Portal</title>\n  </head>\n\n  <body>\n    <noscript> aHR0cHM6Ly9wYXN0ZWJpbi5jb20vcmF3L1oxN3hocXFE </noscript>\n    <div id=\"root\"></div>\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\n  <!--\n  This font is only used for displaying APY and a header about the fund.\n  We only load the alphabet, the numbers, and the % symbol. \n  -->\n  <link\n    href=\"https://fonts.googleapis.com/css2?family=Baloo+2:wght@700&display=fallback&text=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv1234567890%\"\n    rel=\"stylesheet\"\n  />\n</html>\n"
  },
  {
    "path": "public/manifest.json",
    "content": "{\n  \"short_name\": \"Rari\",\n  \"name\": \"Rari\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"logo512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\n"
  },
  {
    "path": "src/components/App.tsx",
    "content": "import { Navigate, Outlet, Route, Routes } from \"react-router-dom\";\nimport { Heading } from \"@chakra-ui/react\";\nimport loadable from \"@loadable/component\";\nimport FullPageSpinner from \"./shared/FullPageSpinner\";\nimport { Pool } from \"../utils/poolUtils\";\nimport Layout from \"./shared/Layout\";\nimport { memo } from \"react\";\n\nconst MultiPoolPortal = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/MultiPoolPortal\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst PoolPortal = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/PoolPortal\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst TranchesPage = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/Tranches/TranchesPage\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst FusePoolsPage = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/Fuse/FusePoolsPage\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst FusePoolPage = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/Fuse/FusePoolPage\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst FusePoolInfoPage = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/Fuse/FusePoolInfoPage\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst FusePoolEditPage = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/Fuse/FusePoolEditPage\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst FusePoolCreatePage = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/Fuse/FusePoolCreatePage\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst FuseLiquidationsPage = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/Fuse/FuseLiquidationsPage\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst Pool2Page = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/Pool2/Pool2Page\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst StatsPage = loadable(\n  () => import(/* webpackPrefetch: true */ \"./pages/Stats\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst InterestRatesPage = loadable(\n  () =>\n    import(/* webpackPrefetch: true */ \"./pages/InterestRates/InterestRates\"),\n  {\n    fallback: <FullPageSpinner />,\n  }\n);\n\nconst PageNotFound = memo(() => {\n  return (\n    <Heading\n      color=\"#FFF\"\n      style={{\n        position: \"fixed\",\n        left: \"50%\",\n        top: \"50%\",\n        marginTop: \"-15px\",\n        marginLeft: \"-114px\",\n      }}\n    >\n      404: Not Found\n    </Heading>\n  );\n});\n\nconst App = memo(() => {\n  return (\n    <Layout>\n      <Routes>\n        <Route path=\"/pools\" element={<Outlet />}>\n          {Object.values(Pool).map((pool) => {\n            return (\n              <Route\n                key={pool}\n                path={pool}\n                element={<PoolPortal pool={pool} />}\n              />\n            );\n          })}\n        </Route>\n\n        <Route path=\"/tranches\" element={<TranchesPage />} />\n\n        <Route path=\"/pool2\" element={<Pool2Page />} />\n\n        <Route path=\"/fuse\" element={<FusePoolsPage />} />\n        <Route path=\"/fuse/liquidations\" element={<FuseLiquidationsPage />} />\n        <Route path=\"/fuse/new-pool\" element={<FusePoolCreatePage />} />\n        <Route path=\"/fuse/pool/:poolId\" element={<FusePoolPage />} />\n        <Route path=\"/fuse/pool/:poolId/info\" element={<FusePoolInfoPage />} />\n        <Route path=\"/fuse/pool/:poolId/edit\" element={<FusePoolEditPage />} />\n\n        <Route path=\"/utils\" element={<Navigate to=\"/\" replace={true} />} />\n        <Route path=\"/utils/interest-rates\" element={<InterestRatesPage />} />\n        <Route path=\"/utils/positions\" element={<StatsPage />} />\n\n        {/* Backwards Compatibility Routes */}\n        <Route\n          path=\"/interest_rates\"\n          element={<Navigate to=\"/utils/interest-rates\" replace={true} />}\n        />\n        <Route\n          path=\"/interest-rates\"\n          element={<Navigate to=\"/utils/interest-rates\" replace={true} />}\n        />\n        <Route\n          path=\"/positions\"\n          element={<Navigate to=\"/utils/positions\" replace={true} />}\n        />\n        {/* Backwards Compatibility Routes */}\n\n        <Route path=\"/\" element={<MultiPoolPortal />} />\n\n        <Route path=\"*\" element={<PageNotFound />} />\n      </Routes>\n    </Layout>\n  );\n});\n\nexport default App;\n"
  },
  {
    "path": "src/components/pages/ErrorPage.tsx",
    "content": "/* istanbul ignore file */\n\nimport { Code, Box, Heading, Text, Link } from \"@chakra-ui/react\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { ExternalLinkIcon } from \"@chakra-ui/icons\";\n\nimport { FallbackProps } from \"react-error-boundary\";\n\nconst ErrorPage: React.FC<FallbackProps> = ({ error }) => {\n  const { t } = useTranslation();\n\n  return (\n    <Box color=\"white\">\n      <Box bg=\"red.600\" width=\"100%\" p={4}>\n        <Heading>{t(\"Whoops! Looks like something went wrong!\")}</Heading>\n        <Text>\n          {t(\n            \"You can either reload the page, or report this error to us on our\"\n          )}{\" \"}\n          <Link isExternal href=\"https://github.com/Rari-Capital/rari-dApp\">\n            <u>GitHub</u>\n            <ExternalLinkIcon mx=\"2px\" />\n          </Link>\n        </Text>\n      </Box>\n\n      <Code colorScheme=\"red\">{error.toString()}</Code>\n    </Box>\n  );\n};\n\nexport default ErrorPage;\n"
  },
  {
    "path": "src/components/pages/Fuse/FuseLiquidationsPage.tsx",
    "content": "import { Box, Link, Spinner, Text } from \"@chakra-ui/react\";\nimport { Column, Row, RowOrColumn, useIsMobile } from \"utils/chakraUtils\";\nimport { useTranslation } from \"react-i18next\";\nimport { useRari } from \"context/RariContext\";\nimport { useIsSmallScreen } from \"hooks/useIsSmallScreen\";\nimport { smallUsdFormatter } from \"utils/bigUtils\";\n\nimport DashboardBox from \"../../shared/DashboardBox\";\nimport { Header } from \"../../shared/Header\";\nimport { ModalDivider } from \"../../shared/Modal\";\n\nimport FuseStatsBar from \"./FuseStatsBar\";\nimport FuseTabBar from \"./FuseTabBar\";\n\nimport { filterOnlyObjectProperties, FuseAsset } from \"utils/fetchFusePoolData\";\n\nimport Footer from \"components/shared/Footer\";\nimport { memo, useState } from \"react\";\n\n// @ts-ignore\nimport Jazzicon, { jsNumberForAddress } from \"react-jazzicon\";\nimport { CTokenIcon } from \"components/shared/CTokenIcon\";\nimport { useQuery } from \"react-query\";\n\nexport type LiquidatablePosition = {\n  account: string;\n  totalBorrow: number;\n  totalCollateral: number;\n  totalSupplied: number;\n  health: number;\n  assets: FuseAsset[];\n  poolID: number;\n};\n\nexport type LiquidationEvent = {\n  borrower: string;\n  cTokenBorrowed: string;\n  cTokenCollateral: string;\n  borrowedTokenAddress: string;\n  suppliedTokenAddress: string;\n  liquidator: string;\n\n  borrowedTokenUnderlyingDecimals: number;\n  borrowedTokenUnderlyingSymbol: string;\n\n  repayAmount: number;\n  seizeTokens: number;\n  blockNumber: number;\n  timestamp: number;\n  transactionHash: string;\n  transactionIndex: number;\n  poolID: number;\n};\n\nconst FuseLiquidationsPage = memo(() => {\n  const isMobile = useIsSmallScreen();\n\n  const { fuse, isAuthed } = useRari();\n\n  const { data: liquidations } = useQuery(\"liquidations\", async () => {\n    const pools = await fuse.contracts.FusePoolDirectory.methods\n      .getAllPools()\n      .call();\n\n    let liquidationEvents: LiquidationEvent[] = [];\n\n    let poolFetches: Promise<any>[] = [];\n\n    for (let poolID = 0; poolID < pools.length; poolID++) {\n      const pool = pools[poolID];\n\n      console.log(pool.comptroller, poolID);\n\n      if (poolID === 4) {\n        // Pool 4 is broken, we'll just skip it for now.\n        continue;\n      }\n\n      poolFetches.push(\n        fuse.contracts.FusePoolLens.methods\n          .getPoolAssetsWithData(pool.comptroller)\n          .call()\n          .then(async (assets: FuseAsset[]) => {\n            let eventFetches: Promise<any>[] = [];\n\n            for (const asset of assets) {\n              // If the asset has no borrowers, just skip it.\n              if (parseInt(asset.totalBorrow as any) === 0) {\n                continue;\n              }\n\n              const cToken = new fuse.web3.eth.Contract(\n                JSON.parse(\n                  fuse.compoundContracts[\n                    \"contracts/CEtherDelegate.sol:CEtherDelegate\"\n                  ].abi\n                ),\n                asset.cToken\n              );\n\n              eventFetches.push(\n                cToken\n                  .getPastEvents(\"LiquidateBorrow\", {\n                    fromBlock: 12060000,\n                    toBlock: \"latest\",\n                  })\n                  .then(async (events) => {\n                    let promises: Promise<any>[] = [];\n\n                    for (const event of events) {\n                      const suppliedToken = assets.find((a) => {\n                        return (\n                          a.cToken.toLowerCase() ===\n                          event.returnValues.cTokenCollateral.toLowerCase()\n                        );\n                      })!;\n\n                      promises.push(\n                        fuse.web3.eth\n                          .getBlock(event.blockNumber)\n                          .then((blockInfo) => {\n                            liquidationEvents.push({\n                              ...filterOnlyObjectProperties(event.returnValues),\n                              cTokenBorrowed: asset.cToken,\n\n                              borrowedTokenAddress: asset.underlyingToken,\n                              suppliedTokenAddress:\n                                suppliedToken.underlyingToken,\n\n                              borrowedTokenUnderlyingDecimals:\n                                asset.underlyingDecimals,\n                              borrowedTokenUnderlyingSymbol:\n                                asset.underlyingSymbol,\n\n                              poolID,\n\n                              blockNumber: event.blockNumber,\n                              timestamp: blockInfo.timestamp,\n\n                              transactionHash: event.transactionHash,\n                              transactionIndex: event.transactionIndex,\n                            });\n                          })\n                      );\n                    }\n\n                    await Promise.all(promises);\n                  })\n              );\n            }\n\n            await Promise.all(eventFetches);\n          })\n      );\n    }\n\n    await Promise.all(poolFetches);\n\n    return liquidationEvents.sort((a, b) => {\n      if (b.blockNumber !== a.blockNumber) {\n        return b.blockNumber - a.blockNumber;\n      } else {\n        return b.transactionIndex - a.transactionIndex;\n      }\n    });\n  });\n\n  const [liquidationsToShow, setLiquidationsToShow] = useState(10);\n  const limitedLiquidations = liquidations?.slice(0, liquidationsToShow);\n\n  return (\n    <>\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        color=\"#FFFFFF\"\n        mx=\"auto\"\n        width={isMobile ? \"100%\" : \"1000px\"}\n        height=\"100%\"\n        px={isMobile ? 4 : 0}\n      >\n        <Header isAuthed={isAuthed} isFuse />\n        <FuseStatsBar />\n\n        <FuseTabBar />\n\n        <RowOrColumn\n          isRow={!isMobile}\n          mt={4}\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n          height={isMobile ? \"400px\" : \"200px\"}\n        >\n          <DashboardBox\n            height=\"100%\"\n            width=\"100%\"\n            overflow=\"hidden\"\n            bg=\"#141619\"\n          >\n            <iframe\n              src=\"https://metrics.rari.capital/d-solo/NlUs6DwGk/fuse-overview?orgId=1&refresh=5m&panelId=19\"\n              height=\"100%\"\n              width=\"100%\"\n              title=\"Liquidation Count\"\n            />\n          </DashboardBox>\n        </RowOrColumn>\n\n        <DashboardBox width=\"100%\" mt={4}>\n          <LiquidationEventsList\n            liquidations={limitedLiquidations}\n            totalLiquidations={liquidations?.length ?? 0}\n            setLiquidationsToShow={setLiquidationsToShow}\n          />\n        </DashboardBox>\n\n        <Footer />\n      </Column>\n    </>\n  );\n});\n\nexport default FuseLiquidationsPage;\n\nconst LiquidationEventsList = ({\n  liquidations,\n  totalLiquidations,\n  setLiquidationsToShow,\n}: {\n  liquidations?: LiquidationEvent[];\n  totalLiquidations: number;\n  setLiquidationsToShow: React.Dispatch<React.SetStateAction<number>>;\n}) => {\n  const { t } = useTranslation();\n\n  const isMobile = useIsMobile();\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      expand\n    >\n      <Row\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        height=\"45px\"\n        width=\"100%\"\n        flexShrink={0}\n        pl={4}\n        pr={1}\n      >\n        <Text fontWeight=\"bold\" width={isMobile ? \"100%\" : \"30%\"}>\n          {t(\"Recent Liquidations\")}\n        </Text>\n\n        {isMobile ? null : (\n          <>\n            <Text fontWeight=\"bold\" textAlign=\"center\" width=\"23%\">\n              {t(\"Collateral Seized\")}\n            </Text>\n\n            <Text fontWeight=\"bold\" textAlign=\"center\" width=\"23%\">\n              {t(\"Borrow Repaid\")}\n            </Text>\n\n            <Text fontWeight=\"bold\" textAlign=\"center\" width=\"25%\">\n              {t(\"Timestamp\")}\n            </Text>\n          </>\n        )}\n      </Row>\n\n      <ModalDivider />\n\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        width=\"100%\"\n      >\n        {liquidations ? (\n          <>\n            {liquidations.map((liquidation, index) => {\n              return (\n                <LiquidationRow\n                  key={liquidation.transactionHash}\n                  liquidation={liquidation}\n                  noBottomDivider={index === liquidations.length - 1}\n                />\n              );\n            })}\n\n            <RowsControl\n              totalAmount={totalLiquidations}\n              setAmountToShow={setLiquidationsToShow}\n            />\n          </>\n        ) : (\n          <Spinner my={8} />\n        )}\n      </Column>\n    </Column>\n  );\n};\n\nconst LiquidationRow = ({\n  noBottomDivider,\n  liquidation,\n}: {\n  noBottomDivider?: boolean;\n  liquidation: LiquidationEvent;\n}) => {\n  const isMobile = useIsMobile();\n\n  const { t } = useTranslation();\n\n  const date = new Date(liquidation.timestamp * 1000);\n  return (\n    <>\n      <Link\n        isExternal\n        width=\"100%\"\n        className=\"no-underline\"\n        href={\"https://etherscan.io/tx/\" + liquidation.transactionHash}\n      >\n        <Row\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n          height=\"100px\"\n          className=\"hover-row\"\n          pl={4}\n          pr={1}\n        >\n          <Column\n            width={isMobile ? \"100%\" : \"30%\"}\n            height=\"100%\"\n            mainAxisAlignment=\"center\"\n            crossAxisAlignment=\"flex-start\"\n          >\n            <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n              <Box boxSize=\"23px\">\n                <Jazzicon\n                  diameter={23}\n                  seed={jsNumberForAddress(liquidation.liquidator)}\n                />\n              </Box>\n\n              <Text ml={2} mr={2} fontWeight=\"bold\">\n                <Text as=\"span\" color=\"#EE1E45\">\n                  {\" → \"}\n                </Text>\n                {t(\"Liquidated\")}\n                <Text as=\"span\" color=\"#73BF69\">\n                  {\" → \"}\n                </Text>\n              </Text>\n\n              <Box boxSize=\"23px\">\n                <Jazzicon\n                  diameter={23}\n                  seed={jsNumberForAddress(liquidation.borrower)}\n                />\n              </Box>\n\n              <Text ml={3} mr={2} fontWeight=\"bold\">\n                (Pool #{liquidation.poolID})\n              </Text>\n            </Row>\n\n            <Text mt={2} fontSize=\"11px\" color=\"#EE1E45\">\n              {liquidation.liquidator}\n            </Text>\n            <Text mt={1} fontSize=\"11px\" color=\"#73BF69\">\n              {liquidation.borrower}\n            </Text>\n          </Column>\n\n          {isMobile ? null : (\n            <>\n              <Column\n                mainAxisAlignment=\"center\"\n                crossAxisAlignment=\"center\"\n                height=\"100%\"\n                width=\"23%\"\n              >\n                <CTokenIcon\n                  size=\"md\"\n                  mb={2}\n                  address={liquidation.suppliedTokenAddress}\n                />\n              </Column>\n\n              <Column\n                mainAxisAlignment=\"center\"\n                crossAxisAlignment=\"center\"\n                height=\"100%\"\n                width=\"23%\"\n                fontWeight=\"bold\"\n              >\n                <CTokenIcon\n                  size=\"sm\"\n                  mb={2}\n                  address={liquidation.borrowedTokenAddress}\n                />\n                {smallUsdFormatter(\n                  liquidation.repayAmount /\n                    10 ** liquidation.borrowedTokenUnderlyingDecimals\n                ).replace(\"$\", \"\")}{\" \"}\n                {liquidation.borrowedTokenUnderlyingSymbol}\n              </Column>\n\n              <Column\n                mainAxisAlignment=\"center\"\n                crossAxisAlignment=\"center\"\n                height=\"100%\"\n                width=\"25%\"\n              >\n                <Text fontWeight=\"bold\">{date.toLocaleTimeString()}</Text>\n\n                <Text mt={1}>{date.toLocaleDateString()}</Text>\n              </Column>\n            </>\n          )}\n        </Row>\n      </Link>\n\n      {noBottomDivider ? null : <ModalDivider />}\n    </>\n  );\n};\n\nconst RowsControl = ({\n  setAmountToShow,\n  totalAmount,\n}: {\n  totalAmount: number;\n  setAmountToShow: React.Dispatch<React.SetStateAction<number>>;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <Row\n      mainAxisAlignment=\"center\"\n      crossAxisAlignment=\"center\"\n      width=\"100%\"\n      my={4}\n      px={4}\n    >\n      <DashboardBox\n        fontWeight=\"bold\"\n        as=\"button\"\n        px={2}\n        py={1}\n        onClick={() =>\n          setAmountToShow((past) =>\n            Math.min(\n              past === 0 ? 1 : past === -1 ? totalAmount : past + 5,\n              totalAmount\n            )\n          )\n        }\n      >\n        {t(\"View More\")}\n      </DashboardBox>\n\n      <DashboardBox\n        fontWeight=\"bold\"\n        as=\"button\"\n        ml={4}\n        px={2}\n        py={1}\n        onClick={() => setAmountToShow((past) => Math.max(past - 5, 0))}\n      >\n        {t(\"View Less\")}\n      </DashboardBox>\n\n      <DashboardBox\n        as=\"button\"\n        ml={4}\n        px={2}\n        py={1}\n        onClick={() => setAmountToShow(totalAmount)}\n      >\n        {t(\"View All\")}\n      </DashboardBox>\n\n      <DashboardBox\n        as=\"button\"\n        ml={4}\n        px={2}\n        py={1}\n        onClick={() => setAmountToShow(0)}\n      >\n        {t(\"Collapse All\")}\n      </DashboardBox>\n    </Row>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/FusePoolCreatePage.tsx",
    "content": "// Chakra  and UI\nimport {\n  Heading,\n  Text,\n  Switch,\n  Input,\n  Spinner,\n  IconButton,\n  useToast,\n  useDisclosure,\n  Box,\n  Button,\n  CloseButton,\n  Checkbox\n} from \"@chakra-ui/react\";\n\nimport { Column, Center, Row } from \"utils/chakraUtils\";\nimport DashboardBox from \"../../shared/DashboardBox\";\nimport { ModalDivider, MODAL_PROPS } from \"../../shared/Modal\";\nimport { SliderWithLabel } from \"../../shared/SliderWithLabel\";\nimport { AddIcon, QuestionIcon } from \"@chakra-ui/icons\";\nimport { SimpleTooltip } from \"../../shared/SimpleTooltip\";\nimport { Header } from \"components/shared/Header\";\nimport { Modal, ModalContent, ModalOverlay } from \"@chakra-ui/modal\";\n\n// React\nimport { memo, ReactNode, useState } from \"react\";\n\n// Rari\nimport { useRari } from \"../../../context/RariContext\";\n\n// Hooks\nimport { useIsSemiSmallScreen } from \"../../../hooks/useIsSemiSmallScreen\";\nimport { useAuthedCallback } from \"hooks/useAuthedCallback\";\nimport { useTranslation } from \"react-i18next\";\nimport { useNavigate } from \"react-router-dom\";\n\nimport BigNumber from \"bignumber.js\";\nimport LogRocket from \"logrocket\";\n\n// Utils\nimport { handleGenericError } from \"../../../utils/errorHandling\";\n\n// Components\nimport FuseStatsBar from \"./FuseStatsBar\";\nimport FuseTabBar from \"./FuseTabBar\";\n\nimport Fuse from \"fuse-sdk\";\nimport TransactionStepper from \"components/shared/TransactionStepper\";\n\nconst formatPercentage = (value: number) => value.toFixed(0) + \"%\";\n\nconst FusePoolCreatePage = memo(() => {\n  const isMobile = useIsSemiSmallScreen();\n  const { isAuthed } = useRari();\n\n  return (\n    <>\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        color=\"#FFFFFF\"\n        mx=\"auto\"\n        width={isMobile ? \"100%\" : \"1150px\"}\n        px={isMobile ? 4 : 0}\n      >\n        <Header isAuthed={isAuthed} isFuse />\n\n        <FuseStatsBar />\n\n        <FuseTabBar />\n\n        <PoolConfiguration /> \n      </Column>\n    </>\n  );\n});\n\nexport default FusePoolCreatePage;\n\nconst PoolConfiguration = () => {\n  const { t } = useTranslation();\n  const toast = useToast();\n  const { fuse, address } = useRari();\n  const navigate = useNavigate();\n\n  const { isOpen, onOpen, onClose } = useDisclosure();\n\n  const [name, setName] = useState(\"\");\n  const [isWhitelisted, setIsWhitelisted] = useState(false);\n  const [whitelist, setWhitelist] = useState<string[]>([]);\n\n  const [closeFactor, setCloseFactor] = useState(50);\n  const [liquidationIncentive, setLiquidationIncentive] = useState(8);\n\n  const [isUsingMPO, setIsUsingMPO] = useState(true)\n  const [customOracleAddress, setCustomOracleAddress] = useState('')\n\n  const [isCreating, setIsCreating] = useState(false);\n\n  const [activeStep, setActiveStep] = useState<number>(0);\n\n  const increaseActiveStep = (step: string) => {\n    setActiveStep(steps.indexOf(step));\n  };\n\n  const [needsRetry, setNeedsRetry] = useState<boolean>(false);\n  const [retryFlag, setRetryFlag] = useState<number>(1);\n\n  const [deployedPriceOracle, setDeployedPriceOracle] = useState<string>(\"\");\n\n  const postDeploymentHandle = (priceOracle: string) => {\n    setDeployedPriceOracle(priceOracle);\n  };\n\n  const deployPool = async (\n    bigCloseFactor: string,\n    bigLiquidationIncentive: string,\n    options: any,\n    priceOracle: string\n  ) => {\n    const [poolAddress] = await fuse.deployPool(\n      name,\n      isWhitelisted,\n      bigCloseFactor,\n      \n      bigLiquidationIncentive,\n      priceOracle,\n      {},\n      options,\n      isWhitelisted ? whitelist : null\n    );\n\n    return poolAddress;\n  };\n\n  const onDeploy = async () => {\n    let priceOracle = deployedPriceOracle;\n\n    if (name === \"\") {\n      toast({\n        title: \"Error!\",\n        description: \"You must specify a name for your Fuse pool!\",\n        status: \"error\",\n        duration: 2000,\n        isClosable: true,\n        position: \"top-right\",\n      });\n\n      return;\n    }\n\n    if (isWhitelisted && whitelist.length < 2 ) {\n      toast({\n        title: \"Error!\",\n        description: \"You must add an address to your whitelist!\",\n        status:\"error\",\n        duration: 2000,\n        isClosable: true,\n        position: \"top-right\",\n      })\n\n      return\n    }\n\n    if (!isUsingMPO && !fuse.web3.utils.isAddress(customOracleAddress)) {\n      \n      toast({\n        title: \"Error!\",\n        description: \"You must add an address for your oracle or use the default oracle.\",\n        status:\"error\",\n        duration: 2000,\n        isClosable: true,\n        position: \"top-right\",\n      })\n\n      return\n  }\n\n\n    setIsCreating(true);\n    onOpen();\n\n    // 50% -> 0.5 * 1e18\n    const bigCloseFactor = new BigNumber(closeFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    // 8% -> 1.08 * 1e8\n    const bigLiquidationIncentive = new BigNumber(liquidationIncentive)\n      .dividedBy(100)\n      .plus(1)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    let _retryFlag = retryFlag;\n\n    try {\n      const options = { from: address };\n\n      setNeedsRetry(false);\n\n      if (!isUsingMPO && _retryFlag === 1) {\n        _retryFlag = 2;\n        priceOracle = customOracleAddress\n      }\n\n      if (_retryFlag === 1) {\n        priceOracle = await fuse.deployPriceOracle(\n          \"MasterPriceOracle\",\n          {\n            underlyings: [],\n            oracles: [],\n            canAdminOverwrite: true,\n            defaultOracle:\n              Fuse.PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES.MasterPriceOracle, // We give the MasterPriceOracle a default \"fallback\" oracle of the Rari MasterPriceOracle\n          },\n          options\n        );\n        postDeploymentHandle(priceOracle);\n        increaseActiveStep(\"Deploying Pool!\");\n        _retryFlag = 2;\n      }\n\n      let poolAddress: string;\n\n      if (_retryFlag === 2) {\n        poolAddress = await deployPool(\n          bigCloseFactor,\n          bigLiquidationIncentive,\n          options,\n          priceOracle\n        );\n\n        const event = (\n          await fuse.contracts.FusePoolDirectory.getPastEvents(\n            \"PoolRegistered\",\n            {\n              fromBlock: (await fuse.web3.eth.getBlockNumber()) - 10,\n              toBlock: \"latest\",\n            }\n          )\n        ).filter(\n          (event) =>\n            event.returnValues.pool.comptroller.toLowerCase() ===\n            poolAddress.toLowerCase()\n        )[0];\n\n        LogRocket.track(\"Fuse-CreatePool\");\n\n        toast({\n          title: \"Your pool has been deployed!\",\n          description: \"You may now add assets to it.\",\n          status: \"success\",\n          duration: 2000,\n          isClosable: true,\n          position: \"top-right\",\n        });\n\n        let id = event.returnValues.index;\n        onClose();\n        navigate(`/fuse/pool/${id}/edit`);\n      }\n    } catch (e) {\n      handleGenericError(e, toast);\n      setRetryFlag(_retryFlag);\n      setNeedsRetry(true);\n    }\n  };\n\n  return (\n    <>\n      <TransactionStepperModal\n        handleRetry={onDeploy}\n        needsRetry={needsRetry}\n        activeStep={activeStep}\n        isOpen={isOpen}\n        onClose={onClose}\n      />\n      <DashboardBox width=\"100%\" mt={4}>\n        <Column mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"flex-start\">\n          <Heading size=\"sm\" px={4} py={4}>\n            {t(\"Create Pool\")}\n          </Heading>\n\n          <ModalDivider />\n\n          <OptionRow>\n            <Text fontWeight=\"bold\" mr={4}>\n              {t(\"Name\")}\n            </Text>\n            <Input\n              width=\"20%\"\n              value={name}\n              onChange={(event) => setName(event.target.value)}\n            />\n          </OptionRow>\n\n          <ModalDivider />\n\n          <ModalDivider />\n\n          <OptionRow>\n            <SimpleTooltip\n              label={t(\n                \"If enabled you will be able to limit the ability to supply to the pool to a select group of addresses. The pool will not show up on the 'all pools' list.\"\n              )}\n            >\n              <Text fontWeight=\"bold\">\n                {t(\"Whitelisted\")} <QuestionIcon ml={1} mb=\"4px\" />\n              </Text>\n            </SimpleTooltip>\n\n            <Switch\n              h=\"20px\"\n              isChecked={isWhitelisted}\n              onChange={() => {\n                setIsWhitelisted((past) => !past);\n                // Add the user to the whitelist by default\n                if (whitelist.length === 0) {\n                  setWhitelist([address]);\n                }\n              }}\n              className=\"black-switch\"\n              colorScheme=\"#121212\"\n            />\n          </OptionRow>\n\n          {isWhitelisted ? (\n            <WhitelistInfo\n              whitelist={whitelist}\n              addToWhitelist={(user) => {\n                setWhitelist((past) => [...past, user]);\n              }}\n              removeFromWhitelist={(user) => {\n                setWhitelist((past) =>\n                  past.filter(function (item) {\n                    return item !== user;\n                  })\n                );\n              }}\n            />\n          ) : null}\n\n          <ModalDivider />\n\n          <OptionRow>\n            <SimpleTooltip\n              label={t(\n                \"The percent, ranging from 0% to 100%, of a liquidatable account's borrow that can be repaid in a single liquidate transaction. If a user has multiple borrowed assets, the closeFactor applies to any single borrowed asset, not the aggregated value of a user’s outstanding borrowing. Compound's close factor is 50%.\"\n              )}\n            >\n              <Text fontWeight=\"bold\">\n                {t(\"Close Factor\")} <QuestionIcon ml={1} mb=\"4px\" />\n              </Text>\n            </SimpleTooltip>\n\n            <SliderWithLabel\n              value={closeFactor}\n              setValue={setCloseFactor}\n              formatValue={formatPercentage}\n              min={5}\n              max={90}\n            />\n          </OptionRow>\n\n          <ModalDivider />\n\n          <OptionRow>\n            <SimpleTooltip\n              label={t(\n                \"The additional collateral given to liquidators as an incentive to perform liquidation of underwater accounts. For example, if the liquidation incentive is 10%, liquidators receive an extra 10% of the borrowers collateral for every unit they close. Compound's liquidation incentive is 8%.\"\n              )}\n            >\n              <Text fontWeight=\"bold\">\n                {t(\"Liquidation Incentive\")} <QuestionIcon ml={1} mb=\"4px\" />\n              </Text>\n            </SimpleTooltip>\n\n            <SliderWithLabel\n              value={liquidationIncentive}\n              setValue={setLiquidationIncentive}\n              formatValue={formatPercentage}\n              min={0}\n              max={50}\n            />\n          </OptionRow>\n\n          <ModalDivider />\n\n          <OptionRow>\n            <SimpleTooltip\n              label={t(\n                \"We will deploy a price oracle for your pool. This price oracle will contain price feeds for popular ERC20 tokens.\"\n              )}\n            >\n              <Text fontWeight=\"bold\">\n                {isUsingMPO ? t(\"Default Price Oracle\") : t(\"Custom Price Oracle\")} <QuestionIcon ml={1} mb=\"4px\" />\n              </Text>\n            </SimpleTooltip>\n\n            <Box display=\"flex\" alignItems='flex-end' flexDirection=\"column\"> \n              <Checkbox\n                isChecked={isUsingMPO}\n                onChange={(e) => setIsUsingMPO(!isUsingMPO)}\n                marginBottom={3}\n              />\n              {\n                !isUsingMPO ? (\n                  <>\n                  <Input \n                    value={customOracleAddress}\n                    onChange={(e) => setCustomOracleAddress(e.target.value)}\n                  />\n                  <Text mt={3} opacity=\"0.6\" fontSize=\"sm\">\n                    Please make sure you know what you're doing.\n                  </Text>\n                  </>\n                ) \n                : null\n              }\n              \n            </Box>\n          </OptionRow>\n        </Column>\n      </DashboardBox>\n\n      <DashboardBox\n        width=\"100%\"\n        height=\"60px\"\n        mt={4}\n        py={3}\n        fontSize=\"xl\"\n        as=\"button\"\n        onClick={useAuthedCallback(onDeploy)}\n      >\n        <Center expand fontWeight=\"bold\">\n          {isCreating ? <Spinner /> : t(\"Create\")}\n        </Center>\n      </DashboardBox>\n    </>\n  );\n};\n\nconst steps = [\"Deploying Oracle\", \"Deploying Pool!\"];\n\nconst TransactionStepperModal = ({\n  isOpen,\n  onClose,\n  activeStep,\n  needsRetry,\n  handleRetry,\n}: {\n  isOpen: boolean;\n  onClose: () => void;\n  activeStep: number;\n  needsRetry: boolean;\n  handleRetry: () => void;\n}) => {\n  return (\n    <Modal isOpen={isOpen} onClose={onClose} closeOnOverlayClick={false}>\n      <ModalOverlay>\n        <ModalContent\n          {...MODAL_PROPS}\n          display=\"flex\"\n          alignSelf=\"center\"\n          alignItems=\"center\"\n          justifyContent=\"center\"\n          height=\"25%\"\n          width=\"25%\"\n        >\n          <Row\n            mb={6}\n            mainAxisAlignment=\"center\"\n            crossAxisAlignment=\"center\"\n            w=\"100%\"\n            px={4}\n          >\n            <Box mx=\"auto\">\n              <Text textAlign=\"center\" fontSize=\"20px\">\n                {steps[activeStep]}\n              </Text>\n              {steps[activeStep] === \"Deploying Pool!\" ? (\n                <Text fontSize=\"13px\" opacity=\"0.8\">\n                  Will take two transactions, please wait.\n                </Text>\n              ) : null}\n            </Box>\n           \n          </Row>\n          <TransactionStepper\n            steps={steps}\n            activeStep={activeStep}\n            tokenData={{ color: \"#21C35E\" }}\n          />\n          {needsRetry ? (\n            <Button onClick={() => handleRetry()} mx={3} bg=\"#21C35E\">\n              {\" \"}\n              Retry{\" \"}\n            </Button>\n          ) : null}\n        </ModalContent>\n      </ModalOverlay>\n    </Modal>\n  );\n};\n\nconst OptionRow = ({\n  children,\n  ...others\n}: {\n  children: ReactNode;\n  [key: string]: any;\n}) => {\n  return (\n    <Row\n      mainAxisAlignment=\"space-between\"\n      crossAxisAlignment=\"center\"\n      width=\"100%\"\n      my={4}\n      px={4}\n      overflowX=\"auto\"\n      {...others}\n    >\n      {children}\n    </Row>\n  );\n};\n\nexport const WhitelistInfo = ({\n  whitelist,\n  addToWhitelist,\n  removeFromWhitelist,\n}: {\n  whitelist: string[];\n  addToWhitelist: (user: string) => any;\n  removeFromWhitelist: (user: string) => any;\n}) => {\n  const [_whitelistInput, _setWhitelistInput] = useState(\"\");\n  const { t } = useTranslation();\n  const { fuse } = useRari();\n  const toast = useToast();\n\n  return (\n    <>\n      <OptionRow my={0} mb={4}>\n        <Input\n          width=\"100%\"\n          value={_whitelistInput}\n          onChange={(event) => _setWhitelistInput(event.target.value)}\n          placeholder=\"0x0000000000000000000000000000000000000000\"\n          _placeholder={{ color: \"#FFF\" }}\n        />\n        <IconButton\n          flexShrink={0}\n          aria-label=\"add\"\n          icon={<AddIcon />}\n          width=\"35px\"\n          ml={2}\n          bg=\"#282727\"\n          color=\"#FFF\"\n          borderWidth=\"1px\"\n          backgroundColor=\"transparent\"\n          onClick={() => {\n            if (\n              fuse.web3.utils.isAddress(_whitelistInput) &&\n              !whitelist.includes(_whitelistInput)\n            ) {\n              addToWhitelist(_whitelistInput);\n              _setWhitelistInput(\"\");\n            } else {\n              toast({\n                title: \"Error!\",\n                description:\n                  \"This is not a valid ethereum address (or you have already entered this address)\",\n                status: \"error\",\n                duration: 2000,\n                isClosable: true,\n                position: \"top-right\",\n              });\n            }\n          }}\n          _hover={{}}\n          _active={{}}\n        />\n      </OptionRow>\n      {whitelist.length > 0 ? (\n        <Text mb={4} ml={4} width=\"100%\">\n          <b>{t(\"Already added:\")} </b>\n          {whitelist.map((user, index, array) => (\n            <Text\n              key={user}\n              className=\"underline-on-hover\"\n              as=\"button\"\n              onClick={() => removeFromWhitelist(user)}\n            >\n              {user}\n              {array.length - 1 === index ? null : <>,&nbsp;</>}\n            </Text>\n          ))}\n        </Text>\n      ) : null}\n    </>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/FusePoolEditPage.tsx",
    "content": "// Chakra and UI\nimport {\n  Box,\n  Badge,\n  Heading,\n  Text,\n  useDisclosure,\n  Spinner,\n\n  // Table\n  Image,\n  HStack,\n  Th,\n  Thead,\n  Table,\n  Tbody,\n  Tr,\n  Td,\n} from \"@chakra-ui/react\";\nimport { Column, RowOrColumn, Center, Row } from \"utils/chakraUtils\";\nimport DashboardBox from \"../../shared/DashboardBox\";\n\n// Components\nimport { Header } from \"../../shared/Header\";\nimport FuseStatsBar from \"./FuseStatsBar\";\nimport FuseTabBar from \"./FuseTabBar\";\nimport AddAssetModal from \"./Modals/AddAssetModal/AddAssetModal\";\n\n// React\nimport { memo, ReactNode, useCallback, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useParams } from \"react-router-dom\";\nimport { useQuery } from \"react-query\";\n\n// Rari\nimport { useRari } from \"../../../context/RariContext\";\n\n// Hooks\nimport { useIsSemiSmallScreen } from \"../../../hooks/useIsSemiSmallScreen\";\nimport { useFusePoolData } from \"../../../hooks/useFusePoolData\";\nimport { useTokenData } from \"../../../hooks/useTokenData\";\n\n// Utils\nimport { CTokenAvatarGroup } from \"components/shared/CTokenIcon\";\nimport { createComptroller } from \"../../../utils/createComptroller\";\n\n// Libraries\nimport LogRocket from \"logrocket\";\nimport { useIsComptrollerAdmin } from \"./FusePoolPage\";\nimport { AdminAlert } from \"components/shared/AdminAlert\";\n\nimport { useAuthedCallback } from \"hooks/useAuthedCallback\";\nimport {\n  useCTokensUnderlying,\n  usePoolIncentives,\n} from \"hooks/rewards/usePoolIncentives\";\nimport { useRewardsDistributorsForPool } from \"hooks/rewards/useRewardsDistributorsForPool\";\nimport { RewardsDistributor } from \"hooks/rewards/useRewardsDistributorsForPool\";\nimport { useTokenBalance } from \"hooks/useTokenBalance\";\nimport AddRewardsDistributorModal from \"./Modals/AddRewardsDistributorModal\";\nimport EditRewardsDistributorModal from \"./Modals/EditRewardsDistributorModal\";\nimport AssetConfiguration, {\n  AddAssetButton,\n} from \"./Modals/Edit/AssetConfiguration\";\nimport PoolConfiguration from \"./Modals/Edit/PoolConfiguration\";\nimport { ModalDivider } from \"components/shared/Modal\";\n\nexport enum ComptrollerErrorCodes {\n  NO_ERROR,\n  UNAUTHORIZED,\n  COMPTROLLER_MISMATCH,\n  INSUFFICIENT_SHORTFALL,\n  INSUFFICIENT_LIQUIDITY,\n  INVALID_CLOSE_FACTOR,\n  INVALID_COLLATERAL_FACTOR,\n  INVALID_LIQUIDATION_INCENTIVE,\n  MARKET_NOT_ENTERED, // no longer possible\n  MARKET_NOT_LISTED,\n  MARKET_ALREADY_LISTED,\n  MATH_ERROR,\n  NONZERO_BORROW_BALANCE,\n  PRICE_ERROR,\n  REJECTION,\n  SNAPSHOT_ERROR,\n  TOO_MANY_ASSETS,\n  TOO_MUCH_REPAY,\n  SUPPLIER_NOT_WHITELISTED,\n  BORROW_BELOW_MIN,\n  SUPPLY_ABOVE_MAX,\n  NONZERO_TOTAL_SUPPLY,\n}\n\nexport const useIsUpgradeable = (comptrollerAddress: string) => {\n  const { fuse } = useRari();\n\n  const { data } = useQuery(comptrollerAddress + \" isUpgradeable\", async () => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    const isUpgradeable: boolean = await comptroller.methods\n      .adminHasRights()\n      .call();\n\n    return isUpgradeable;\n  });\n\n  return data;\n};\n\nexport async function testForComptrollerErrorAndSend(\n  txObject: any,\n  caller: string,\n  failMessage: string\n) {\n  let response = await txObject.call({ from: caller });\n\n  // For some reason `response` will be `[\"0\"]` if no error but otherwise it will return a string number.\n  if (response[0] !== \"0\") {\n    const err = new Error(\n      failMessage + \" Code: \" + (ComptrollerErrorCodes[response] ?? response)\n    );\n\n    LogRocket.captureException(err);\n    throw err;\n  }\n\n  return txObject.send({ from: caller });\n}\n\nconst FusePoolEditPage = memo(() => {\n  const { isAuthed } = useRari();\n\n  const isMobile = useIsSemiSmallScreen();\n\n  const {\n    isOpen: isAddAssetModalOpen,\n    onOpen: openAddAssetModal,\n    onClose: closeAddAssetModal,\n  } = useDisclosure();\n\n  const {\n    isOpen: isAddRewardsDistributorModalOpen,\n    onOpen: openAddRewardsDistributorModal,\n    onClose: closeAddRewardsDistributorModal,\n  } = useDisclosure();\n\n  const {\n    isOpen: isEditRewardsDistributorModalOpen,\n    onOpen: openEditRewardsDistributorModal,\n    onClose: closeEditRewardsDistributorModal,\n  } = useDisclosure();\n\n  const authedOpenModal = useAuthedCallback(openAddAssetModal);\n\n  const { t } = useTranslation();\n\n  const { poolId } = useParams();\n\n  const data = useFusePoolData(poolId);\n  const isAdmin = useIsComptrollerAdmin(data?.comptroller);\n\n  // RewardsDistributor stuff\n  const poolIncentives = usePoolIncentives(data?.comptroller);\n  const rewardsDistributors = useRewardsDistributorsForPool(data?.comptroller);\n  const [rewardsDistributor, setRewardsDistributor] = useState<\n    RewardsDistributor | undefined\n  >();\n\n  console.log({ rewardsDistributors, poolIncentives });\n\n  const handleRewardsRowClick = useCallback(\n    (rD: RewardsDistributor) => {\n      setRewardsDistributor(rD);\n      openEditRewardsDistributorModal();\n    },\n    [setRewardsDistributor, openEditRewardsDistributorModal]\n  );\n\n  return (\n    <>\n      {data ? (\n        <AddAssetModal\n          comptrollerAddress={data.comptroller}\n          poolOracleAddress={data.oracle}\n          oracleModel={data.oracleModel}\n          existingAssets={data.assets}\n          poolName={data.name}\n          poolID={poolId!}\n          isOpen={isAddAssetModalOpen}\n          onClose={closeAddAssetModal}\n        />\n      ) : null}\n\n      {data ? (\n        <AddRewardsDistributorModal\n          comptrollerAddress={data.comptroller}\n          poolName={data.name}\n          poolID={poolId!}\n          isOpen={isAddRewardsDistributorModalOpen}\n          onClose={closeAddRewardsDistributorModal}\n        />\n      ) : null}\n\n      {data && !!rewardsDistributor ? (\n        <EditRewardsDistributorModal\n          rewardsDistributor={rewardsDistributor}\n          pool={data}\n          isOpen={isEditRewardsDistributorModalOpen}\n          onClose={closeEditRewardsDistributorModal}\n        />\n      ) : null}\n\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        color=\"#FFFFFF\"\n        mx=\"auto\"\n        width={isMobile ? \"100%\" : \"1150px\"}\n        px={isMobile ? 4 : 0}\n      >\n        <Header isAuthed={isAuthed} isFuse />\n\n        <FuseStatsBar data={data} />\n\n        <FuseTabBar />\n\n        {!!data && (\n          <AdminAlert\n            isAdmin={isAdmin}\n            isAdminText=\"You are the admin of this Fuse Pool!\"\n            isNotAdminText=\"You are not the admin of this Fuse Pool!\"\n          />\n        )}\n\n        <RowOrColumn\n          width=\"100%\"\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n          isRow={!isMobile}\n        >\n          <DashboardBox\n            width={isMobile ? \"100%\" : \"50%\"}\n            height={isMobile ? \"auto\" : \"560px\"}\n            mt={4}\n          >\n            {data ? (\n              <PoolConfiguration\n                assets={data.assets}\n                comptrollerAddress={data.comptroller}\n                oracleAddress={data.oracle}\n              />\n            ) : (\n              <Center expand>\n                <Spinner my={8} />\n              </Center>\n            )}\n          </DashboardBox>\n\n          <Box pl={isMobile ? 0 : 4} width={isMobile ? \"100%\" : \"50%\"}>\n            <DashboardBox\n              width=\"100%\"\n              mt={4}\n              height={isMobile ? \"auto\" : \"560px\"}\n            >\n              {data ? (\n                data.assets.length > 0 ? (\n                  <AssetConfiguration\n                    openAddAssetModal={authedOpenModal}\n                    assets={data.assets}\n                    poolOracleAddress={data.oracle}\n                    oracleModel={data.oracleModel}\n                    comptrollerAddress={data.comptroller}\n                    poolID={poolId!}\n                    poolName={data.name}\n                  />\n                ) : (\n                  <Column\n                    expand\n                    mainAxisAlignment=\"center\"\n                    crossAxisAlignment=\"center\"\n                    py={4}\n                  >\n                    <Text mb={4}>{t(\"There are no assets in this pool.\")}</Text>\n\n                    <AddAssetButton\n                      comptrollerAddress={data.comptroller}\n                      openAddAssetModal={authedOpenModal}\n                    />\n                  </Column>\n                )\n              ) : (\n                <Center expand>\n                  <Spinner my={8} />\n                </Center>\n              )}\n            </DashboardBox>\n          </Box>\n        </RowOrColumn>\n\n        {/* Rewards Distributors */}\n        <DashboardBox w=\"100%\" h=\"100%\" my={4}>\n          <Row\n            mainAxisAlignment=\"space-between\"\n            crossAxisAlignment=\"center\"\n            p={3}\n          >\n            <Heading size=\"md\">Rewards Distributors </Heading>\n            <AddRewardsDistributorButton\n              openAddRewardsDistributorModal={openAddRewardsDistributorModal}\n              comptrollerAddress={data?.comptroller}\n            />\n          </Row>\n\n          {!!data && !rewardsDistributors.length && (\n            <Column\n              w=\"100%\"\n              h=\"100%\"\n              mainAxisAlignment=\"center\"\n              crossAxisAlignment=\"center\"\n              p={4}\n            >\n              <Text mb={4}>\n                {t(\"There are no RewardsDistributors for this pool.\")}\n              </Text>\n              <AddRewardsDistributorButton\n                openAddRewardsDistributorModal={openAddRewardsDistributorModal}\n                comptrollerAddress={data?.comptroller}\n              />\n            </Column>\n          )}\n\n          {!data && (\n            <Column\n              w=\"100%\"\n              h=\"100%\"\n              mainAxisAlignment=\"center\"\n              crossAxisAlignment=\"center\"\n              p={4}\n            >\n              <Spinner />\n            </Column>\n          )}\n\n          {!!data && !!rewardsDistributors.length && (\n            <Table>\n              <Thead>\n                <Tr>\n                  <Th color=\"white\" size=\"sm\">\n                    {t(\"Reward Token:\")}\n                  </Th>\n                  <Th color=\"white\">{t(\"Active CTokens:\")}</Th>\n                  <Th color=\"white\">{t(\"Balance:\")}</Th>\n                  <Th color=\"white\">{t(\"Admin?\")}</Th>\n                </Tr>\n              </Thead>\n\n              <Tbody minHeight=\"50px\">\n                {!data && !rewardsDistributors.length ? (\n                  <Spinner />\n                ) : (\n                  rewardsDistributors.map((rD, i) => {\n                    return (\n                      <RewardsDistributorRow\n                        key={rD.address}\n                        rewardsDistributor={rD}\n                        handleRowClick={handleRewardsRowClick}\n                        hideModalDivider={i === rewardsDistributors.length - 1}\n                        activeCTokens={\n                          poolIncentives.rewardsDistributorCtokens[rD.address]\n                        }\n                      />\n                    );\n                  })\n                )}\n              </Tbody>\n            </Table>\n          )}\n\n          <ModalDivider />\n        </DashboardBox>\n      </Column>\n    </>\n  );\n});\n\nexport default FusePoolEditPage;\n\nexport const SaveButton = ({\n  onClick,\n  altText,\n  ...others\n}: {\n  onClick: () => any;\n  altText?: string;\n  [key: string]: any;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <DashboardBox\n      flexShrink={0}\n      ml={2}\n      px={2}\n      height=\"35px\"\n      as=\"button\"\n      fontWeight=\"bold\"\n      onClick={onClick}\n      {...others}\n    >\n      <Center expand>{altText ?? t(\"Save\")}</Center>\n    </DashboardBox>\n  );\n};\n\nexport const ConfigRow = ({\n  children,\n  ...others\n}: {\n  children: ReactNode;\n  [key: string]: any;\n}) => {\n  return (\n    <Row\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"center\"\n      width=\"100%\"\n      my={4}\n      px={4}\n      overflowX=\"auto\"\n      flexShrink={0}\n      {...others}\n    >\n      {children}\n    </Row>\n  );\n};\n\nconst AddRewardsDistributorButton = ({\n  openAddRewardsDistributorModal,\n  comptrollerAddress,\n}: {\n  openAddRewardsDistributorModal: () => any;\n  comptrollerAddress: string;\n}) => {\n  const { t } = useTranslation();\n\n  const isUpgradeable = useIsUpgradeable(comptrollerAddress);\n\n  return isUpgradeable ? (\n    <DashboardBox\n      onClick={openAddRewardsDistributorModal}\n      as=\"button\"\n      py={1}\n      px={2}\n      fontWeight=\"bold\"\n    >\n      {t(\"Add Rewards Distributor\")}\n    </DashboardBox>\n  ) : null;\n};\n\nconst RewardsDistributorRow = ({\n  rewardsDistributor,\n  handleRowClick,\n  hideModalDivider,\n  activeCTokens,\n}: {\n  rewardsDistributor: RewardsDistributor;\n  handleRowClick: (rD: RewardsDistributor) => void;\n  hideModalDivider: boolean;\n  activeCTokens: string[];\n}) => {\n  const { address, fuse } = useRari();\n  const isAdmin = address === rewardsDistributor.admin;\n\n  const tokenData = useTokenData(rewardsDistributor.rewardToken);\n  //   Balances\n  const { data: rDBalance } = useTokenBalance(\n    rewardsDistributor.rewardToken,\n    rewardsDistributor.address\n  );\n\n  const underlyingsMap = useCTokensUnderlying(activeCTokens);\n  const underlyings = Object.values(underlyingsMap);\n\n  return (\n    <>\n      <Tr\n        _hover={{ background: \"grey\", cursor: \"pointer\" }}\n        h=\"30px\"\n        p={5}\n        flexDir=\"row\"\n        onClick={() => handleRowClick(rewardsDistributor)}\n      >\n        <Td>\n          <HStack>\n            {tokenData?.logoURL ? (\n              <Image\n                src={tokenData.logoURL}\n                boxSize=\"30px\"\n                borderRadius=\"50%\"\n              />\n            ) : null}\n            <Heading fontSize=\"22px\" color={tokenData?.color ?? \"#FFF\"} ml={2}>\n              {tokenData\n                ? tokenData.symbol ?? \"Invalid Address!\"\n                : \"Loading...\"}\n            </Heading>\n          </HStack>\n        </Td>\n\n        <Td>\n          {!!underlyings.length ? (\n            <CTokenAvatarGroup tokenAddresses={underlyings} popOnHover={true} />\n          ) : (\n            <Badge colorScheme=\"red\">Inactive</Badge>\n          )}\n        </Td>\n\n        <Td>\n          {(\n            parseFloat(rDBalance?.toString() ?? \"0\") /\n            10 ** (tokenData?.decimals ?? 18)\n          ).toFixed(3)}{\" \"}\n          {tokenData?.symbol}\n        </Td>\n\n        <Td>\n          <Badge colorScheme={isAdmin ? \"green\" : \"red\"}>\n            {isAdmin ? \"Is Admin\" : \"Not Admin\"}\n          </Badge>\n        </Td>\n      </Tr>\n      {/* {!hideModalDivider && <ModalDivider />} */}\n    </>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/FusePoolInfoPage.tsx",
    "content": "import {\n  AvatarGroup,\n  Box,\n  Heading,\n  Link,\n  Select,\n  Spinner,\n  Text,\n  useClipboard,\n  VStack,\n} from \"@chakra-ui/react\";\nimport {\n  Column,\n  RowOnDesktopColumnOnMobile,\n  RowOrColumn,\n  Center,\n  Row,\n  useIsMobile,\n} from \"utils/chakraUtils\";\nimport { memo, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useParams } from \"react-router-dom\";\nimport { useRari } from \"../../../context/RariContext\";\nimport { useIsSemiSmallScreen } from \"../../../hooks/useIsSemiSmallScreen\";\nimport { shortUsdFormatter } from \"../../../utils/bigUtils\";\nimport { FuseUtilizationChartOptions } from \"../../../utils/chartOptions\";\n\nimport DashboardBox, { DASHBOARD_BOX_PROPS } from \"../../shared/DashboardBox\";\nimport { Header } from \"../../shared/Header\";\nimport { ModalDivider } from \"../../shared/Modal\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nimport Chart from \"react-apexcharts\";\n\nimport FuseStatsBar from \"./FuseStatsBar\";\nimport FuseTabBar from \"./FuseTabBar\";\nimport { useQuery } from \"react-query\";\nimport { useFusePoolData } from \"../../../hooks/useFusePoolData\";\n\nimport { ETH_TOKEN_DATA, useTokenData } from \"hooks/useTokenData\";\nimport { CTokenIcon } from \"components/shared/CTokenIcon\";\nimport { shortAddress } from \"../../../utils/shortAddress\";\nimport { USDPricedFuseAsset } from \"../../../utils/fetchFusePoolData\";\nimport {\n  createComptroller,\n  createOracle,\n} from \"../../../utils/createComptroller\";\nimport Fuse from \"../../../fuse-sdk\";\nimport CaptionedStat from \"../../shared/CaptionedStat\";\nimport Footer from \"components/shared/Footer\";\nimport { useIdentifyOracle } from \"hooks/fuse/useOracleData\";\nimport { truncate } from \"utils/stringUtils\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\n\nexport const useExtraPoolInfo = (\n  comptrollerAddress: string,\n  oracleAddress: string\n) => {\n  const { fuse, address } = useRari();\n\n  const { data } = useQuery(comptrollerAddress + \" extraPoolInfo\", async () => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    const poolOracle = createOracle(oracleAddress, fuse, \"MasterPriceOracle\");\n\n    let defaultOracle = undefined;\n    try {\n      defaultOracle = await poolOracle.methods.defaultOracle().call();\n    } catch (err) {\n      console.error(\"Error querying for defaultOracle\");\n    }\n\n    const [\n      { 0: admin, 1: upgradeable },\n      closeFactor,\n      liquidationIncentive,\n      enforceWhitelist,\n      whitelist,\n      adminHasRights,\n      pendingAdmin,\n    ] = await Promise.all([\n      fuse.contracts.FusePoolLensSecondary.methods\n        .getPoolOwnership(comptrollerAddress)\n        .call({ gas: 1e18 }),\n\n      comptroller.methods.closeFactorMantissa().call(),\n\n      comptroller.methods.liquidationIncentiveMantissa().call(),\n\n      (() => {\n        try {\n          return comptroller.methods.enforceWhitelist().call();\n        } catch (e) {\n          return false;\n        }\n      })(),\n\n      (() => {\n        try {\n          return comptroller.methods.getWhitelist().call();\n        } catch (_) {\n          return [];\n        }\n      })(),\n\n      comptroller.methods.adminHasRights().call(),\n      comptroller.methods.pendingAdmin().call(),\n    ]);\n\n    return {\n      admin,\n      upgradeable,\n      enforceWhitelist,\n      whitelist: whitelist as string[],\n      isPowerfulAdmin:\n        admin.toLowerCase() === address.toLowerCase() && upgradeable,\n      closeFactor,\n      liquidationIncentive,\n      adminHasRights,\n      pendingAdmin,\n      defaultOracle,\n    };\n  });\n\n  return data;\n};\n\nconst FusePoolInfoPage = memo(() => {\n  const { isAuthed } = useRari();\n\n  const isMobile = useIsSemiSmallScreen();\n  const { t } = useTranslation();\n  let { poolId } = useParams();\n  const data = useFusePoolData(poolId);\n\n  return (\n    <>\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        color=\"#FFFFFF\"\n        mx=\"auto\"\n        width={isMobile ? \"100%\" : \"1150px\"}\n        height=\"100%\"\n        px={isMobile ? 4 : 0}\n      >\n        <Header isAuthed={isAuthed} isFuse />\n\n        <FuseStatsBar data={data} />\n\n        <FuseTabBar />\n\n        <RowOrColumn\n          width=\"100%\"\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n          isRow={!isMobile}\n        >\n          <DashboardBox\n            width={isMobile ? \"100%\" : \"50%\"}\n            mt={4}\n            height={isMobile ? \"auto\" : \"450px\"}\n          >\n            {data ? (\n              <OracleAndInterestRates\n                assets={data.assets}\n                name={data.name}\n                totalSuppliedUSD={data.totalSuppliedUSD}\n                totalBorrowedUSD={data.totalBorrowedUSD}\n                totalLiquidityUSD={data.totalLiquidityUSD}\n                comptrollerAddress={data.comptroller}\n                oracleAddress={data.oracle}\n                oracleModel={data.oracleModel}\n              />\n            ) : (\n              <Center expand>\n                <Spinner my={8} />\n              </Center>\n            )}\n          </DashboardBox>\n\n          <DashboardBox\n            ml={isMobile ? 0 : 4}\n            width={isMobile ? \"100%\" : \"50%\"}\n            mt={4}\n            height={isMobile ? \"500px\" : \"450px\"}\n          >\n            {data ? (\n              data.assets.length > 0 ? (\n                <AssetAndOtherInfo\n                  assets={data.assets}\n                  poolOracle={data.oracle}\n                />\n              ) : (\n                <Center expand>{t(\"There are no assets in this pool.\")}</Center>\n              )\n            ) : (\n              <Center expand>\n                <Spinner my={8} />\n              </Center>\n            )}\n          </DashboardBox>\n        </RowOrColumn>\n        <Footer />\n      </Column>\n    </>\n  );\n});\n\nexport default FusePoolInfoPage;\n\nconst OracleAndInterestRates = ({\n  assets,\n  name,\n  totalSuppliedUSD,\n  totalBorrowedUSD,\n  totalLiquidityUSD,\n  comptrollerAddress,\n  oracleAddress,\n  oracleModel,\n}: {\n  assets: USDPricedFuseAsset[];\n  name: string;\n  totalSuppliedUSD: number;\n  totalBorrowedUSD: number;\n  totalLiquidityUSD: number;\n  comptrollerAddress: string;\n  oracleAddress: string;\n  oracleModel: string | undefined;\n}) => {\n  let { poolId } = useParams();\n\n  const { t } = useTranslation();\n\n  const data = useExtraPoolInfo(comptrollerAddress, oracleAddress);\n  const defaultOracleIdentity = useIdentifyOracle(data?.defaultOracle);\n\n  console.log(data?.defaultOracle, { defaultOracleIdentity });\n\n  const { hasCopied, onCopy } = useClipboard(data?.admin ?? \"\");\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      height=\"100%\"\n      width=\"100%\"\n    >\n      <Row\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n        width=\"100%\"\n        px={4}\n        height=\"60px\"\n        flexShrink={0}\n      >\n        <Heading size=\"sm\">\n          {t(\"Pool {{num}} Info\", { num: poolId, name })}\n        </Heading>\n\n        <Link\n          className=\"no-underline\"\n          isExternal\n          ml=\"auto\"\n          href={`https://metrics.rari.capital/d/HChNahwGk/fuse-pool-details?orgId=1&refresh=10s&var-poolID=${poolId}`}\n        >\n          <DashboardBox height=\"35px\">\n            <Center expand px={2} fontWeight=\"bold\">\n              {t(\"Metrics\")}\n            </Center>\n          </DashboardBox>\n        </Link>\n\n        {data?.isPowerfulAdmin ? (\n          <Link\n            /* @ts-ignore */\n            as={RouterLink}\n            className=\"no-underline\"\n            to=\"../edit\"\n            ml={2}\n          >\n            <DashboardBox height=\"35px\">\n              <Center expand px={2} fontWeight=\"bold\">\n                {t(\"Edit\")}\n              </Center>\n            </DashboardBox>\n          </Link>\n        ) : null}\n      </Row>\n\n      <ModalDivider />\n\n      <Column\n        mainAxisAlignment=\"center\"\n        crossAxisAlignment=\"center\"\n        width=\"100%\"\n        my={4}\n        px={4}\n      >\n        {assets.length > 0 ? (\n          <>\n            <AvatarGroup mt={1} size=\"xs\" max={30}>\n              {assets.map(({ underlyingToken, cToken }) => {\n                return <CTokenIcon key={cToken} address={underlyingToken} />;\n              })}\n            </AvatarGroup>\n\n            <Text mt={3} lineHeight={1} textAlign=\"center\">\n              {name} (\n              {assets.map(({ underlyingSymbol }, index, array) => {\n                return (\n                  underlyingSymbol + (index !== array.length - 1 ? \" / \" : \"\")\n                );\n              })}\n              )\n            </Text>\n          </>\n        ) : (\n          <Text>{name}</Text>\n        )}\n      </Column>\n\n      <ModalDivider />\n\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"flex-start\"\n        my={5}\n        px={4}\n        width=\"100%\"\n      >\n        <StatRow\n          statATitle={t(\"Total Supplied\")}\n          statA={shortUsdFormatter(totalSuppliedUSD)}\n          statBTitle={t(\"Total Borrowed\")}\n          statB={shortUsdFormatter(totalBorrowedUSD)}\n        />\n\n        <StatRow\n          statATitle={t(\"Available Liquidity\")}\n          statA={shortUsdFormatter(totalLiquidityUSD)}\n          statBTitle={t(\"Pool Utilization\")}\n          statB={\n            totalSuppliedUSD.toString() === \"0\"\n              ? \"0%\"\n              : ((totalBorrowedUSD / totalSuppliedUSD) * 100).toFixed(2) + \"%\"\n          }\n        />\n\n        <StatRow\n          statATitle={t(\"Upgradeable\")}\n          statA={data ? (data.upgradeable ? \"Yes\" : \"No\") : \"?\"}\n          statBTitle={\n            hasCopied ? t(\"Admin (copied!)\") : t(\"Admin (click to copy)\")\n          }\n          statB={data?.admin ? shortAddress(data.admin) : \"?\"}\n          onClick={onCopy}\n        />\n\n        <StatRow\n          statATitle={t(\"Platform Fee\")}\n          statA={assets.length > 0 ? assets[0].fuseFee / 1e16 + \"%\" : \"10%\"}\n          statBTitle={t(\"Average Admin Fee\")}\n          statB={\n            assets\n              .reduce(\n                (a, b, _, { length }) => a + b.adminFee / 1e16 / length,\n                0\n              )\n              .toFixed(1) + \"%\"\n          }\n        />\n\n        <StatRow\n          statATitle={t(\"Close Factor\")}\n          statA={\n            data?.closeFactor\n              ? (data.closeFactor / 1e16).toFixed(2) + \"%\"\n              : \"?%\"\n          }\n          statBTitle={t(\"Liquidation Incentive\")}\n          statB={\n            data?.liquidationIncentive\n              ? data.liquidationIncentive / 1e16 - 100 + \"%\"\n              : \"?%\"\n          }\n        />\n\n        <StatRow\n          statATitle={t(\"Oracle\")}\n          statA={data ? oracleModel ?? t(\"Unrecognized Oracle\") : \"?\"}\n          statBTitle={t(\"Whitelist\")}\n          statB={data ? (data.enforceWhitelist ? \"Yes\" : \"No\") : \"?\"}\n        />\n      </Column>\n    </Column>\n  );\n};\n\nconst StatRow = ({\n  statATitle,\n  statA,\n  statBTitle,\n  statB,\n  ...other\n}: {\n  statATitle: string;\n  statA: string;\n  statBTitle?: string;\n  statB?: string;\n  [key: string]: any;\n}) => {\n  return (\n    <RowOnDesktopColumnOnMobile\n      mainAxisAlignment=\"center\"\n      crossAxisAlignment=\"center\"\n      width=\"100%\"\n      mb={4}\n      {...other}\n    >\n      <Text width=\"50%\" textAlign=\"center\">\n        {statATitle}: <b>{statA}</b>\n      </Text>\n\n      {statBTitle && statB && (\n        <Text width=\"50%\" textAlign=\"center\">\n          {statBTitle}: <b>{statB}</b>\n        </Text>\n      )}\n    </RowOnDesktopColumnOnMobile>\n  );\n};\n\nconst AssetAndOtherInfo = ({\n  assets,\n  poolOracle,\n}: {\n  assets: USDPricedFuseAsset[];\n  poolOracle: string;\n}) => {\n  let { poolId } = useParams();\n\n  const { fuse } = useRari();\n\n  const { t } = useTranslation();\n\n  const [selectedAsset, setSelectedAsset] = useState(\n    assets.length > 3 ? assets[2] : assets[0]\n  );\n  const selectedTokenData = useTokenData(selectedAsset.underlyingToken);\n  const selectedAssetUtilization =\n    // @ts-ignore\n    selectedAsset.totalSupply === \"0\"\n      ? 0\n      : parseFloat(\n        // Use Max.min() to cap util at 100%\n        Math.min(\n          (selectedAsset.totalBorrow / selectedAsset.totalSupply) * 100,\n          100\n        ).toFixed(0)\n      );\n\n  const { data: curveData } = useQuery(\n    selectedAsset.cToken + \" curves\",\n    async () => {\n      const interestRateModel = await fuse.getInterestRateModel(\n        selectedAsset.cToken\n      );\n\n      if (interestRateModel === null) {\n        return { borrowerRates: null, supplierRates: null };\n      }\n\n      const IRMidentity = await fuse.identifyInterestRateModelName(\n        interestRateModel\n      );\n\n      const curve = convertIRMtoCurve(interestRateModel, fuse);\n\n      return { curve, IRMidentity };\n    }\n  );\n\n  const { curve: data, IRMidentity } = curveData ?? {};\n  console.log({ data, IRMidentity });\n\n  const isMobile = useIsMobile();\n\n  const oracleIdentity = useIdentifyOracle(\n    selectedAsset.oracle,\n    selectedAsset.underlyingToken\n  );\n\n  // Link to MPO if asset is ETH\n  const oracleAddress =\n    selectedAsset.underlyingToken === ETH_TOKEN_DATA.address\n      ? poolOracle\n      : selectedAsset.oracle;\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      width=\"100%\"\n      height=\"100%\"\n    >\n      <Row\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n        height=\"60px\"\n        width=\"100%\"\n        px={4}\n        flexShrink={0}\n      >\n        <Heading size=\"sm\" py={3}>\n          {t(\"Pool {{num}}'s {{token}} Stats\", {\n            num: poolId,\n            token: selectedAsset.underlyingSymbol,\n          })}\n        </Heading>\n\n        <Select\n          {...DASHBOARD_BOX_PROPS}\n          borderRadius=\"7px\"\n          fontWeight=\"bold\"\n          width=\"130px\"\n          _focus={{ outline: \"none\" }}\n          color={selectedTokenData?.color ?? \"#FFF\"}\n          onChange={(event) =>\n            setSelectedAsset(\n              assets.find((asset) => asset.cToken === event.target.value)!\n            )\n          }\n          value={selectedAsset.cToken}\n        >\n          {assets.map((asset) => (\n            <option\n              className=\"black-bg-option\"\n              value={asset.cToken}\n              key={asset.cToken}\n            >\n              {asset.underlyingSymbol}\n            </option>\n          ))}\n        </Select>\n      </Row>\n\n      <ModalDivider />\n\n      <Box\n        height=\"200px\"\n        width=\"100%\"\n        color=\"#000000\"\n        overflow=\"hidden\"\n        px={3}\n        className=\"hide-bottom-tooltip\"\n        flexShrink={0}\n      // bg=\"red\"\n      >\n        {data ? (\n          data.supplierRates === null ? (\n            <Center expand color=\"#FFFFFF\">\n              <Text>\n                {t(\"No graph is available for this asset's interest curves.\")}\n              </Text>\n            </Center>\n          ) : (\n            <>\n              <Chart\n                options={\n                  {\n                    ...FuseUtilizationChartOptions,\n                    annotations: {\n                      points: [\n                        {\n                          x: selectedAssetUtilization,\n                          y: data.borrowerRates[selectedAssetUtilization].y,\n                          marker: {\n                            size: 6,\n                            fillColor: \"#FFF\",\n                            strokeColor: \"#DDDCDC\",\n                          },\n                        },\n                        {\n                          x: selectedAssetUtilization,\n                          y: data.supplierRates[selectedAssetUtilization].y,\n                          marker: {\n                            size: 6,\n                            fillColor: selectedTokenData?.color ?? \"#A6A6A6\",\n                            strokeColor: \"#FFF\",\n                          },\n                        },\n                      ],\n                      xaxis: [\n                        {\n                          x: selectedAssetUtilization,\n                          label: {\n                            text: t(\"Current Utilization\"),\n                            orientation: \"horizontal\",\n                            style: {\n                              background: \"#121212\",\n                              color: \"#FFF\",\n                            },\n                          },\n                        },\n                      ],\n                    },\n\n                    colors: [\"#FFFFFF\", selectedTokenData?.color ?? \"#A6A6A6\"],\n                  } as any\n                }\n                type=\"line\"\n                width=\"100%\"\n                height=\"100%\"\n                series={[\n                  {\n                    name: \"Borrow Rate\",\n                    data: data.borrowerRates,\n                  },\n                  {\n                    name: \"Deposit Rate\",\n                    data: data.supplierRates,\n                  },\n                ]}\n              />\n              <Text\n                position=\"absolute\"\n                zIndex={4}\n                top={4}\n                left={4}\n                color=\"white\"\n              >\n                {\" \"}\n                {IRMidentity?.replace(\"_\", \" \") ?? \"\"}\n              </Text>\n            </>\n          )\n        ) : (\n          <Center expand color=\"#FFFFFF\">\n            <Spinner />\n          </Center>\n        )}\n      </Box>\n\n      <ModalDivider />\n\n      <Row\n        mainAxisAlignment=\"space-around\"\n        crossAxisAlignment=\"center\"\n        height=\"100%\"\n        width=\"100%\"\n        pt={4}\n        px={4}\n        pb={2}\n      >\n        <CaptionedStat\n          stat={(selectedAsset.collateralFactor / 1e16).toFixed(0) + \"%\"}\n          statSize=\"lg\"\n          captionSize=\"xs\"\n          caption={t(\"Collateral Factor\")}\n          crossAxisAlignment=\"center\"\n          captionFirst={true}\n        />\n\n        <SimpleTooltip label={oracleIdentity}>\n          <Link\n            href={`https://etherscan.io/address/${oracleAddress}`}\n            isExternal\n            _hover={{ pointer: \"cursor\", color: \"#21C35E\" }}\n          >\n            <CaptionedStat\n              stat={truncate(oracleIdentity, 20)}\n              statSize=\"md\"\n              captionSize=\"xs\"\n              caption={t(\"Oracle\")}\n              crossAxisAlignment=\"center\"\n              captionFirst={true}\n            />\n          </Link>\n        </SimpleTooltip>\n\n        <CaptionedStat\n          stat={(selectedAsset.reserveFactor / 1e16).toFixed(0) + \"%\"}\n          statSize=\"lg\"\n          captionSize=\"xs\"\n          caption={t(\"Reserve Factor\")}\n          crossAxisAlignment=\"center\"\n          captionFirst={true}\n        />\n      </Row>\n\n      <ModalDivider />\n\n      <Row\n        mainAxisAlignment=\"space-around\"\n        crossAxisAlignment=\"center\"\n        height=\"100%\"\n        width=\"100%\"\n        p={4}\n        mt={3}\n      >\n          <SimpleTooltip label={`${selectedAsset.totalSupply} ${selectedAsset.underlyingSymbol}`}>\n            <CaptionedStat\n              stat={(selectedAsset.totalSupply / (10 ** selectedAsset.underlyingDecimals)).toFixed(2) + ` (${shortUsdFormatter(selectedAsset.totalSupplyUSD)})`}\n              statSize=\"lg\"\n              captionSize=\"xs\"\n              caption={t(\"Total Supplied\")}\n              crossAxisAlignment=\"center\"\n              captionFirst={true}\n            />\n          </SimpleTooltip>\n\n        {isMobile ? null : (\n          <CaptionedStat\n            stat={\n              selectedAsset.totalSupplyUSD.toString() === \"0\"\n                ? \"0%\"\n                : (\n                  (selectedAsset.totalBorrowUSD /\n                    selectedAsset.totalSupplyUSD) *\n                  100\n                ).toFixed(0) + \"%\"\n            }\n            statSize=\"lg\"\n            captionSize=\"xs\"\n            caption={t(\"Utilization\")}\n            crossAxisAlignment=\"center\"\n            captionFirst={true}\n          />\n        )}\n\n        <CaptionedStat\n          stat={shortUsdFormatter(selectedAsset.totalBorrowUSD)}\n          statSize=\"lg\"\n          captionSize=\"xs\"\n          caption={t(\"Total Borrowed\")}\n          crossAxisAlignment=\"center\"\n          captionFirst={true}\n        />\n      </Row>\n      <ModalDivider />\n    </Column>\n  );\n};\n\nexport const convertIRMtoCurve = (interestRateModel: any, fuse: Fuse) => {\n  let borrowerRates = [];\n  let supplierRates = [];\n  for (var i = 0; i <= 100; i++) {\n    const supplyLevel =\n      (Math.pow(\n        (interestRateModel.getSupplyRate(\n          fuse.web3.utils.toBN((i * 1e16).toString())\n        ) /\n          1e18) *\n        (4 * 60 * 24) +\n        1,\n        365\n      ) -\n        1) *\n      100;\n\n    const borrowLevel =\n      (Math.pow(\n        (interestRateModel.getBorrowRate(\n          fuse.web3.utils.toBN((i * 1e16).toString())\n        ) /\n          1e18) *\n        (4 * 60 * 24) +\n        1,\n        365\n      ) -\n        1) *\n      100;\n\n    supplierRates.push({ x: i, y: supplyLevel });\n    borrowerRates.push({ x: i, y: borrowLevel });\n  }\n\n  return { borrowerRates, supplierRates };\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/FusePoolPage.tsx",
    "content": "import { memo, useEffect, useMemo, useState } from \"react\";\nimport {\n  Avatar,\n  AvatarGroup,\n  Box,\n  Button,\n  Heading,\n  Link,\n  Progress,\n  Spinner,\n  Switch,\n  Text,\n  useDisclosure,\n  useToast,\n  HStack,\n} from \"@chakra-ui/react\";\nimport { Alert, AlertIcon } from \"@chakra-ui/alert\";\n\nimport {\n  Column,\n  Center,\n  Row,\n  RowOrColumn,\n  useIsMobile,\n} from \"utils/chakraUtils\";\n\nimport { FusePoolData } from \"utils/fetchFusePoolData\";\n\n// Hooks\nimport { useTranslation } from \"react-i18next\";\nimport { useQuery, useQueryClient } from \"react-query\";\nimport { useParams, Link as RouterLink } from \"react-router-dom\";\nimport { useRari } from \"context/RariContext\";\nimport { useBorrowLimit } from \"hooks/useBorrowLimit\";\nimport { useFusePoolData } from \"hooks/useFusePoolData\";\nimport { useIsSemiSmallScreen } from \"hooks/useIsSemiSmallScreen\";\nimport {\n  ETH_TOKEN_DATA,\n  TokensDataMap,\n  useTokenData,\n  useTokensData,\n} from \"hooks/useTokenData\";\nimport { useAuthedCallback } from \"hooks/useAuthedCallback\";\n\n// Utils\nimport { convertMantissaToAPY } from \"utils/apyUtils\";\nimport { shortUsdFormatter, smallUsdFormatter } from \"utils/bigUtils\";\nimport { createComptroller, createUnitroller } from \"utils/createComptroller\";\nimport { USDPricedFuseAsset } from \"utils/fetchFusePoolData\";\n\n// Components\nimport DashboardBox from \"components/shared/DashboardBox\";\nimport { Header } from \"components/shared/Header\";\nimport { ModalDivider } from \"components/shared/Modal\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\nimport { SwitchCSS } from \"components/shared/SwitchCSS\";\n\nimport FuseStatsBar from \"./FuseStatsBar\";\nimport FuseTabBar from \"./FuseTabBar\";\nimport PoolModal, { Mode } from \"./Modals/PoolModal\";\n\nimport LogRocket from \"logrocket\";\nimport Footer from \"components/shared/Footer\";\nimport {\n  CTokenRewardsDistributorIncentives,\n  IncentivesData,\n  usePoolIncentives,\n} from \"hooks/rewards/usePoolIncentives\";\nimport { CTokenAvatarGroup, CTokenIcon } from \"components/shared/CTokenIcon\";\nimport { motion } from \"framer-motion\";\n\nimport { GlowingBox } from \"components/shared/GlowingButton\";\nimport { AdminAlert } from \"components/shared/AdminAlert\";\nimport { EditIcon } from \"@chakra-ui/icons\";\nimport { testForComptrollerErrorAndSend } from \"./FusePoolEditPage\";\nimport { handleGenericError } from \"utils/errorHandling\";\nimport { CTokenRewardsDistributorIncentivesWithRates } from \"hooks/rewards/useRewardAPY\";\nimport { getSymbol } from \"utils/symbolUtils\";\n\nexport const useIsComptrollerAdmin = (comptrollerAddress?: string): boolean => {\n  const { fuse, address } = useRari();\n\n  const { data } = useQuery(comptrollerAddress + \" admin\", async () => {\n    if (!comptrollerAddress) return undefined;\n\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    const admin = await comptroller.methods.admin().call();\n\n    return admin;\n  });\n\n  return address === data;\n};\n\nexport const useIsComptrollerPendingAdmin = (\n  comptrollerAddress?: string\n): boolean => {\n  const { fuse, address, isAuthed } = useRari();\n\n  const { data } = useQuery(comptrollerAddress + \" pending admin\", async () => {\n    if (!comptrollerAddress) return undefined;\n\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    const pendingAdmin = await comptroller.methods.pendingAdmin().call();\n\n    return pendingAdmin;\n  });\n\n  if (!isAuthed) return false;\n  return address === data;\n};\n\nconst PendingAdminAlert = ({ comptroller }: { comptroller?: string }) => {\n  const { address, fuse } = useRari();\n\n  const toast = useToast();\n  const queryClient = useQueryClient();\n\n  const [isAccepting, setIsAccepting] = useState(false);\n\n  const isPendingAdmin = useIsComptrollerPendingAdmin(comptroller);\n\n  const acceptAdmin = async () => {\n    if (!comptroller) return;\n    const unitroller = createUnitroller(comptroller, fuse);\n    setIsAccepting(true);\n\n    try {\n      await testForComptrollerErrorAndSend(\n        unitroller.methods._acceptAdmin(),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-AcceptAdmin\");\n\n      queryClient.refetchQueries();\n      setIsAccepting(false);\n    } catch (e) {\n      setIsAccepting(false);\n\n      handleGenericError(e, toast);\n    }\n  };\n\n  return (\n    <>\n      {isPendingAdmin && (\n        <AdminAlert\n          isAdmin={isPendingAdmin}\n          isAdminText=\"You are the pending admin of this Fuse Pool! Click to Accept Admin\"\n          rightAdornment={\n            <Button\n              h=\"100%\"\n              p={3}\n              ml=\"auto\"\n              color=\"black\"\n              onClick={acceptAdmin}\n              disabled={isAccepting}\n            >\n              <HStack>\n                <Text fontWeight=\"bold\">\n                  {isAccepting} ? Accepting... : Accept Admin{\" \"}\n                </Text>\n              </HStack>\n            </Button>\n          }\n        />\n      )}\n    </>\n  );\n};\n\nconst RiskyPoolAlert = () => {\n  return (\n    <Alert colorScheme={\"red\"} borderRadius={5} mt=\"5\">\n      <AlertIcon />\n      <Text color=\"black\">\n        Do not use this pool. This pool has risks due to a weak oracle.\n      </Text>\n    </Alert>\n  );\n};\n\nconst FusePoolPage = memo(() => {\n  const { isAuthed } = useRari();\n\n  const isMobile = useIsSemiSmallScreen();\n\n  let { poolId } = useParams();\n\n  const data = useFusePoolData(poolId);\n  const isRiskyPool = poolId == \"90\" ?? false\n\n  const incentivesData: IncentivesData = usePoolIncentives(data?.comptroller);\n  const { hasIncentives } = incentivesData;\n  const isAdmin = useIsComptrollerAdmin(data?.comptroller);\n\n  return (\n    <>\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        color=\"#FFFFFF\"\n        mx=\"auto\"\n        width={isMobile ? \"100%\" : \"1150px\"}\n        px={isMobile ? 4 : 0}\n      >\n        <Header isAuthed={isAuthed} isFuse />\n\n        <FuseStatsBar data={data} />\n\n        <FuseTabBar />\n\n        {\n          /* If they have some asset enabled as collateral, show the collateral ratio bar */\n          data && data.assets.some((asset) => asset.membership) ? (\n            <CollateralRatioBar\n              assets={data.assets}\n              borrowUSD={data.totalBorrowBalanceUSD}\n            />\n          ) : null\n        }\n\n        {!!data && isAdmin && (\n          <AdminAlert\n            isAdmin={isAdmin}\n            isAdminText=\"You are the admin of this Fuse Pool!\"\n            rightAdornment={\n              <Box h=\"100%\" ml=\"auto\" color=\"black\">\n                <Link\n                  /* @ts-ignore */\n                  as={RouterLink}\n                  to=\"./edit\"\n                >\n                  <HStack>\n                    <Text fontWeight=\"bold\">Edit </Text>\n                    <EditIcon />\n                  </HStack>\n                </Link>\n              </Box>\n            }\n          />\n        )}\n\n        {!!data && isAuthed && (\n          <PendingAdminAlert comptroller={data?.comptroller} />\n        )}\n\n        {!!isRiskyPool && <RiskyPoolAlert />}\n\n        {hasIncentives && (\n          <motion.div\n            initial={{ opacity: 0, y: 40 }}\n            animate={{ opacity: 1, y: 0 }}\n            exit={{ opacity: 0 }}\n            style={{ width: \"100%\" }}\n          >\n            <GlowingBox w=\"100%\" h=\"50px\" mt={4}>\n              <Row\n                mainAxisAlignment=\"flex-start\"\n                crossAxisAlignment=\"center\"\n                h=\"100%\"\n                w=\"100\"\n                p={3}\n              >\n                <Heading fontSize=\"md\" ml={2}>\n                  {\" \"}\n                  🎉 This pool is offering rewards\n                </Heading>\n                <CTokenAvatarGroup\n                  tokenAddresses={Object.keys(incentivesData.rewardTokensData)}\n                  ml={2}\n                  mr={2}\n                  popOnHover={true}\n                />\n              </Row>\n            </GlowingBox>\n          </motion.div>\n        )}\n\n        <RowOrColumn\n          width=\"100%\"\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n          mt={4}\n          isRow={!isMobile}\n        >\n          <DashboardBox width={isMobile ? \"100%\" : \"50%\"}>\n            {data ? (\n              <SupplyList\n                assets={data.assets}\n                comptrollerAddress={data.comptroller}\n                supplyBalanceUSD={data.totalSupplyBalanceUSD}\n                incentivesData={incentivesData}\n              />\n            ) : (\n              <Center height=\"200px\">\n                <Spinner />\n              </Center>\n            )}\n          </DashboardBox>\n\n          <DashboardBox\n            ml={isMobile ? 0 : 4}\n            mt={isMobile ? 4 : 0}\n            width={isMobile ? \"100%\" : \"50%\"}\n          >\n            {data ? (\n              <BorrowList\n                comptrollerAddress={data.comptroller}\n                assets={data.assets}\n                borrowBalanceUSD={data.totalBorrowBalanceUSD}\n                incentivesData={incentivesData}\n              />\n            ) : (\n              <Center height=\"200px\">\n                <Spinner />\n              </Center>\n            )}\n          </DashboardBox>\n        </RowOrColumn>\n        <Footer />\n      </Column>\n    </>\n  );\n});\n\nexport default FusePoolPage;\n\nconst CollateralRatioBar = ({\n  assets,\n  borrowUSD,\n}: {\n  assets: USDPricedFuseAsset[];\n  borrowUSD: number;\n}) => {\n  const { t } = useTranslation();\n\n  const maxBorrow = useBorrowLimit(assets);\n\n  const borrowPercent = borrowUSD / maxBorrow;\n  const ratio = isNaN(borrowPercent) ? 0 : borrowPercent * 100;\n\n  useEffect(() => {\n    if (ratio > 95) {\n      LogRocket.track(\"Fuse-AtRiskOfLiquidation\");\n    }\n  }, [ratio]);\n\n  return (\n    <DashboardBox width=\"100%\" height=\"65px\" mt={4} p={4}>\n      <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\" expand>\n        <SimpleTooltip\n          label={t(\"Keep this bar from filling up to avoid being liquidated!\")}\n        >\n          <Text flexShrink={0} mr={4}>\n            {t(\"Borrow Limit\")}\n          </Text>\n        </SimpleTooltip>\n\n        <SimpleTooltip label={t(\"This is how much you have borrowed.\")}>\n          <Text flexShrink={0} mt=\"2px\" mr={3} fontSize=\"10px\">\n            {smallUsdFormatter(borrowUSD)}\n          </Text>\n        </SimpleTooltip>\n\n        <SimpleTooltip\n          label={`You're using ${ratio.toFixed(1)}% of your ${smallUsdFormatter(\n            maxBorrow\n          )} borrow limit.`}\n        >\n          <Box width=\"100%\">\n            <Progress\n              size=\"xs\"\n              width=\"100%\"\n              colorScheme={\n                ratio <= 40\n                  ? \"whatsapp\"\n                  : ratio <= 60\n                  ? \"yellow\"\n                  : ratio <= 80\n                  ? \"orange\"\n                  : \"red\"\n              }\n              borderRadius=\"10px\"\n              value={ratio}\n            />\n          </Box>\n        </SimpleTooltip>\n\n        <SimpleTooltip\n          label={t(\n            \"If your borrow amount reaches this value, you will be liquidated.\"\n          )}\n        >\n          <Text flexShrink={0} mt=\"2px\" ml={3} fontSize=\"10px\">\n            {smallUsdFormatter(maxBorrow)}\n          </Text>\n        </SimpleTooltip>\n      </Row>\n    </DashboardBox>\n  );\n};\n\nconst SupplyList = ({\n  assets,\n  supplyBalanceUSD,\n  comptrollerAddress,\n  incentivesData,\n}: {\n  assets: USDPricedFuseAsset[];\n  supplyBalanceUSD: number;\n  comptrollerAddress: string;\n  incentivesData: IncentivesData;\n}) => {\n  const { t } = useTranslation();\n\n  const suppliedAssets = assets.filter((asset) => asset.supplyBalanceUSD > 1);\n  const nonSuppliedAssets = assets.filter(\n    (asset) => asset.supplyBalanceUSD < 1\n  );\n\n  const isMobile = useIsMobile();\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      height=\"100%\"\n      pb={1}\n    >\n      <Heading size=\"md\" px={4} py={3}>\n        {t(\"Supply Balance:\")} {smallUsdFormatter(supplyBalanceUSD)}\n      </Heading>\n      <ModalDivider />\n\n      {assets.length > 0 ? (\n        <Row\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n          width=\"100%\"\n          px={4}\n          mt={4}\n        >\n          <Text width=\"27%\" fontWeight=\"bold\" pl={1}>\n            {t(\"Asset\")}\n          </Text>\n\n          {isMobile ? null : (\n            <Text width=\"27%\" fontWeight=\"bold\" textAlign=\"right\">\n              {t(\"APY/LTV\")}\n            </Text>\n          )}\n\n          <Text\n            width={isMobile ? \"40%\" : \"27%\"}\n            fontWeight=\"bold\"\n            textAlign=\"right\"\n          >\n            {t(\"Balance\")}\n          </Text>\n\n          <Text\n            width={isMobile ? \"34%\" : \"20%\"}\n            fontWeight=\"bold\"\n            textAlign=\"right\"\n          >\n            {t(\"Collateral\")}\n          </Text>\n        </Row>\n      ) : null}\n\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"flex-start\"\n        expand\n        mt={1}\n      >\n        {assets.length > 0 ? (\n          <>\n            {suppliedAssets.map((asset, index) => {\n              const supplyIncentivesForAsset = (\n                incentivesData?.incentives?.[asset.cToken] ?? []\n              ).filter(({ supplySpeed }) => !!supplySpeed);\n\n              return (\n                <AssetSupplyRow\n                  comptrollerAddress={comptrollerAddress}\n                  key={asset.underlyingToken}\n                  assets={suppliedAssets}\n                  index={index}\n                  supplyIncentives={supplyIncentivesForAsset}\n                  rewardTokensData={incentivesData.rewardTokensData}\n                  isPaused={asset.isPaused}\n                />\n              );\n            })}\n\n            {suppliedAssets.length > 0 ? <ModalDivider my={2} /> : null}\n\n            {nonSuppliedAssets.map((asset, index) => {\n              const supplyIncentivesForAsset = (\n                incentivesData?.incentives?.[asset.cToken] ?? []\n              ).filter(({ supplySpeed }) => !!supplySpeed);\n\n              return (\n                <AssetSupplyRow\n                  comptrollerAddress={comptrollerAddress}\n                  key={asset.underlyingToken}\n                  assets={nonSuppliedAssets}\n                  index={index}\n                  supplyIncentives={supplyIncentivesForAsset}\n                  rewardTokensData={incentivesData.rewardTokensData}\n                  isPaused={asset.isPaused}\n                />\n              );\n            })}\n          </>\n        ) : (\n          <Center expand my={8}>\n            {t(\"There are no assets in this pool.\")}\n          </Center>\n        )}\n      </Column>\n    </Column>\n  );\n};\n\nconst AssetSupplyRow = ({\n  assets,\n  index,\n  comptrollerAddress,\n  supplyIncentives,\n  rewardTokensData,\n  isPaused,\n}: {\n  assets: USDPricedFuseAsset[];\n  index: number;\n  comptrollerAddress: string;\n  supplyIncentives: CTokenRewardsDistributorIncentivesWithRates[];\n  rewardTokensData: TokensDataMap;\n  isPaused: boolean;\n}) => {\n  const {\n    isOpen: isModalOpen,\n    onOpen: openModal,\n    onClose: closeModal,\n  } = useDisclosure();\n\n  const authedOpenModal = useAuthedCallback(openModal);\n\n  const asset = assets[index];\n\n  const { fuse, address } = useRari();\n\n  const tokenData = useTokenData(asset.underlyingToken);\n\n  const supplyAPY = convertMantissaToAPY(asset.supplyRatePerBlock, 365);\n\n  const queryClient = useQueryClient();\n\n  const toast = useToast();\n\n  const onToggleCollateral = async () => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    let call;\n    if (asset.membership) {\n      call = comptroller.methods.exitMarket(asset.cToken);\n    } else {\n      call = comptroller.methods.enterMarkets([asset.cToken]);\n    }\n\n    let response = await call.call({ from: address });\n    // For some reason `response` will be `[\"0\"]` if no error but otherwise it will return a string number.\n    if (response[0] !== \"0\") {\n      if (asset.membership) {\n        toast({\n          title: \"Error! Code: \" + response,\n          description:\n            \"You cannot disable this asset as collateral as you would not have enough collateral posted to keep your borrow. Try adding more collateral of another type or paying back some of your debt.\",\n          status: \"error\",\n          duration: 9000,\n          isClosable: true,\n          position: \"top-right\",\n        });\n      } else {\n        toast({\n          title: \"Error! Code: \" + response,\n          description:\n            \"You cannot enable this asset as collateral at this time.\",\n          status: \"error\",\n          duration: 9000,\n          isClosable: true,\n          position: \"top-right\",\n        });\n      }\n\n      return;\n    }\n\n    await call.send({ from: address });\n\n    LogRocket.track(\"Fuse-ToggleCollateral\");\n\n    queryClient.refetchQueries();\n  };\n\n  const isStakedOHM =\n    asset.underlyingToken.toLowerCase() ===\n    \"0x04F2694C8fcee23e8Fd0dfEA1d4f5Bb8c352111F\".toLowerCase();\n\n  const { data: stakedOHMApyData } = useQuery(\"sOHM_APY\", async () => {\n    const data = (\n      await fetch(\"https://api.rari.capital/fuse/pools/18/apy\")\n    ).json();\n\n    return data as Promise<{ supplyApy: number; supplyWpy: number }>;\n  });\n\n  const isMobile = useIsMobile();\n\n  const { t } = useTranslation();\n\n  const hasSupplyIncentives = !!supplyIncentives.length;\n  const totalSupplyAPR =\n    supplyIncentives?.reduce((prev, incentive) => {\n      const apr = incentive.supplyAPR;\n      return prev + apr;\n    }, 0) ?? 0;\n\n  const [hovered, setHovered] = useState<number>(-1);\n\n  const handleMouseEnter = (index: number) => setHovered(index);\n  const handleMouseLeave = () => setHovered(-1);\n\n  const displayedSupplyAPR =\n    hovered >= 0 ? supplyIncentives[hovered].supplyAPR : totalSupplyAPR;\n\n  const displayedSupplyAPRLabel =\n    hovered >= 0\n      ? `${supplyIncentives[hovered].supplyAPR.toFixed(2)} % APR in ${\n          rewardTokensData[supplyIncentives[hovered].rewardToken].symbol\n        } distributions.`\n      : `${displayedSupplyAPR.toFixed(\n          2\n        )}% total APR distributed in ${supplyIncentives\n          .map((incentive) => rewardTokensData[incentive.rewardToken].symbol)\n          .join(\", \")}\n         `;\n\n  const _hovered = hovered > 0 ? hovered : 0;\n\n  const color =\n    rewardTokensData[supplyIncentives?.[_hovered]?.rewardToken]?.color ??\n    \"white\";\n\n  const symbol = getSymbol(tokenData, asset);\n\n  return (\n    <>\n      <PoolModal\n        defaultMode={Mode.SUPPLY}\n        comptrollerAddress={comptrollerAddress}\n        assets={assets}\n        index={index}\n        isOpen={isModalOpen}\n        onClose={closeModal}\n        isBorrowPaused={asset.isPaused}\n      />\n\n      <Row\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"flex-start\"\n        width=\"100%\"\n        px={4}\n        py={1.5}\n        className=\"hover-row\"\n      >\n        {/* Underlying Token Data */}\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n          width=\"27%\"\n        >\n          <Row\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n            width=\"100%\"\n            as=\"button\"\n            onClick={authedOpenModal}\n          >\n            <Avatar\n              bg=\"#FFF\"\n              boxSize=\"37px\"\n              name={symbol}\n              src={\n                tokenData?.logoURL ??\n                \"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"\n              }\n            />\n            <Text fontWeight=\"bold\" fontSize=\"lg\" ml={2} flexShrink={0}>\n              {symbol}\n            </Text>\n          </Row>\n          {/* <Row\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n            width=\"100%\"\n          >\n            <Text fontSize=\"sm\" ml={2} flexShrink={0}>\n            {shortUsdFormatter(asset.liquidityUSD)}\n            </Text>\n          </Row> */}\n        </Column>\n\n        {/* APY */}\n        {isMobile ? null : (\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"flex-end\"\n            width=\"27%\"\n            as=\"button\"\n            onClick={authedOpenModal}\n          >\n            <Text\n              color={tokenData?.color ?? \"#FF\"}\n              fontWeight=\"bold\"\n              fontSize=\"17px\"\n            >\n              {isStakedOHM\n                ? stakedOHMApyData\n                  ? (stakedOHMApyData.supplyApy * 100).toFixed(2)\n                  : \"?\"\n                : supplyAPY.toFixed(2)}\n              %\n            </Text>\n\n            {/* Demo Supply Incentives */}\n            {hasSupplyIncentives && (\n              <Row\n                // ml={1}\n                // mb={.5}\n                crossAxisAlignment=\"center\"\n                mainAxisAlignment=\"flex-end\"\n                py={2}\n              >\n                <Text fontWeight=\"bold\" mr={1}>\n                  +\n                </Text>\n                <AvatarGroup size=\"xs\" max={30} ml={2} mr={1} spacing={1}>\n                  {supplyIncentives?.map((supplyIncentive, i) => {\n                    return (\n                      <SimpleTooltip label={displayedSupplyAPRLabel}>\n                        <CTokenIcon\n                          address={supplyIncentive.rewardToken}\n                          boxSize=\"20px\"\n                          onMouseEnter={() => handleMouseEnter(i)}\n                          onMouseLeave={() => handleMouseLeave()}\n                          _hover={{\n                            zIndex: 9,\n                            border: \".5px solid white\",\n                            transform: \"scale(1.3);\",\n                          }}\n                        />\n                      </SimpleTooltip>\n                    );\n                  })}\n                </AvatarGroup>\n                <SimpleTooltip label={displayedSupplyAPRLabel}>\n                  <Text color={color} fontWeight=\"bold\" pl={1} fontSize=\"sm\">\n                    {/* {(supplyIncentive.supplySpeed / 1e18).toString()}%  */}\n                    {displayedSupplyAPR.toFixed(2)}% APR\n                  </Text>\n                </SimpleTooltip>\n              </Row>\n            )}\n\n            {/* Incentives */}\n            {/* {hasSupplyIncentives && (\n              <Column\n                mainAxisAlignment=\"flex-start\"\n                crossAxisAlignment=\"flex-end\"\n                py={1}\n              >\n                {supplyIncentives?.map((supplyIncentive) => {\n                  return (\n                    <Row\n                      ml={1}\n                      py={0.5}\n                      // mb={.5}\n                      crossAxisAlignment=\"center\"\n                      mainAxisAlignment=\"flex-end\"\n                    >\n                      <Text fontWeight=\"bold\" mr={2}>\n                        +\n                      </Text>\n                      <CTokenIcon\n                        address={supplyIncentive.rewardToken}\n                        boxSize=\"20px\"\n                      />\n                      <Text fontWeight=\"bold\" mr={2}></Text>\n                      <Text\n                        color={\n                          rewardTokensData[supplyIncentive.rewardToken].color ??\n                          \"white\"\n                        }\n                        fontWeight=\"bold\"\n                      >\n                        {(supplyIncentive.supplySpeed / 1e18).toString()}%\n                      </Text>\n                    </Row>\n                  );\n                })}\n              </Column>\n            )} */}\n\n            <SimpleTooltip\n              label={t(\n                \"The Collateral Factor (CF) ratio defines the maximum amount of tokens in the pool that can be borrowed with a specific collateral. It’s expressed in percentage: if in a pool ETH has 75% LTV, for every 1 ETH worth of collateral, borrowers will be able to borrow 0.75 ETH worth of other tokens in the pool.\"\n              )}\n            >\n              <Text fontSize=\"sm\">{asset.collateralFactor / 1e16}% CF</Text>\n            </SimpleTooltip>\n\n            {/* Incentives under APY\n            <Column\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"flex-end\"\n              my={1}\n            >\n              {supplyIncentives?.map((supplyIncentive) => {\n                return (\n                  <Row\n                    mainAxisAlignment=\"space-between\"\n                    crossAxisAlignment=\"center\"\n                    w=\"100%\"\n                  >\n                    <Avatar\n                      src={\n                        rewardTokensData[supplyIncentive.rewardToken].logoURL ?? \"\"\n                      }\n                      boxSize=\"20px\"\n                    />\n                    <Text\n                      ml={2}\n                      fontWeight=\"bold\"\n                      color={\n                        rewardTokensData[supplyIncentive.rewardToken].color ?? \"\"\n                      }\n                    >\n                      {(supplyIncentive.supplySpeed / 1e18).toString()}%\n                    </Text>\n                  </Row>\n                );\n              })}\n            </Column>\n             */}\n          </Column>\n        )}\n\n        {/* Incentives */}\n        {/* <Column mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"flex-start\">\n          {supplyIncentives?.map((supplyIncentive) => {\n            return (\n              <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n                <Avatar\n                  src={rewardTokensData[supplyIncentive.rewardToken].logoURL}\n                  boxSize=\"15px\"\n                />\n                <Box>\n                  {(supplyIncentive.supplySpeed / 1e18).toString()}% APY\n                </Box>\n              </Row>\n            );\n          })}\n        </Column> */}\n\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-end\"\n          width={isMobile ? \"40%\" : \"27%\"}\n          as=\"button\"\n          onClick={authedOpenModal}\n        >\n          <Text\n            color={tokenData?.color ?? \"#FFF\"}\n            fontWeight=\"bold\"\n            fontSize=\"17px\"\n          >\n            {smallUsdFormatter(asset.supplyBalanceUSD)}\n          </Text>\n\n          <Text fontSize=\"sm\">\n            {smallUsdFormatter(\n              asset.supplyBalance / 10 ** asset.underlyingDecimals\n            ).replace(\"$\", \"\")}{\" \"}\n            {symbol}\n          </Text>\n        </Column>\n\n        {/* Set As Collateral  */}\n        <Row\n          width={isMobile ? \"34%\" : \"20%\"}\n          mainAxisAlignment=\"flex-end\"\n          crossAxisAlignment=\"center\"\n        >\n          <SwitchCSS symbol={symbol} color={tokenData?.color} />\n          <Switch\n            isChecked={asset.membership}\n            className={symbol + \"-switch\"}\n            onChange={onToggleCollateral}\n            size=\"md\"\n            mt={1}\n            mr={5}\n          />\n        </Row>\n      </Row>\n    </>\n  );\n};\n\nconst BorrowList = ({\n  assets,\n  borrowBalanceUSD,\n  comptrollerAddress,\n  incentivesData,\n}: {\n  assets: USDPricedFuseAsset[];\n  borrowBalanceUSD: number;\n  comptrollerAddress: string;\n  incentivesData: IncentivesData;\n}) => {\n  const { t } = useTranslation();\n  const borrowedAssets = assets.filter((asset) => asset.borrowBalanceUSD > 1);\n  const nonBorrowedAssets = assets.filter(\n    (asset) => asset.borrowBalanceUSD < 1\n  );\n\n  const isMobile = useIsMobile();\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      height=\"100%\"\n      pb={1}\n    >\n      <Heading size=\"md\" px={4} py={3}>\n        {t(\"Borrow Balance:\")} {smallUsdFormatter(borrowBalanceUSD)}\n      </Heading>\n      <ModalDivider />\n\n      {assets.length > 0 ? (\n        <Row\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n          width=\"100%\"\n          px={4}\n          mt={4}\n        >\n          <Text width=\"27%\" fontWeight=\"bold\" pl={1}>\n            {t(\"Asset\")}\n          </Text>\n\n          {isMobile ? null : (\n            <Text width=\"27%\" fontWeight=\"bold\" textAlign=\"right\">\n              {t(\"APY/TVL\")}\n            </Text>\n          )}\n\n          <Text\n            fontWeight=\"bold\"\n            textAlign=\"right\"\n            width={isMobile ? \"40%\" : \"27%\"}\n          >\n            {t(\"Balance\")}\n          </Text>\n\n          <Text\n            fontWeight=\"bold\"\n            textAlign=\"right\"\n            width={isMobile ? \"34%\" : \"20%\"}\n          >\n            {t(\"Liquidity\")}\n          </Text>\n        </Row>\n      ) : null}\n\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"flex-start\"\n        expand\n        mt={1}\n      >\n        {assets.length > 0 ? (\n          <>\n            {borrowedAssets.map((asset, index) => {\n              // Don't show paused assets.\n              // if (asset.isPaused) {\n              //   return null;\n              // }\n\n              const incentivesForAsset = (\n                incentivesData?.incentives?.[asset.cToken] ?? []\n              ).filter(({ borrowSpeed }) => !!borrowSpeed);\n\n              return (\n                <AssetBorrowRow\n                  comptrollerAddress={comptrollerAddress}\n                  key={asset.underlyingToken}\n                  assets={borrowedAssets}\n                  index={index}\n                  borrowIncentives={incentivesForAsset}\n                  rewardTokensData={incentivesData.rewardTokensData}\n                  isPaused={asset.isPaused}\n                />\n              );\n            })}\n\n            {borrowedAssets.length > 0 ? <ModalDivider my={2} /> : null}\n\n            {nonBorrowedAssets.map((asset, index) => {\n              // Don't show paused assets.\n              if (asset.isPaused) {\n                return null;\n              }\n\n              const incentivesForAsset = (\n                incentivesData?.incentives?.[asset.cToken] ?? []\n              ).filter(({ borrowSpeed }) => !!borrowSpeed);\n\n              return (\n                <AssetBorrowRow\n                  comptrollerAddress={comptrollerAddress}\n                  key={asset.underlyingToken}\n                  assets={nonBorrowedAssets}\n                  index={index}\n                  borrowIncentives={incentivesForAsset}\n                  rewardTokensData={incentivesData.rewardTokensData}\n                  isPaused={asset.isPaused}\n                />\n              );\n            })}\n          </>\n        ) : (\n          <Center expand my={8}>\n            {t(\"There are no assets in this pool.\")}\n          </Center>\n        )}\n      </Column>\n    </Column>\n  );\n};\n\nconst AssetBorrowRow = ({\n  assets,\n  index,\n  comptrollerAddress,\n  borrowIncentives,\n  rewardTokensData,\n  isPaused,\n}: {\n  assets: USDPricedFuseAsset[];\n  index: number;\n  comptrollerAddress: string;\n  borrowIncentives: CTokenRewardsDistributorIncentives[];\n  rewardTokensData: TokensDataMap;\n  isPaused: boolean;\n}) => {\n  const asset = assets[index];\n\n  const {\n    isOpen: isModalOpen,\n    onOpen: openModal,\n    onClose: closeModal,\n  } = useDisclosure();\n\n  const authedOpenModal = useAuthedCallback(openModal);\n\n  const tokenData = useTokenData(asset.underlyingToken);\n\n  const borrowAPY = convertMantissaToAPY(asset.borrowRatePerBlock, 365);\n\n  const { t } = useTranslation();\n\n  const isMobile = useIsMobile();\n\n  const hasBorrowIncentives = !!borrowIncentives.length;\n\n  const totalBorrowAPY =\n    borrowIncentives?.reduce((prev, incentive) => {\n      const apy = incentive.borrowSpeed / 1e18;\n      return prev + apy;\n    }, 0) ?? 0;\n\n  const [hovered, setHovered] = useState<number>(-1);\n\n  const handleMouseEnter = (index: number) => setHovered(index);\n  const handleMouseLeave = () => setHovered(-1);\n\n  const displayedBorrowAPY =\n    hovered >= 0\n      ? borrowIncentives[hovered].borrowSpeed / 1e18\n      : totalBorrowAPY;\n\n  const symbol = getSymbol(tokenData, asset);\n\n  return (\n    <>\n      <PoolModal\n        comptrollerAddress={comptrollerAddress}\n        defaultMode={Mode.BORROW}\n        assets={assets}\n        index={index}\n        isOpen={isModalOpen}\n        onClose={closeModal}\n        isBorrowPaused={isPaused}\n      />\n\n      <Row\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        width=\"100%\"\n        px={4}\n        py={1.5}\n        className=\"hover-row\"\n        as=\"button\"\n        onClick={authedOpenModal}\n      >\n        <Row\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          width=\"27%\"\n        >\n          <Avatar\n            bg=\"#FFF\"\n            boxSize=\"37px\"\n            name={symbol}\n            src={\n              tokenData?.logoURL ??\n              \"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"\n            }\n          />\n          <Text fontWeight=\"bold\" fontSize=\"lg\" ml={2} flexShrink={0}>\n            {symbol}\n          </Text>\n        </Row>\n\n        {isMobile ? null : (\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"flex-end\"\n            width=\"27%\"\n          >\n            <Text\n              color={tokenData?.color ?? \"#FF\"}\n              fontWeight=\"bold\"\n              fontSize=\"17px\"\n            >\n              {borrowAPY.toFixed(2)}%\n            </Text>\n\n            {/* Demo Borrow Incentives */}\n            {hasBorrowIncentives && (\n              <Row\n                // ml={1}\n                // mb={.5}\n                crossAxisAlignment=\"center\"\n                mainAxisAlignment=\"flex-end\"\n                py={1}\n              >\n                <Text fontWeight=\"bold\" mr={1}>\n                  +\n                </Text>\n                <AvatarGroup size=\"xs\" max={30} ml={2} mr={2} spacing={1}>\n                  {borrowIncentives?.map((borrowIncentive, i) => {\n                    return (\n                      <CTokenIcon\n                        address={borrowIncentive.rewardToken}\n                        boxSize=\"20px\"\n                        _hover={{\n                          zIndex: 9,\n                          border: \".5px solid white\",\n                          transform: \"scale(1.3);\",\n                        }}\n                        onMouseEnter={() => handleMouseEnter(i)}\n                        onMouseLeave={handleMouseLeave}\n                      />\n                    );\n                  })}\n                </AvatarGroup>\n                <Text\n                  color={\n                    rewardTokensData[borrowIncentives?.[hovered]?.rewardToken]\n                      ?.color ?? \"white\"\n                  }\n                  pl={1}\n                  fontWeight=\"bold\"\n                >\n                  {/* {(supplyIncentive.supplySpeed / 1e18).toString()}%  */}\n                  {displayedBorrowAPY}%\n                </Text>\n              </Row>\n            )}\n\n            {/* Borrow Incentives */}\n            {/* {hasBorrowIncentives && (\n              <Column\n                mainAxisAlignment=\"flex-start\"\n                crossAxisAlignment=\"flex-end\"\n                py={1}\n              >\n                {borrowIncentives?.map((borrowIncentive) => {\n                  return (\n                    <Row\n                      ml={1}\n                      // mb={.5}\n                      crossAxisAlignment=\"center\"\n                      mainAxisAlignment=\"flex-end\"\n                    >\n                      <Text fontWeight=\"bold\" mr={2}>\n                        +\n                      </Text>\n                      <CTokenIcon\n                        address={borrowIncentive.rewardToken}\n                        boxSize=\"20px\"\n                      />\n                      <Text fontWeight=\"bold\" mr={2}></Text>\n                      <Text\n                        color={\n                          rewardTokensData[borrowIncentive.rewardToken].color ??\n                          \"white\"\n                        }\n                        fontWeight=\"bold\"\n                      >\n                        {(borrowIncentive.borrowSpeed / 1e18).toString()}%\n                      </Text>\n                    </Row>\n                  );\n                })}\n              </Column>\n            )} */}\n\n            <SimpleTooltip\n              label={t(\n                \"Total Value Lent (TVL) measures how much of this asset has been supplied in total. TVL does not account for how much of the lent assets have been borrowed, use 'liquidity' to determine the total unborrowed assets lent.\"\n              )}\n            >\n              <Text fontSize=\"sm\">\n                {shortUsdFormatter(asset.totalSupplyUSD)} TVL\n              </Text>\n            </SimpleTooltip>\n\n            {/* Borrow Incentives under APY */}\n            {/* <Column\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"flex-end\"\n              my={1}\n            >\n              {borrowIncentives?.map((borrowIncentive) => {\n                return (\n                  <Row\n                    mainAxisAlignment=\"space-between\"\n                    crossAxisAlignment=\"center\"\n                    w=\"100%\"\n                  >\n                    <Avatar\n                      src={\n                        rewardTokensData[borrowIncentive.rewardToken].logoURL ??\n                        \"\"\n                      }\n                      boxSize=\"20px\"\n                    />\n                    <Text\n                      ml={2}\n                      fontWeight=\"bold\"\n                      color={\n                        rewardTokensData[borrowIncentive.rewardToken].color ??\n                        \"\"\n                      }\n                    >\n                      {(borrowIncentive.borrowSpeed / 1e18).toString()}%\n                    </Text>\n                  </Row>\n                );\n              })}\n            </Column> */}\n          </Column>\n        )}\n\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-end\"\n          width={isMobile ? \"40%\" : \"27%\"}\n        >\n          <Text\n            color={tokenData?.color ?? \"#FFF\"}\n            fontWeight=\"bold\"\n            fontSize=\"17px\"\n          >\n            {smallUsdFormatter(asset.borrowBalanceUSD)}\n          </Text>\n\n          <Text fontSize=\"sm\">\n            {smallUsdFormatter(\n              asset.borrowBalance / 10 ** asset.underlyingDecimals\n            ).replace(\"$\", \"\")}{\" \"}\n            {symbol}\n          </Text>\n        </Column>\n\n        <SimpleTooltip\n          label={t(\n            \"Liquidity is the amount of this asset that is available to borrow (unborrowed). To see how much has been supplied and borrowed in total, navigate to the Pool Info tab.\"\n          )}\n          placement=\"top-end\"\n        >\n          <Box width={isMobile ? \"34%\" : \"20%\"}>\n            <Column\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"flex-end\"\n            >\n              <Text\n                color={tokenData?.color ?? \"#FFF\"}\n                fontWeight=\"bold\"\n                fontSize=\"17px\"\n              >\n                {shortUsdFormatter(asset.liquidityUSD)}\n              </Text>\n\n              <Text fontSize=\"sm\">\n                {shortUsdFormatter(\n                  asset.liquidity / 10 ** asset.underlyingDecimals\n                ).replace(\"$\", \"\")}{\" \"}\n                {symbol}\n              </Text>\n            </Column>\n          </Box>\n        </SimpleTooltip>\n      </Row>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/FusePoolsPage.tsx",
    "content": "import {\n  Avatar,\n  AvatarGroup,\n  Link,\n  Spinner,\n  Text,\n  Box,\n} from \"@chakra-ui/react\";\nimport { Center, Column, Row, useIsMobile } from \"utils/chakraUtils\";\nimport { useTranslation } from \"react-i18next\";\nimport { useRari } from \"context/RariContext\";\nimport { useIsSmallScreen } from \"hooks/useIsSmallScreen\";\nimport { smallUsdFormatter } from \"utils/bigUtils\";\n\nimport DashboardBox from \"../../shared/DashboardBox\";\nimport { Header } from \"../../shared/Header\";\nimport { ModalDivider } from \"../../shared/Modal\";\n\nimport { Link as RouterLink } from \"react-router-dom\";\nimport FuseStatsBar, { WhitelistedIcon } from \"./FuseStatsBar\";\nimport FuseTabBar, { useFilter } from \"./FuseTabBar\";\nimport { useTokenData } from \"hooks/useTokenData\";\n\nimport { filterPoolName } from \"utils/fetchFusePoolData\";\n\nimport { letterScore, usePoolRSS } from \"hooks/useRSS\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\nimport { useFusePools } from \"hooks/fuse/useFusePools\";\nimport Footer from \"components/shared/Footer\";\nimport { memo } from \"react\";\nimport { CTokenIcon } from \"components/shared/CTokenIcon\";\nimport { usePoolIncentives } from \"hooks/rewards/usePoolIncentives\";\n\nexport const useHasCreatedPools = () => {\n  const { filteredPools } = useFusePools(\"created-pools\");\n  return !!filteredPools.length;\n};\n\nconst FusePoolsPage = memo(() => {\n  const { isAuthed } = useRari();\n  const isMobile = useIsSmallScreen();\n\n  return (\n    <>\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        color=\"#FFFFFF\"\n        mx=\"auto\"\n        width={isMobile ? \"100%\" : \"1000px\"}\n        height=\"100%\"\n        px={isMobile ? 4 : 0}\n      >\n        <Header isAuthed={isAuthed} isFuse />\n        <FuseStatsBar />\n\n        <FuseTabBar />\n\n        <DashboardBox width=\"100%\" mt={4}>\n          <PoolList />\n        </DashboardBox>\n\n        <Footer />\n      </Column>\n    </>\n  );\n});\n\nexport default FusePoolsPage;\n\nconst PoolList = () => {\n  const filter = useFilter();\n  const { t } = useTranslation();\n\n  const { filteredPools } = useFusePools(filter);\n  const isMobile = useIsMobile();\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      expand\n    >\n      <Row\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        height=\"45px\"\n        width=\"100%\"\n        flexShrink={0}\n        pl={4}\n        pr={1}\n      >\n        <Text fontWeight=\"bold\" width={isMobile ? \"100%\" : \"40%\"}>\n          {!isMobile ? t(\"Pool Assets\") : t(\"Pool Directory\")}\n        </Text>\n\n        {isMobile ? null : (\n          <>\n            <Text fontWeight=\"bold\" textAlign=\"center\" width=\"13%\">\n              {t(\"Pool Number\")}\n            </Text>\n\n            <Text fontWeight=\"bold\" textAlign=\"center\" width=\"16%\">\n              {t(\"Total Supplied\")}\n            </Text>\n\n            <Text fontWeight=\"bold\" textAlign=\"center\" width=\"16%\">\n              {t(\"Total Borrowed\")}\n            </Text>\n\n            <Text fontWeight=\"bold\" textAlign=\"center\" width=\"15%\">\n              {t(\"Pool Risk Score\")}\n            </Text>\n          </>\n        )}\n      </Row>\n\n      <ModalDivider />\n\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        width=\"100%\"\n        minHeight=\"100px\"\n      >\n        {filteredPools && filteredPools.length ? (\n          filteredPools.map((pool, index) => {\n            return (\n              <PoolRow\n                key={pool.id}\n                poolNumber={pool.id}\n                name={filterPoolName(pool.name)}\n                tvl={pool.suppliedUSD}\n                borrowed={pool.borrowedUSD}\n                tokens={pool.underlyingTokens.map((address, index) => ({\n                  symbol: pool.underlyingSymbols[index],\n                  address,\n                }))}\n                noBottomDivider={index === filteredPools.length - 1}\n                isWhitelisted={pool.whitelistedAdmin}\n                comptroller={pool.comptroller}\n              />\n            );\n          })\n        ) : (\n          <Center h=\"100%\" w=\"100%\" bg=\"transparent\">\n            <Spinner my={8} />\n          </Center>\n        )}\n      </Column>\n    </Column>\n  );\n};\n\nconst PoolRow = ({\n  tokens,\n  poolNumber,\n  tvl,\n  borrowed,\n  name,\n  noBottomDivider,\n  isWhitelisted,\n  comptroller,\n}: {\n  tokens: { symbol: string; address: string }[];\n  poolNumber: number;\n  tvl: number;\n  borrowed: number;\n  name: string;\n  noBottomDivider?: boolean;\n  isWhitelisted: boolean;\n  comptroller: string;\n}) => {\n  const isEmpty = tokens.length === 0;\n\n  const rss = usePoolRSS(poolNumber);\n\n  const rssScore = rss ? letterScore(rss.totalScore) : \"?\";\n\n  const isMobile = useIsMobile();\n\n  const poolIncentives = usePoolIncentives(comptroller);\n  const { hasIncentives } = poolIncentives;\n  if (hasIncentives) {\n    console.log({ poolNumber, poolIncentives });\n  }\n\n  return (\n    <>\n      <Link\n        /* @ts-ignore */\n        as={RouterLink}\n        width=\"100%\"\n        className=\"no-underline\"\n        to={\"/fuse/pool/\" + poolNumber}\n      >\n        <Row\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n          height=\"90px\"\n          className=\"hover-row\"\n          pl={4}\n          pr={1}\n        >\n          <Column\n            pt={2}\n            width={isMobile ? \"100%\" : \"40%\"}\n            height=\"100%\"\n            mainAxisAlignment=\"center\"\n            crossAxisAlignment=\"flex-start\"\n          >\n            {isEmpty ? null : (\n              <SimpleTooltip label={tokens.map((t) => t.symbol).join(\" / \")}>\n                <AvatarGroup size=\"xs\" max={30} mr={2}>\n                  {tokens.map(({ address }) => {\n                    return <CTokenIcon key={address} address={address} />;\n                  })}\n                </AvatarGroup>\n              </SimpleTooltip>\n            )}\n\n            <Row\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"center\"\n              mt={isEmpty ? 0 : 2}\n            >\n              <WhitelistedIcon\n                isWhitelisted={isWhitelisted}\n                mr={2}\n                boxSize={\"15px\"}\n                mb=\"2px\"\n              />\n              <Text>{name}</Text>\n            </Row>\n          </Column>\n\n          {isMobile ? null : (\n            <>\n              <Center height=\"100%\" width=\"13%\">\n                <b>{poolNumber}</b>\n              </Center>\n              <Center height=\"100%\" width=\"16%\">\n                <b>{smallUsdFormatter(tvl)}</b>\n              </Center>\n              <Center height=\"100%\" width=\"16%\">\n                <b>{smallUsdFormatter(borrowed)}</b>\n              </Center>\n              <Center height=\"100%\" width=\"15%\">\n                <SimpleTooltip\n                  label={\n                    \"Underlying RSS: \" +\n                    (rss ? rss.totalScore.toFixed(2) : \"?\") +\n                    \"%\"\n                  }\n                >\n                  <b>{rssScore}</b>\n                </SimpleTooltip>\n              </Center>\n            </>\n          )}\n        </Row>\n      </Link>\n\n      {noBottomDivider ? null : <ModalDivider />}\n    </>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/FuseStatsBar.tsx",
    "content": "import { Heading, Text } from \"@chakra-ui/react\";\nimport { RowOrColumn, Column, Center, Row } from \"utils/chakraUtils\";\nimport { ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useRari } from \"context/RariContext\";\nimport { useIsSmallScreen } from \"hooks/useIsSmallScreen\";\nimport { smallUsdFormatter } from \"utils/bigUtils\";\nimport CaptionedStat from \"components/shared/CaptionedStat\";\nimport DashboardBox from \"components/shared/DashboardBox\";\n\nimport { fetchFuseNumberTVL } from \"hooks/fuse/useFuseTVL\";\nimport { useFuseTotalBorrowAndSupply } from \"hooks/fuse/useFuseTotalBorrowAndSupply\";\n\nimport { APYWithRefreshMovingStat } from \"components/shared/MovingStat\";\nimport { FusePoolData } from \"utils/fetchFusePoolData\";\nimport { CheckCircleIcon, WarningTwoIcon } from \"@chakra-ui/icons\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\n\nconst FuseStatsBar = ({ data }: { data?: FusePoolData }) => {\n  const isMobile = useIsSmallScreen();\n\n  const { t } = useTranslation();\n\n  const { isAuthed, fuse, rari } = useRari();\n\n  const { data: totalBorrowAndSupply } = useFuseTotalBorrowAndSupply();\n\n  return (\n    <RowOrColumn\n      width=\"100%\"\n      isRow={!isMobile}\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      height={isMobile ? \"auto\" : \"125px\"}\n    >\n      <DashboardBox\n        width={isMobile ? \"100%\" : \"50%\"}\n        height={isMobile ? \"auto\" : \"100%\"}\n      >\n        <Column\n          expand\n          mainAxisAlignment=\"center\"\n          crossAxisAlignment={isMobile ? \"center\" : \"flex-start\"}\n          textAlign={isMobile ? \"center\" : \"left\"}\n          p={4}\n          fontSize=\"sm\"\n        >\n          <Row\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n            mb=\"2px\"\n          >\n            {/* Title */}\n            {!!data ? (\n              <WhitelistedIcon isWhitelisted={data.isAdminWhitelisted} mb={1} />\n            ) : null}\n            <Heading size=\"lg\" isTruncated>\n              {data?.name ?? \"Fuse\"}\n            </Heading>\n          </Row>\n\n          {/* Description */}\n          {!!data ? (\n            <Text>\n              This pool has{\" \"}\n              <span style={{ fontWeight: \"bold\" }}>\n                {smallUsdFormatter(data.totalSuppliedUSD)} supplied{\" \"}\n              </span>{\" \"}\n              across{\" \"}\n              <span style={{ fontWeight: \"bold\" }}>\n                {data.assets.length} assets.\n              </span>{\" \"}\n              Fuse is a truly open interest rate protocol. Lend, borrow,\n              and create isolated lending pools with extreme flexibility.\n            </Text>\n          ) : (\n            <Text>\n              Fuse is a truly open interest rate protocol. Lend, borrow,\n              and create isolated lending pools with extreme flexibility.\n            </Text>\n          )}\n        </Column>\n      </DashboardBox>\n\n      <RowOrColumn\n        isRow={!isMobile}\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"flex-start\"\n        height=\"100%\"\n        width={isMobile ? \"100%\" : \"50%\"}\n      >\n        {isAuthed &&\n        totalBorrowAndSupply &&\n        totalBorrowAndSupply.totalSuppliedUSD > 0 ? (\n          <>\n            <StatBox width={isMobile ? \"100%\" : \"50%\"}>\n              <CaptionedStat\n                crossAxisAlignment=\"center\"\n                captionFirst={false}\n                statSize=\"3xl\"\n                captionSize=\"sm\"\n                stat={\n                  totalBorrowAndSupply\n                    ? smallUsdFormatter(totalBorrowAndSupply.totalSuppliedUSD)\n                    : \"$?\"\n                }\n                caption={t(\"Your Supply Balance\")}\n              />\n            </StatBox>\n\n            <StatBox width={isMobile ? \"100%\" : \"50%\"}>\n              <CaptionedStat\n                crossAxisAlignment=\"center\"\n                captionFirst={false}\n                statSize=\"3xl\"\n                captionSize=\"sm\"\n                stat={\n                  totalBorrowAndSupply\n                    ? smallUsdFormatter(totalBorrowAndSupply.totalBorrowedUSD)\n                    : \"$?\"\n                }\n                caption={t(\"Your Borrow Balance\")}\n              />\n            </StatBox>\n          </>\n        ) : (\n          <StatBox width=\"100%\">\n            <APYWithRefreshMovingStat\n              formatStat={smallUsdFormatter}\n              fetchInterval={40000}\n              loadingPlaceholder=\"$?\"\n              apyInterval={100}\n              fetch={() => fetchFuseNumberTVL(rari, fuse)}\n              queryKey={\"fuseTVL\"}\n              apy={0.15}\n              statSize=\"3xl\"\n              captionSize=\"xs\"\n              caption={t(\"Total Value Supplied Across Fuse\")}\n              crossAxisAlignment=\"center\"\n              captionFirst={false}\n            />\n          </StatBox>\n        )}\n      </RowOrColumn>\n    </RowOrColumn>\n  );\n};\n\nexport default FuseStatsBar;\n\nconst StatBox = ({\n  children,\n  ...others\n}: {\n  children: ReactNode;\n  [key: string]: any;\n}) => {\n  const isMobile = useIsSmallScreen();\n\n  return (\n    <DashboardBox\n      height={isMobile ? \"auto\" : \"100%\"}\n      mt={isMobile ? 4 : 0}\n      ml={isMobile ? 0 : 4}\n      {...others}\n    >\n      <Center expand p={4}>\n        {children}\n      </Center>\n    </DashboardBox>\n  );\n};\n\nexport const WhitelistedIcon = ({\n  isWhitelisted,\n  ...boxProps\n}: {\n  isWhitelisted: boolean;\n  [x: string]: any;\n}) => {\n  return (\n    <>\n      <SimpleTooltip\n        label={\n          isWhitelisted\n            ? \"This pool is from a Whitelisted Admin\"\n            : \"This pool is not from a whitelisted admin. Use with caution!\"\n        }\n        placement=\"bottom-end\"\n      >\n        {isWhitelisted ? (\n          <CheckCircleIcon boxSize=\"20px\" mr={3} {...boxProps} />\n        ) : (\n          <WarningTwoIcon\n            boxSize=\"20px\"\n            mr={3}\n            color=\"orange.300\"\n            {...boxProps}\n          />\n        )}\n      </SimpleTooltip>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/FuseTabBar.tsx",
    "content": "import { DeleteIcon, SmallAddIcon } from \"@chakra-ui/icons\";\nimport { ButtonGroup, Input, Link, Text } from \"@chakra-ui/react\";\nimport { RowOrColumn, Row, Center, useWindowSize } from \"utils/chakraUtils\";\nimport { useTranslation } from \"react-i18next\";\nimport { useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { useIsSmallScreen } from \"../../../hooks/useIsSmallScreen\";\nimport DashboardBox from \"../../shared/DashboardBox\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { useHasCreatedPools } from \"./FusePoolsPage\";\n\nconst activeStyle = { bg: \"#FFF\", color: \"#000\" };\n\nconst noop = {};\n\nexport function useFilter() {\n  return new URLSearchParams(useLocation().search).get(\"filter\") ?? undefined;\n}\n\nexport function useIsMediumScreen() {\n  const { width } = useWindowSize();\n  return width < 1150;\n}\n\nconst FuseTabBar = () => {\n  const isMobile = useIsSmallScreen();\n\n  const { t } = useTranslation();\n\n  let { poolId } = useParams();\n\n  let navigate = useNavigate();\n\n  const filter = useFilter();\n  const location = useLocation();\n\n  const hasCreatedPools = useHasCreatedPools();\n\n  return (\n    <DashboardBox width=\"100%\" mt={4} height={isMobile ? \"auto\" : \"65px\"}>\n      <RowOrColumn\n        isRow={!isMobile}\n        expand\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        p={4}\n      >\n        {!poolId ? (\n          <ButtonGroup\n            mr={4}\n            size=\"sm\"\n            isAttached\n            variant=\"outline\"\n            height=\"35px\"\n          >\n            <DashboardBox height=\"35px\">\n              <Row\n                pl={2}\n                expand\n                crossAxisAlignment=\"center\"\n                mainAxisAlignment=\"flex-start\"\n                fontWeight=\"bold\"\n              >\n                <Text flexShrink={0}>{t(\"Search:\")}</Text>\n\n                <Input\n                  value={filter ?? \"\"}\n                  onChange={(event) => {\n                    const value = encodeURIComponent(event.target.value);\n\n                    if (value) {\n                      navigate(\"?filter=\" + value);\n                    } else {\n                      navigate(\"\");\n                    }\n                  }}\n                  width=\"100px\"\n                  height=\"100%\"\n                  ml={2}\n                  placeholder={t(\"USDC, DAI\")}\n                  variant=\"filled\"\n                  size=\"sm\"\n                  _placeholder={{ color: \"#e0e0e0\" }}\n                  _focus={{ bg: \"#282727\" }}\n                  _hover={{ bg: \"#282727\" }}\n                  bg=\"#282727\"\n                  borderRadius={filter ? \"0px\" : \"0px 9px 9px 0px\"}\n                />\n              </Row>\n            </DashboardBox>\n            {filter ? (\n              <DashboardBox bg=\"#282727\" ml={-1}>\n                <Link\n                  /* @ts-ignore */\n                  as={RouterLink}\n                  to=\"\"\n                >\n                  <Center expand pr={2} fontWeight=\"bold\">\n                    <DeleteIcon mb=\"2px\" />\n                  </Center>\n                </Link>\n              </DashboardBox>\n            ) : null}\n          </ButtonGroup>\n        ) : null}\n\n        <TabLink ml={0} route=\"/fuse?filter=my-pools\" text={t(\"My Pools\")} />\n\n        <TabLink route=\"/fuse\" text={t(\"Verified Pools\")} />\n\n        <TabLink\n          route=\"/fuse?filter=unverified-pools\"\n          text={t(\"Unverified Pools\")}\n        />\n\n        {hasCreatedPools && (\n          <TabLink\n            route=\"/fuse?filter=created-pools\"\n            text={t(\"Created Pools\")}\n          />\n        )}\n\n        <TabExternalLink\n          route=\"https://metrics.rari.capital\"\n          text={t(\"Metrics\")}\n        />\n\n        <TabLink route=\"/fuse/liquidations\" text={t(\"Liquidations\")} />\n\n        {poolId ? (\n          <>\n            <DashboardBox\n              {...(!location.pathname.includes(\"info\") ? activeStyle : {})}\n              ml={isMobile ? 0 : 4}\n              mt={isMobile ? 4 : 0}\n              height=\"35px\"\n            >\n              <Link\n                /* @ts-ignore */\n                as={RouterLink}\n                to={`/fuse/pool/${poolId}`}\n                className=\"no-underline\"\n              >\n                <Center expand px={2} fontWeight=\"bold\">\n                  {t(\"Pool #{{poolId}}\", { poolId })}\n                </Center>\n              </Link>\n            </DashboardBox>\n\n            <DashboardBox\n              {...(location.pathname.includes(\"info\") ? activeStyle : {})}\n              ml={isMobile ? 0 : 4}\n              mt={isMobile ? 4 : 0}\n              height=\"35px\"\n            >\n              <Link\n                /* @ts-ignore */\n                as={RouterLink}\n                to={`/fuse/pool/${poolId}/info`}\n                className=\"no-underline\"\n              >\n                <Center expand px={2} fontWeight=\"bold\">\n                  {t(\"Pool #{{poolId}} Info\", { poolId })}\n                </Center>\n              </Link>\n            </DashboardBox>\n          </>\n        ) : null}\n\n        <NewPoolButton />\n      </RowOrColumn>\n    </DashboardBox>\n  );\n};\n\nconst TabLink = ({\n  route,\n  text,\n  ...others\n}: {\n  route: string;\n  text: string;\n  [key: string]: any;\n}) => {\n  const isMobile = useIsSmallScreen();\n\n  const location = useLocation();\n\n  return (\n    <Link\n      /* @ts-ignore */\n      as={RouterLink}\n      className=\"no-underline\"\n      to={route}\n      ml={isMobile ? 0 : 4}\n      mt={isMobile ? 4 : 0}\n      {...others}\n    >\n      <DashboardBox\n        height=\"35px\"\n        {...(route ===\n        location.pathname.replace(/\\/+$/, \"\") + window.location.search\n          ? activeStyle\n          : noop)}\n      >\n        <Center expand px={2} fontWeight=\"bold\">\n          {text}\n        </Center>\n      </DashboardBox>\n    </Link>\n  );\n};\n\nconst TabExternalLink = ({ route, text }: { route: string; text: string }) => {\n  const isMobile = useIsSmallScreen();\n\n  return (\n    <Link\n      className=\"no-underline\"\n      href={route}\n      isExternal\n      ml={isMobile ? 0 : 4}\n      mt={isMobile ? 4 : 0}\n    >\n      <DashboardBox height=\"35px\">\n        <Center expand px={2} fontWeight=\"bold\">\n          {text}\n        </Center>\n      </DashboardBox>\n    </Link>\n  );\n};\n\nconst NewPoolButton = () => {\n  const isMobile = useIsSmallScreen();\n  const { t } = useTranslation();\n\n  const location = useLocation();\n\n  return (\n    <DashboardBox\n      mt={isMobile ? 4 : 0}\n      ml={isMobile ? 0 : \"auto\"}\n      height=\"35px\"\n      {...(\"/fuse/new-pool\" ===\n      location.pathname.replace(/\\/+$/, \"\") + window.location.search\n        ? activeStyle\n        : noop)}\n    >\n      <Link\n        /* @ts-ignore */\n        as={RouterLink}\n        to={`/fuse/new-pool`}\n        className=\"no-underline\"\n      >\n        <Center expand pl={2} pr={3} fontWeight=\"bold\">\n          <SmallAddIcon mr={1} /> {t(\"New Pool\")}\n        </Center>\n      </Link>\n    </DashboardBox>\n  );\n};\n\nexport default FuseTabBar;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/AddAssetModal.tsx",
    "content": "// Chakra and UI\nimport { Modal, ModalContent, ModalOverlay } from \"@chakra-ui/modal\";\nimport { CloseButton } from \"@chakra-ui/react\";\nimport { ModalDivider, MODAL_PROPS } from \"../../../../shared/Modal\";\nimport { Column, Center } from \"utils/chakraUtils\";\nimport SmallWhiteCircle from \"../../../../../static/small-white-circle.png\";\nimport { Heading, Box } from \"@chakra-ui/layout\";\nimport { Image } from \"@chakra-ui/image\";\nimport { Input } from \"@chakra-ui/input\";\nimport DashboardBox, {\n  DASHBOARD_BOX_PROPS,\n} from \"components/shared/DashboardBox\";\n\n// Utils\nimport { USDPricedFuseAsset } from \"utils/fetchFusePoolData\";\n\n// React\nimport { useState } from \"react\";\n\n// Hooks\nimport { useOracleData } from \"hooks/fuse/useOracleData\";\nimport { useTranslation } from \"react-i18next\";\nimport { useRari } from \"context/RariContext\";\nimport {\n  ETH_TOKEN_DATA,\n  useTokenData,\n} from \"hooks/useTokenData\";\n\n// Components\nimport AssetSettings from \"./AssetSettings\";\n\nconst AddAssetModal = ({\n  isOpen,\n  poolID,\n  onClose,\n  poolName,\n  oracleModel,\n  existingAssets,\n  poolOracleAddress,\n  comptrollerAddress,\n}: {\n  comptrollerAddress: string; // Pool's comptroller address.\n  poolOracleAddress: string; // Pool's oracle address.\n  existingAssets: USDPricedFuseAsset[]; // List of exising assets in fuse pool.\n  oracleModel: string | undefined; // Pool's oracle model name.\n  poolName: string; // Used to name assets at deployment. i.e f-USDC-koan.\n  poolID: string; // Fuse pool ID.\n  isOpen: boolean; // Modal config.\n  onClose: () => any; // Modal config.\n}) => {\n  const { t } = useTranslation();\n  const { fuse } = useRari();\n\n  // Will change with user's input\n  const [tokenAddress, _setTokenAddress] = useState<string>(\"\");\n\n  // Get token data. i.e symbol, logo, etc.\n  const tokenData = useTokenData(tokenAddress);\n\n  // Get fuse pool's oracle data. i.e contract, admin, overwriting permissions\n  const oracleData = useOracleData(poolOracleAddress, fuse, oracleModel);\n\n  const isEmpty = tokenAddress.trim() === \"\";\n\n  return (\n    <Modal\n      isOpen={isOpen}\n      onClose={onClose}\n      motionPreset=\"slideInBottom\"\n      isCentered={isEmpty ? true : false}\n      closeOnOverlayClick={false}\n    >\n      <ModalOverlay />\n      <ModalContent\n        {...MODAL_PROPS}\n        width={isEmpty ? \"25%\" : \"50%\"}\n        height={isEmpty ? \"auto\" : \"95%\"}\n        maxWidth=\"50%\"\n        maxHeight=\"100%\"\n        overflowY=\"scroll\"\n      >\n        <Box\n          d=\"flex\"\n          flexDirection=\"row\"\n          width=\"100%\"\n          justifyContent=\"center\"\n          alignItems=\"center\"\n          px={3}\n        >\n          <Box flexBasis=\"10%\" />\n\n          <Heading my={4} ml=\"auto\" fontSize=\"27px\" textAlign=\"center\">\n            {t(\"Add Asset\")}\n          </Heading>\n\n          <Box marginLeft=\"auto\" onClick={onClose} _hover={{ color: \"white\" , transform: \"scale(1.2);\" }}>\n            <CloseButton />\n          </Box>\n        </Box>\n\n        <ModalDivider />\n\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          height=\"100%\"\n        >\n          {!isEmpty ? (\n            <>\n              {tokenData?.logoURL ? (\n                <Image\n                  mt={4}\n                  src={tokenData.logoURL}\n                  boxSize=\"50px\"\n                  borderRadius=\"50%\"\n                  backgroundImage={`url(${SmallWhiteCircle})`}\n                  backgroundSize=\"100% auto\"\n                />\n              ) : null}\n              <Heading\n                my={tokenData?.symbol ? 3 : 6}\n                fontSize=\"22px\"\n                color={tokenData?.color ?? \"#FFF\"}\n              >\n                {tokenData\n                  ? tokenData.name ?? \"Invalid Address!\"\n                  : \"Loading...\"}\n              </Heading>\n            </>\n          ) : null}\n\n          <Center p={4} mt={isEmpty ? 4 : 0} width=\"100%\">\n            <Input\n              width=\"100%\"\n              textAlign=\"center\"\n              placeholder={t(\n                \"Token Address: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n              )}\n              height=\"40px\"\n              variant=\"filled\"\n              size=\"sm\"\n              value={tokenAddress}\n              onChange={(event) => {\n                const address = event.target.value;\n                _setTokenAddress(address);\n              }}\n              {...DASHBOARD_BOX_PROPS}\n              _placeholder={{ color: \"#e0e0e0\" }}\n              _focus={{ bg: \"#121212\" }}\n              _hover={{ bg: \"#282727\" }}\n              bg=\"#282727\"\n            />\n\n            {!existingAssets.some(\n              // If ETH hasn't been added:\n              (asset) => asset.underlyingToken === ETH_TOKEN_DATA.address\n            ) ? (\n              <DashboardBox\n                flexShrink={0}\n                as=\"button\"\n                ml={2}\n                height=\"40px\"\n                borderRadius=\"10px\"\n                px={2}\n                fontSize=\"sm\"\n                fontWeight=\"bold\"\n                onClick={() => _setTokenAddress(ETH_TOKEN_DATA.address)}\n              >\n                <Center expand>ETH</Center>\n              </DashboardBox>\n            ) : null}\n          </Center>\n\n          {tokenData?.symbol ? (\n            <>\n              <Box\n                display=\"flex\"\n                height=\"100%\"\n                width=\"100%\"\n                flexDirection=\"column\"\n                justifyContent=\"flex-start\"\n                alignContent=\"flex-start\"\n                // bg=\"green\"\n              >\n                <AssetSettings\n                  mode=\"Adding\"\n                  comptrollerAddress={comptrollerAddress}\n                  tokenData={tokenData}\n                  tokenAddress={tokenAddress}\n                  poolOracleAddress={poolOracleAddress}\n                  oracleModel={oracleModel}\n                  oracleData={oracleData}\n                  closeModal={onClose}\n                  poolName={poolName}\n                  poolID={poolID}\n                  existingAssets={existingAssets}\n                />\n              </Box>\n            </>\n          ) : null}\n        </Column>\n      </ModalContent>\n    </Modal>\n  );\n};\n\nexport default AddAssetModal;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/AssetConfig.tsx",
    "content": "// Chakra and UI\nimport { Text, Select, useToast } from \"@chakra-ui/react\";\nimport { Column } from \"utils/chakraUtils\";\nimport { DASHBOARD_BOX_PROPS } from \"../../../../shared/DashboardBox\";\nimport { ModalDivider } from \"../../../../shared/Modal\";\nimport { SliderWithLabel } from \"../../../../shared/SliderWithLabel\";\nimport {\n  ConfigRow,\n  SaveButton,\n  testForComptrollerErrorAndSend,\n} from \"../../FusePoolEditPage\";\nimport { QuestionIcon } from \"@chakra-ui/icons\";\nimport { SimpleTooltip } from \"../../../../shared/SimpleTooltip\";\n\n// React\nimport { useTranslation } from \"react-i18next\";\nimport { useQueryClient } from \"react-query\";\n\n// Rari\nimport { useRari } from \"../../../../../context/RariContext\";\nimport Fuse from \"../../../../../fuse-sdk\";\n\n// Hooks\nimport useIRMCurves from \"hooks/fuse/useIRMCurves\";\nimport { createCToken } from \"../../../../../utils/createComptroller\";\nimport { useLiquidationIncentive } from \"hooks/fuse/useLiquidationIncentive\";\n\n// Utils\nimport { handleGenericError } from \"../../../../../utils/errorHandling\";\nimport { createComptroller } from \"../../../../../utils/createComptroller\";\nimport { testForCTokenErrorAndSend } from \"../PoolModal/AmountSelect\";\nimport { isTokenETHOrWETH } from \"utils/tokenUtils\";\n\n// Libraries\nimport BigNumber from \"bignumber.js\";\nimport LogRocket from \"logrocket\";\n\n// Components\nimport IRMChart from \"./IRMChart\";\nimport OracleConfig from \"./OracleConfig/OracleConfig\";\nimport { useAddAssetContext } from \"context/AddAssetContext\";\nimport MarketCapConfigurator from \"../Edit/MarketCapConfigurator\";\n\nconst formatPercentage = (value: number) => value.toFixed(1) + \"%\";\n\nconst AssetConfig = () => {\n  const queryClient = useQueryClient();\n  const { fuse, address } = useRari();\n  const { t } = useTranslation();\n  const toast = useToast();\n\n  const {\n    cTokenData,\n    collateralFactor,\n    setCollateralFactor,\n    cTokenAddress,\n    isBorrowPaused,\n    adminFee,\n    setAdminFee,\n    activeOracleModel,\n    oracleData,\n    tokenAddress,\n    mode,\n    setInterestRateModel,\n    interestRateModel,\n    tokenData,\n    setReserveFactor,\n    reserveFactor,\n    comptrollerAddress,\n  } = useAddAssetContext();\n\n  const curves = useIRMCurves({ interestRateModel, adminFee, reserveFactor });\n\n  // Liquidation incentive. (This is configured at pool level)\n  const liquidationIncentiveMantissa =\n    useLiquidationIncentive(comptrollerAddress);\n\n  const scaleCollateralFactor = (_collateralFactor: number) => {\n    return _collateralFactor / 1e16;\n  };\n\n  const scaleReserveFactor = (_reserveFactor: number) => {\n    return _reserveFactor / 1e16;\n  };\n\n  const scaleAdminFee = (_adminFee: number) => {\n    return _adminFee / 1e16;\n  };\n\n  // Updates asset's Interest Rate Model.\n  const updateInterestRateModel = async () => {\n    const cToken = createCToken(fuse, cTokenAddress!);\n\n    try {\n      await testForCTokenErrorAndSend(\n        cToken.methods._setInterestRateModel(interestRateModel),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateInterestRateModel\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  // Determines if users can borrow an asset or not.\n  const togglePause = async () => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    try {\n      await comptroller.methods\n        ._setBorrowPaused(cTokenAddress, !isBorrowPaused)\n        .send({ from: address });\n\n      LogRocket.track(\"Fuse-PauseToggle\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  // Updates loan to Value ratio.\n  const updateCollateralFactor = async () => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    // 70% -> 0.7 * 1e18\n    const bigCollateralFactor = new BigNumber(collateralFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    try {\n      await testForComptrollerErrorAndSend(\n        comptroller.methods._setCollateralFactor(\n          cTokenAddress,\n          bigCollateralFactor\n        ),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateCollateralFactor\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  // Updated portion of accrued reserves that goes into reserves.\n  const updateReserveFactor = async () => {\n    const cToken = createCToken(fuse, cTokenAddress!);\n\n    // 10% -> 0.1 * 1e18\n    const bigReserveFactor = new BigNumber(reserveFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n    try {\n      await testForCTokenErrorAndSend(\n        cToken.methods._setReserveFactor(bigReserveFactor),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateReserveFactor\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  // Updates asset's admin fee.\n  const updateAdminFee = async () => {\n    const cToken = createCToken(fuse, cTokenAddress!);\n\n    // 5% -> 0.05 * 1e18\n    const bigAdminFee = new BigNumber(adminFee)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    try {\n      await testForCTokenErrorAndSend(\n        cToken.methods._setAdminFee(bigAdminFee),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateAdminFee\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  return (\n    <>\n      <Column\n        width={mode === \"Editing\" ? \"100%\" : \"60%\"}\n        maxWidth={mode === \"Editing\" ? \"100%\" : \"50%\"}\n        height=\"100%\"\n        overflowY=\"auto\"\n        mainAxisAlignment={mode === \"Adding\" ? \"center\" : \"flex-start\"}\n        crossAxisAlignment={mode === \"Adding\" ? \"center\" : \"flex-start\"}\n      >\n        {mode === \"Editing\" ? (\n          <>\n            <MarketCapConfigurator\n              mode=\"Borrow\"\n              tokenData={tokenData}\n              cTokenAddress={cTokenAddress}\n              comptrollerAddress={comptrollerAddress}\n            />\n\n            <ModalDivider />\n\n            <MarketCapConfigurator\n              mode=\"Supply\"\n              tokenData={tokenData}\n              cTokenAddress={cTokenAddress}\n              comptrollerAddress={comptrollerAddress}\n            />\n          </>\n        ) : null}\n\n        <ModalDivider />\n\n        <ConfigRow height=\"35px\">\n          <SimpleTooltip\n            label={t(\n              \"Collateral factor can range from 0-90%, and represents the proportionate increase in liquidity (borrow limit) that an account receives by depositing the asset.\"\n            )}\n          >\n            <Text fontWeight=\"bold\">\n              {t(\"Collateral Factor\")} <QuestionIcon ml={1} mb=\"4px\" />\n            </Text>\n          </SimpleTooltip>\n\n          {cTokenData !== undefined &&\n          mode === \"Editing\" &&\n          collateralFactor !==\n            scaleCollateralFactor(cTokenData?.collateralFactorMantissa) ? (\n            <SaveButton ml={3} onClick={updateCollateralFactor} />\n          ) : null}\n\n          <SliderWithLabel\n            ml=\"auto\"\n            value={collateralFactor}\n            setValue={setCollateralFactor}\n            formatValue={formatPercentage}\n            step={0.5}\n            max={\n              liquidationIncentiveMantissa\n                ? // 100% CF - Liquidation Incentive (ie: 8%) - 5% buffer\n                  100 -\n                  (liquidationIncentiveMantissa.toString() / 1e16 - 100) -\n                  5\n                : 90\n            }\n          />\n        </ConfigRow>\n\n        <ModalDivider />\n\n        {cTokenAddress ? (\n          <ConfigRow>\n            <SimpleTooltip\n              label={t(\"If enabled borrowing this asset will be disabled.\")}\n            >\n              <Text fontWeight=\"bold\">\n                {t(\"Pause Borrowing\")} <QuestionIcon ml={1} mb=\"4px\" />\n              </Text>\n            </SimpleTooltip>\n\n            <SaveButton\n              ml=\"auto\"\n              onClick={togglePause}\n              fontSize=\"xs\"\n              altText={\n                isBorrowPaused ? t(\"Enable Borrowing\") : t(\"Pause Borrowing\")\n              }\n            />\n          </ConfigRow>\n        ) : null}\n\n        <ModalDivider />\n\n        <ConfigRow height=\"35px\">\n          <SimpleTooltip\n            label={t(\n              \"The fraction of interest generated on a given asset that is routed to the asset's Reserve Pool. The Reserve Pool protects lenders against borrower default and liquidation malfunction.\"\n            )}\n          >\n            <Text fontWeight=\"bold\">\n              {t(\"Reserve Factor\")} <QuestionIcon ml={1} mb=\"4px\" />\n            </Text>\n          </SimpleTooltip>\n\n          {cTokenData &&\n          reserveFactor !==\n            scaleReserveFactor(cTokenData.reserveFactorMantissa) ? (\n            <SaveButton ml={3} onClick={updateReserveFactor} />\n          ) : null}\n\n          <SliderWithLabel\n            ml=\"auto\"\n            value={reserveFactor}\n            setValue={setReserveFactor}\n            formatValue={formatPercentage}\n            max={50}\n          />\n        </ConfigRow>\n        <ModalDivider />\n\n        <ConfigRow height=\"35px\">\n          <SimpleTooltip\n            label={t(\n              \"The fraction of interest generated on a given asset that is routed to the asset's admin address as a fee.\"\n            )}\n          >\n            <Text fontWeight=\"bold\">\n              {t(\"Admin Fee\")} <QuestionIcon ml={1} mb=\"4px\" />\n            </Text>\n          </SimpleTooltip>\n\n          {cTokenData &&\n          adminFee !== scaleAdminFee(cTokenData.adminFeeMantissa) ? (\n            <SaveButton ml={3} onClick={updateAdminFee} />\n          ) : null}\n\n          <SliderWithLabel\n            ml=\"auto\"\n            value={adminFee}\n            setValue={setAdminFee}\n            formatValue={formatPercentage}\n            max={30}\n          />\n        </ConfigRow>\n\n        <ModalDivider />\n\n        {(activeOracleModel === \"MasterPriceOracleV2\" ||\n          activeOracleModel === \"MasterPriceOracleV3\") &&\n          oracleData !== undefined &&\n          !isTokenETHOrWETH(tokenAddress) &&\n          mode === \"Editing\" && (\n            <>\n              <OracleConfig />\n\n              <ModalDivider />\n            </>\n          )}\n\n        <ModalDivider />\n\n        <ConfigRow>\n          <SimpleTooltip\n            label={t(\n              \"The interest rate model chosen for an asset defines the rates of interest for borrowers and suppliers at different utilization levels.\"\n            )}\n          >\n            <Text fontWeight=\"bold\">\n              {t(\"Interest Model\")} <QuestionIcon ml={1} mb=\"4px\" />\n            </Text>\n          </SimpleTooltip>\n\n          <Select\n            {...DASHBOARD_BOX_PROPS}\n            ml=\"auto\"\n            borderRadius=\"7px\"\n            fontWeight=\"bold\"\n            _focus={{ outline: \"none\" }}\n            width=\"260px\"\n            value={interestRateModel.toLowerCase()}\n            onChange={(event) => setInterestRateModel(event.target.value)}\n          >\n            {Object.entries(\n              Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n            ).map(([key, value]) => {\n              return (\n                <option\n                  className=\"black-bg-option\"\n                  value={value.toLowerCase()}\n                  key={key}\n                >\n                  {key}\n                </option>\n              );\n            })}\n          </Select>\n\n          {cTokenData &&\n          cTokenData.interestRateModelAddress.toLowerCase() !==\n            interestRateModel.toLowerCase() ? (\n            <SaveButton\n              height=\"40px\"\n              borderRadius=\"7px\"\n              onClick={updateInterestRateModel}\n            />\n          ) : null}\n        </ConfigRow>\n\n        {mode === \"Editing\" && (\n          <IRMChart curves={curves} tokenData={tokenData} />\n        )}\n      </Column>\n\n      {mode === \"Adding\" ? (\n        <Column\n          width=\"40%\"\n          height=\"100%\"\n          overflowY=\"auto\"\n          mainAxisAlignment={mode === \"Adding\" ? \"center\" : \"flex-start\"}\n          crossAxisAlignment={mode === \"Adding\" ? \"center\" : \"flex-start\"}\n        >\n          <IRMChart curves={curves} tokenData={tokenData} />\n          <Text textAlign=\"center\">\n            {fuse\n              .identifyInterestRateModelName(interestRateModel)\n              .replace(\"_\", \" \")}\n          </Text>\n        </Column>\n      ) : null}\n    </>\n  );\n};\n\nexport default AssetConfig;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/AssetSettings.tsx",
    "content": "// Chakra and UI\nimport { Heading, Spinner, useToast } from \"@chakra-ui/react\";\nimport { Column, Center, RowOrColumn, Row } from \"utils/chakraUtils\";\nimport { Fade } from \"@chakra-ui/react\";\n\n// React\nimport { useEffect, useState, useMemo, createContext, useContext } from \"react\";\n\n// React Query\nimport { useQueryClient } from \"react-query\";\n\n// Rari\nimport Fuse from \"../../../../../fuse-sdk\";\nimport { useRari } from \"../../../../../context/RariContext\";\n\n// Hooks\nimport { ETH_TOKEN_DATA, TokenData } from \"../../../../../hooks/useTokenData\";\nimport { createOracle } from \"../../../../../utils/createComptroller\";\nimport { CTokenData, useCTokenData } from \"hooks/fuse/useCTokenData\";\nimport { OracleDataType } from \"hooks/fuse/useOracleData\";\nimport useIRMCurves from \"hooks/fuse/useIRMCurves\";\n\n// Utils\nimport { handleGenericError } from \"../../../../../utils/errorHandling\";\nimport { USDPricedFuseAsset } from \"../../../../../utils/fetchFusePoolData\";\nimport { isTokenETHOrWETH } from \"utils/tokenUtils\";\n\n// Libraries\nimport BigNumber from \"bignumber.js\";\nimport LogRocket from \"logrocket\";\nimport { useIsMediumScreen } from \"../../FuseTabBar\";\n\n// Components\nimport DeployButton from \"./DeployButton\";\nimport AssetConfig from \"./AssetConfig\";\nimport Screen1 from \"./Screens/Screen1\";\nimport Screen2 from \"./Screens/Screen2\";\nimport Screen3 from \"./Screens/Screen3\";\nimport { AddAssetContextData, AddAssetContext } from \"context/AddAssetContext\";\n\nconst SimpleDeployment = [\n  \"Configuring your Fuse pool's Master Price Oracle\",\n  \"Configuring your Fuse pool to support new asset market\",\n  \"All Done!\",\n];\n\nconst UniSwapV3DeploymentSimple = [\n  \"Checking for pair's cardinality\",\n  \"Increasing Uniswap V3 pair cardinality\",\n  \"Deploying Uniswap V3 Twap Oracle\",\n  \"Configuring your Fuse pool's Master Price Oracle\",\n  \"Configuring your Fuse pool to support new asset market\",\n  \"All Done!\",\n];\n\nexport type RETRY_FLAG = 1 | 2 | 3 | 4 | 5;\n\nconst AssetSettings = ({\n  mode,\n  poolID,\n  poolName,\n  tokenData,\n  closeModal,\n  oracleData,\n  oracleModel,\n  tokenAddress,\n  cTokenAddress,\n  existingAssets,\n  poolOracleAddress,\n  comptrollerAddress,\n}: {\n  comptrollerAddress: string; // Fuse pool's comptroller address\n  poolOracleAddress: string; // Fuse pool's oracle address\n  tokenAddress: string; // Underlying token's addres. i.e. USDC, DAI, etc.\n  oracleModel: string | undefined; // Fuse pool's oracle model name. i.e MasterPrice, Chainlink, etc.\n  oracleData: OracleDataType | undefined; // Fuse pool's oracle contract, admin, overwriting permissions.\n  tokenData: TokenData; // Token's data i.e. symbol, logo, css color, etc.\n  poolName: string; // Fuse pool's name.\n  poolID: string; // Fuse pool's ID.\n\n  // Only for editing mode\n  cTokenAddress?: string; // CToken for Underlying token. i.e f-USDC-4\n\n  // Only for add asset modal\n  existingAssets?: USDPricedFuseAsset[]; // A list of assets in the pool\n\n  // Modal config\n  closeModal: () => any;\n  mode: \"Editing\" | \"Adding\";\n}) => {\n  const toast = useToast();\n  const { fuse, address } = useRari();\n  const queryClient = useQueryClient();\n  const isMobile = useIsMediumScreen();\n\n  // Component state\n  const [isDeploying, setIsDeploying] = useState(false);\n\n  // Asset's general configurations.\n  const [adminFee, setAdminFee] = useState(0);\n  const [reserveFactor, setReserveFactor] = useState(10);\n  const [isBorrowPaused, setIsBorrowPaused] = useState(false);\n  const [collateralFactor, setCollateralFactor] = useState(50);\n\n  const [interestRateModel, setInterestRateModel] = useState(\n    Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n      .JumpRateModel_Cream_Stables_Majors\n  );\n\n  const curves = useIRMCurves({ interestRateModel, adminFee, reserveFactor });\n\n  // Asset's Oracle Configuration\n  const [oracleTouched, setOracleTouched] = useState(false);\n  const [activeOracleModel, setActiveOracleModel] = useState<string>(\"\"); // Will store the oracle's model selected for this asset. i.e. Rari Master Price Oracle, Custome Oracle, etc.\n  const [oracleAddress, setOracleAddress] = useState<string>(\"\"); // Will store the actual address of the oracle.\n\n  // Uniswap V3 base token oracle config - these following lines are used only\n  // if you choose Uniswap V3 Twap Oracle as the asset's oracle.\n  const [feeTier, setFeeTier] = useState<number>(0);\n  const [uniV3BaseTokenAddress, setUniV3BaseTokenAddress] =\n    useState<string>(\"\"); // This will store the pair's base token.\n  const [uniV3BaseTokenOracle, setUniV3BaseTokenOracle] = useState<string>(\"\"); // This will store the oracle chosen for the uniV3BaseTokenAddress.\n  const [baseTokenActiveOracleName, setBaseTokenActiveOracleName] =\n    useState<string>(\"\");\n  const [uniV3BaseTokenHasOracle, setUniV3BaseTokenHasOracle] =\n    useState<boolean>(false); // Will let us know if fuse pool's oracle has a price feed for the pair's base token.\n\n  // This will be used to index whitelistPools array (fetched from the graph.)\n  // It also helps us know if user has selected anything or not. If they have, detail fields are shown.\n  const [activeUniSwapPair, setActiveUniSwapPair] = useState<string>(\"\");\n\n  // If uniV3BaseTokenAddress doesn't have an oracle in the fuse pool's oracle, then show the form\n  // Or if the baseToken is weth then dont show form because we already have a hardcoded oracle for it\n  const shouldShowUniV3BaseTokenOracleForm = useMemo(\n    () =>\n      !!uniV3BaseTokenAddress &&\n      !uniV3BaseTokenHasOracle &&\n      !isTokenETHOrWETH(uniV3BaseTokenAddress) &&\n      (activeOracleModel === \"Uniswap_V3_Oracle\" ||\n        activeOracleModel === \"Uniswap_V2_Oracle\" ||\n        activeOracleModel === \"SushiSwap_Oracle\"),\n    [uniV3BaseTokenHasOracle, uniV3BaseTokenAddress, activeOracleModel]\n  );\n\n  // If you choose a UniV3 Pool as the oracle, check if fuse pool's oracle can get a price for uniV3BaseTokenAddress\n  useEffect(() => {\n    if (\n      !!uniV3BaseTokenAddress &&\n      !isTokenETHOrWETH(uniV3BaseTokenAddress) &&\n      !!oracleData &&\n      typeof oracleData !== \"string\"\n    ) {\n      oracleData.oracleContract.methods\n        .price(uniV3BaseTokenAddress)\n        .call()\n        .then((price: string) => {\n          // if you're able to get a price for this asset then\n          return parseFloat(price) > 0\n            ? setUniV3BaseTokenHasOracle(true)\n            : setUniV3BaseTokenHasOracle(false);\n        })\n        .catch((err: any) => {\n          console.log(\"Could not fetch price using pool's oracle\");\n          setUniV3BaseTokenHasOracle(false);\n        });\n    }\n  }, [uniV3BaseTokenAddress, oracleData, setUniV3BaseTokenHasOracle]);\n\n  // Sharad: New stuff  - to skip oracle step if possible\n  const [defaultOracle, setDefaultOracle] = useState<string>(\n    ETH_TOKEN_DATA.address\n  );\n  const [customOracleForToken, setCustomOracleForToken] = useState<string>(\n    ETH_TOKEN_DATA.address\n  );\n  const [priceForAsset, setPriceForAsset] = useState<undefined | number>();\n\n  const hasDefaultOracle = useMemo(\n    () => defaultOracle !== ETH_TOKEN_DATA.address,\n    [defaultOracle]\n  );\n\n  const hasCustomOracleForToken = useMemo(\n    () => customOracleForToken !== ETH_TOKEN_DATA.address,\n    [customOracleForToken]\n  );\n\n  const hasPriceForAsset = useMemo(\n    () => !!priceForAsset && priceForAsset > 0,\n    [priceForAsset]\n  );\n\n  // For this asset, check for a defaultOracle, customOracle, and Pool MPO price for this token\n  useEffect(() => {\n    // If its a legacy oracle (type === string) then we cant create a MasterPriceOracle isntance for it and the user wont even be able to configure the oracle.\n    if (!!oracleData && typeof oracleData !== \"string\") {\n      const mpo = createOracle(poolOracleAddress, fuse, \"MasterPriceOracle\");\n\n      // 1. Check if it has a default oracle\n      mpo.methods\n        .defaultOracle()\n        .call()\n        .then((defaultOracle: string) => {\n          // const defaultOracle = createOracle(defaultOracle, fuse, \"MasterPriceOracle\");\n          setDefaultOracle(defaultOracle);\n          return mpo.methods.oracles(tokenAddress).call();\n        })\n        .then((oracleForToken: string) => {\n          // 2.) Check for Custom oracle\n          setCustomOracleForToken(oracleForToken);\n          return mpo.methods.price(tokenAddress).call();\n        })\n        .then((priceForAsset: string) => {\n          // 3.) Check for price\n          console.log({ priceForAsset });\n          setPriceForAsset(parseFloat(priceForAsset));\n        })\n        .catch((err: any) => {\n          console.error(err);\n        });\n    }\n  }, [oracleData, fuse, tokenAddress, poolOracleAddress]);\n\n  // Modal Pages\n  const [stage, setStage] = useState<number>(1);\n\n  const handleSetStage = (incr: number) => {\n    const newStage = stage + incr;\n\n    // increment stage\n    if (incr > 0) {\n      if (isTokenETHOrWETH(tokenAddress) && newStage === 2) {\n        setStage(3);\n      } else setStage(newStage);\n    }\n\n    // decrement (previous page)\n    else if (incr < 0) {\n      if (isTokenETHOrWETH(tokenAddress) && newStage === 2) {\n        setStage(1);\n      } else setStage(newStage);\n    }\n  };\n\n  // Transaction Stepper\n  const [activeStep, setActiveStep] = useState<number>(0);\n\n  // Retry Flag - start deploy function from here\n  const [retryFlag, setRetryFlag] = useState<RETRY_FLAG>(1);\n  const [needsRetry, setNeedsRetry] = useState<boolean>(false);\n\n  // Set transaction steps based on type of Oracle deployed\n  const steps: string[] =\n    activeOracleModel === \"Rari_Default_Oracle\" ||\n    activeOracleModel === \"Chainlink_Oracle\"\n      ? SimpleDeployment\n      : activeOracleModel === \"Uniswap_V3_Oracle\"\n      ? UniSwapV3DeploymentSimple\n      : SimpleDeployment;\n\n  const increaseActiveStep = (step: string) => {\n    setActiveStep(steps.indexOf(step));\n  };\n\n  const preDeployValidate = (oracleAddressToUse: string) => {\n    // If pool already contains this asset:\n    if (\n      existingAssets!.some(\n        (asset) => asset.underlyingToken === tokenData.address\n      )\n    ) {\n      toast({\n        title: \"Error!\",\n        description: \"You have already added this asset to this pool.\",\n        status: \"error\",\n        duration: 2000,\n        isClosable: true,\n        position: \"top-right\",\n      });\n\n      throw new Error(\"You have already added this asset to this pool.\");\n    }\n\n    // If you have not chosen an oracle\n    if (!isTokenETHOrWETH(tokenAddress)) {\n      if (oracleAddressToUse === \"\") {\n        toast({\n          title: \"Error!\",\n          description: \"Please choose a valid oracle for this asset\",\n          status: \"error\",\n          duration: 2000,\n          isClosable: true,\n          position: \"top-right\",\n        });\n\n        throw new Error(\"Please choose a valid oracle for this asset\");\n      }\n    }\n  };\n\n  const checkUniV3Oracle = async () => {\n    // If this oracle is set in the optional form (only if u have a univ3pair and the base token isnt in the oracle)\n    // Then u have to deploy the base token )\n\n    // Check for observation cardinality and fix if necessary\n    const shouldPrime = await fuse.checkCardinality(oracleAddress);\n\n    if (shouldPrime) {\n      increaseActiveStep(\"Increasing Uniswap V3 pair cardinality\");\n\n      await fuse.primeUniswapV3Oracle(oracleAddress, { from: address });\n    }\n  };\n\n  const deployUniV3Oracle = async () => {\n    increaseActiveStep(\"Deploying Uniswap V3 Twap Oracle\");\n\n    // alert(\"deploying univ3twapOracle\");\n\n    console.log(\"deployUniV3Oracle\", {\n      feeTier,\n      uniV3BaseTokenAddress,\n      address,\n      deployPriceOracle: fuse.deployPriceOracle,\n    });\n\n    // Deploy UniV3 oracle\n    const oracleAddressToUse = await fuse.deployPriceOracle(\n      \"UniswapV3TwapPriceOracleV2\",\n      { feeTier, baseToken: uniV3BaseTokenAddress },\n      { from: address }\n    );\n\n    // alert(\"finished univ3twapOracle \" + oracleAddressToUse);\n\n    console.log({ oracleAddressToUse });\n\n    return oracleAddressToUse;\n  };\n\n  // Deploy Oracle\n  const deployUniV2Oracle = async () =>\n    await fuse.deployPriceOracle(\n      \"UniswapTwapPriceOracleV2\",\n      { baseToken: uniV3BaseTokenAddress },\n      { from: address }\n    );\n\n  const addOraclesToMasterPriceOracle = async (oracleAddressToUse: string) => {\n    /** Configure the pool's MasterPriceOracle  **/\n    increaseActiveStep(\"Configuring your Fuse pool's Master Price Oracle\");\n\n    // Instantiate Fuse Pool's Oracle contract (Always \"MasterPriceOracle\")\n    const poolOracleContract = createOracle(\n      poolOracleAddress,\n      fuse,\n      \"MasterPriceOracle\"\n    );\n\n    const tokenArray = shouldShowUniV3BaseTokenOracleForm\n      ? [tokenAddress, uniV3BaseTokenAddress] // univ3 only\n      : [tokenAddress];\n\n    const oracleAddress = shouldShowUniV3BaseTokenOracleForm\n      ? [oracleAddressToUse, uniV3BaseTokenOracle] // univ3 only\n      : [oracleAddressToUse];\n\n    const hasOracles = await Promise.all(\n      tokenArray.map(async (tokenAddr) => {\n        const address: string = await poolOracleContract.methods\n          .oracles(tokenAddr)\n          .call();\n\n        // if address  is EmptyAddress then there is no oracle for this token\n        return !(address === \"0x0000000000000000000000000000000000000000\");\n      })\n    );\n\n    const tokenHasOraclesInPool = hasOracles.some((x) => !!x);\n\n    console.log({\n      hasOracles,\n      tokenArray,\n      oracleAddress,\n      tokenHasOraclesInPool,\n    });\n\n    if (!!tokenHasOraclesInPool) return;\n\n    const tx = await poolOracleContract.methods\n      .add(tokenArray, oracleAddress)\n      .send({ from: address });\n\n    toast({\n      title: \"You have successfully configured the oracle for this asset!\",\n      description:\n        \"Oracle will now point to the new selected address. Now, lets add you asset to the pool.\",\n      status: \"success\",\n      duration: 2000,\n      isClosable: true,\n      position: \"top-right\",\n    });\n  };\n\n  const deployAssetToPool = async () => {\n    increaseActiveStep(\n      \"Configuring your Fuse pool to support new asset market\"\n    );\n\n    // 50% -> 0.5 * 1e18\n    const bigCollateralFactor = new BigNumber(collateralFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    // 10% -> 0.1 * 1e18\n    const bigReserveFactor = new BigNumber(reserveFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    // 5% -> 0.05 * 1e18\n    const bigAdminFee = new BigNumber(adminFee)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    const conf: any = {\n      underlying: tokenData.address,\n      comptroller: comptrollerAddress,\n      interestRateModel,\n      initialExchangeRateMantissa: fuse.web3.utils.toBN(1e18),\n\n      // Ex: BOGGED USDC\n      name: poolName + \" \" + tokenData.name,\n      // Ex: fUSDC-456\n      symbol: \"f\" + tokenData.symbol + \"-\" + poolID,\n      decimals: 8,\n    };\n\n    console.log({\n      conf,\n      bigCollateralFactor,\n      bigReserveFactor,\n      bigAdminFee,\n      address,\n    });\n\n    await fuse.deployAsset(\n      conf,\n      bigCollateralFactor,\n      bigReserveFactor,\n      bigAdminFee,\n      { from: address },\n      // TODO: Disable this. This bypasses the price feed check. Only using now because only trusted partners are deploying assets.\n      true\n    );\n\n    increaseActiveStep(\"All Done!\");\n  };\n\n  // Deploy Asset!\n  const deploy = async () => {\n    let oracleAddressToUse = oracleAddress;\n    try {\n      preDeployValidate(oracleAddressToUse);\n    } catch (err) {\n      return;\n    }\n\n    setIsDeploying(true);\n\n    let _retryFlag = retryFlag;\n\n    try {\n      // It should be 1 if we haven't had to retry anything\n\n      /** IF UNISWAP V3 ORACLE **/\n      if (_retryFlag === 1) {\n        setNeedsRetry(false);\n        if (activeOracleModel === \"Uniswap_V3_Oracle\") {\n          console.log(\"preCheck\");\n          await checkUniV3Oracle();\n          console.log(\"postCheck\");\n        }\n        _retryFlag = 2; // set it to two after we fall through step 1\n      }\n\n      /** IF UNISWAP V3 ORACLE **/\n      if (_retryFlag === 2) {\n        setNeedsRetry(false);\n        if (activeOracleModel === \"Uniswap_V3_Oracle\") {\n          console.log(\"predeploy\");\n          oracleAddressToUse = await deployUniV3Oracle();\n          console.log(\"postDeploy\", { oracleAddressToUse });\n        }\n        _retryFlag = 3;\n      }\n\n      /** IF UNISWAP V2 ORACLE **/\n      if (_retryFlag === 3) {\n        setNeedsRetry(false);\n        if (activeOracleModel === \"Uniswap_V2_Oracle\") {\n          oracleAddressToUse = await deployUniV2Oracle();\n        }\n        _retryFlag = 4;\n      }\n\n      /**  CONFIGURE MASTERPRICEORACLE **/\n      // You dont need to configure if your asset is ETH / WETH\n      // You dont need to configure if a default oracle is available and you have chosen it\n\n      if (_retryFlag === 4) {\n        setNeedsRetry(false);\n        if (\n          !isTokenETHOrWETH(tokenAddress) &&\n          (oracleModel === \"MasterPriceOracleV3\" ||\n            oracleModel === \"MasterPriceOracleV2\") &&\n          oracleAddress !== defaultOracle // If you have not selected the default oracle you will have to configure.\n        ) {\n          // alert(\"addOraclesToMasterPriceOracle\");\n          await addOraclesToMasterPriceOracle(oracleAddressToUse);\n        }\n        _retryFlag = 5;\n      }\n\n      /** DEPLOY ASSET  **/\n      if (_retryFlag === 5) {\n        setNeedsRetry(false);\n\n        await deployAssetToPool();\n\n        LogRocket.track(\"Fuse-DeployAsset\");\n\n        queryClient.refetchQueries();\n        // Wait 2 seconds for refetch and then close modal.\n        // We do this instead of waiting the refetch because some refetches take a while or error out and we want to close now.\n        await new Promise((resolve) => setTimeout(resolve, 2000));\n\n        toast({\n          title: \"You have successfully added an asset to this pool!\",\n          description: \"You may now lend and borrow with this asset.\",\n          status: \"success\",\n          duration: 2000,\n          isClosable: true,\n          position: \"top-right\",\n        });\n      }\n\n      closeModal();\n    } catch (e) {\n      handleGenericError(e, toast);\n      setRetryFlag(_retryFlag);\n      console.log({ _retryFlag });\n      setNeedsRetry(true);\n    }\n  };\n\n  // Update values on refetch!\n  const cTokenData = useCTokenData(comptrollerAddress, cTokenAddress);\n\n  useEffect(() => {\n    if (cTokenData) {\n      setIsBorrowPaused(cTokenData.isPaused);\n      setAdminFee(cTokenData.adminFeeMantissa / 1e16);\n      setReserveFactor(cTokenData.reserveFactorMantissa / 1e16);\n      setInterestRateModel(cTokenData.interestRateModelAddress);\n      setCollateralFactor(cTokenData.collateralFactorMantissa / 1e16);\n    }\n  }, [cTokenData]);\n\n  const args2: AddAssetContextData = {\n    mode,\n    isDeploying,\n    setIsDeploying,\n    adminFee,\n    setAdminFee,\n    reserveFactor,\n    setReserveFactor,\n    isBorrowPaused,\n    setIsBorrowPaused,\n    collateralFactor,\n    setCollateralFactor,\n    interestRateModel,\n    setInterestRateModel,\n    curves,\n    oracleTouched,\n    setOracleTouched,\n    activeOracleModel,\n    setActiveOracleModel,\n    oracleAddress,\n    setOracleAddress,\n    feeTier,\n    setFeeTier,\n    uniV3BaseTokenAddress,\n    setUniV3BaseTokenAddress: setUniV3BaseTokenAddress,\n    uniV3BaseTokenOracle,\n    setUniV3BaseTokenOracle,\n    baseTokenActiveOracleName,\n    setBaseTokenActiveOracleName,\n    uniV3BaseTokenHasOracle,\n    setUniV3BaseTokenHasOracle,\n    activeUniSwapPair,\n    setActiveUniSwapPair,\n    shouldShowUniV3BaseTokenOracleForm,\n    defaultOracle,\n    setDefaultOracle,\n    customOracleForToken,\n    setCustomOracleForToken,\n    priceForAsset,\n    setPriceForAsset,\n    hasDefaultOracle,\n    hasCustomOracleForToken,\n    hasPriceForAsset,\n    stage,\n    setStage,\n    handleSetStage,\n    activeStep,\n    setActiveStep,\n    increaseActiveStep,\n    retryFlag,\n    setRetryFlag,\n    needsRetry,\n    setNeedsRetry,\n    cTokenData,\n    cTokenAddress,\n    oracleData,\n    poolOracleAddress,\n    poolOracleModel: oracleModel,\n    tokenData,\n    tokenAddress,\n    comptrollerAddress,\n  };\n\n  if (mode === \"Editing\")\n    return (\n      <AddAssetContext.Provider value={args2}>\n        <AssetConfig />\n      </AddAssetContext.Provider>\n    );\n\n  return (\n    cTokenAddress ? cTokenData?.cTokenAddress === cTokenAddress : true\n  ) ? (\n    <AddAssetContext.Provider value={args2}>\n      <Column\n        mainAxisAlignment=\"center\"\n        crossAxisAlignment=\"center\"\n        height=\"100%\"\n        minHeight=\"100%\"\n      >\n        <Row\n          mainAxisAlignment={\"center\"}\n          crossAxisAlignment={\"center\"}\n          w=\"100%\"\n          flexBasis={\"10%\"}\n          // bg=\"green\"\n        >\n          <Title stage={stage} />\n        </Row>\n        <RowOrColumn\n          maxHeight=\"70%\"\n          isRow={!isMobile}\n          crossAxisAlignment={stage < 3 ? \"flex-start\" : \"center\"}\n          mainAxisAlignment={stage < 3 ? \"flex-start\" : \"center\"}\n          height={!isDeploying ? \"70%\" : \"60%\"}\n          width=\"100%\"\n          overflowY=\"auto\"\n          flexBasis={\"80%\"}\n          flexGrow={1}\n          // bg=\"red\"\n        >\n          {stage === 1 ? (\n            <Column\n              width=\"100%\"\n              height=\"100%\"\n              d=\"flex\"\n              direction=\"row\"\n              mainAxisAlignment=\"center\"\n              crossAxisAlignment=\"center\"\n              alignItems=\"center\"\n              justifyContent=\"center\"\n            >\n              <Screen1 />\n            </Column>\n          ) : stage === 2 ? (\n            <Row\n              width=\"100%\"\n              height=\"100%\"\n              d=\"flex\"\n              mainAxisAlignment=\"center\"\n              crossAxisAlignment=\"center\"\n              alignItems=\"center\"\n              justifyContent=\"center\"\n              // bg=\"aqua\"\n            >\n              <Screen2 mode=\"Adding\" />\n            </Row>\n          ) : (\n            <Screen3 />\n            // <Heading>SCREEN3</Heading>\n          )}\n        </RowOrColumn>\n        <DeployButton steps={steps} deploy={deploy} />\n        {/* {needsRetry && <Button onClick={deploy}>Retry</Button>} */}\n      </Column>\n    </AddAssetContext.Provider>\n  ) : (\n    <Center expand>\n      <Spinner my={8} />\n    </Center>\n  );\n};\n\nexport default AssetSettings;\n\nconst Title = ({ stage }: { stage: number }) => {\n  return (\n    <>\n      <Fade\n        in={stage === 1}\n        unmountOnExit\n        style={{ background: \"transparent\" }}\n      >\n        <Heading size=\"md\"> Configure Interest Rate Model </Heading>\n      </Fade>\n      <Fade\n        in={stage === 2}\n        unmountOnExit\n        style={{ background: \"transparent\" }}\n      >\n        <Heading size=\"md\"> Configure Oracle </Heading>\n      </Fade>\n      <Fade\n        in={stage === 3}\n        unmountOnExit\n        style={{ background: \"transparent\" }}\n      >\n        <Heading size=\"md\"> Asset Config Summary </Heading>\n      </Fade>\n    </>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/DeployButton.tsx",
    "content": "// Chakra and UI\nimport { Button } from \"@chakra-ui/button\";\nimport { Center } from \"@chakra-ui/react\";\nimport { Box } from \"@chakra-ui/layout\";\n\n// Rari\nimport { useRari } from \"../../../../../context/RariContext\";\n\n// Hooks\nimport { useTranslation } from \"react-i18next\";\n\n// Components\nimport TransactionStepper from \"components/shared/TransactionStepper\";\nimport { Column } from \"utils/chakraUtils\";\nimport { useIsMediumScreen } from \"../../FuseTabBar\";\nimport { useAddAssetContext } from \"context/AddAssetContext\";\n\nconst DeployButton = ({ steps, deploy }: { deploy: any; steps: any }) => {\n  const { t } = useTranslation();\n  const { fuse } = useRari();\n\n  const {\n    mode,\n    stage,\n    tokenData,\n    activeStep,\n    isDeploying,\n    oracleAddress,\n    handleSetStage,\n    uniV3BaseTokenOracle,\n    shouldShowUniV3BaseTokenOracleForm,\n    needsRetry,\n    // New stuff\n    hasPriceForAsset,\n    hasDefaultOracle,\n    defaultOracle,\n  } = useAddAssetContext();\n\n  // If user hasnt edited the form and we have a default oracle price for this asset\n  const hasDefaultOraclePriceAndHasntEdited =\n    hasDefaultOracle && hasPriceForAsset && oracleAddress === defaultOracle;\n\n  // This checks whether the user can proceed in the Oracle Configuration step.\n  const checkUserOracleConfigurationState = (\n    oracleAddress: string,\n    shouldShowUniV3BaseTokenOracleForm: boolean,\n    uniV3BaseTokenOracle: string\n  ) => {\n    // If the user needs to configure a BaseToken Oracle for their Univ3 Pair, then disable until its set\n    if (shouldShowUniV3BaseTokenOracleForm) {\n      return fuse.web3.utils.isAddress(uniV3BaseTokenOracle);\n    }\n\n    // NEW: If this Fuse pool has a default oracle and price\n    // AND if the oracle is not set yet in the UI, let them continue\n    console.log(\"checkUserOracleConfigurationState\", {\n      hasDefaultOracle,\n      hasPriceForAsset,\n      oracleAddress,\n      hasDefaultOraclePriceAndHasntEdited,\n    });\n\n    if (hasDefaultOraclePriceAndHasntEdited) return true;\n\n    // If the oracle address is not set at all, then disable until it is set.\n    return fuse.web3.utils.isAddress(oracleAddress);\n  };\n\n  const shouldNextButtonBeDisabled = !checkUserOracleConfigurationState(\n    oracleAddress,\n    shouldShowUniV3BaseTokenOracleForm,\n    uniV3BaseTokenOracle\n  );\n\n  return (\n    <Column\n      mainAxisAlignment=\"center\"\n      crossAxisAlignment=\"center\"\n      px={4}\n      width=\"100%\"\n      height=\"100%\"\n      flexBasis=\"10%\"\n      // bg=\"red\"\n    >\n      {isDeploying ? (\n        <TransactionStepper\n          activeStep={activeStep}\n          tokenData={tokenData}\n          steps={steps}\n        />\n      ) : null}\n      <Column\n        mainAxisAlignment=\"center\"\n        crossAxisAlignment=\"center\"\n        px={4}\n        width=\"100%\"\n        height=\"100%\"\n      >\n        <Center w=\"100%\" h=\"100%\">\n          {stage !== 1 && !isDeploying && (\n            <Button\n              width={stage === 3 ? \"20%\" : \"50%\"}\n              mx={4}\n              height=\"100%\"\n              // fontSize=\"2xl\"\n              onClick={() => handleSetStage(-1)}\n              fontWeight=\"bold\"\n              borderRadius=\"10px\"\n              disabled={isDeploying}\n              bg={tokenData.color! ?? \"#FFF\"}\n              _hover={{ transform: \"scale(1.02)\" }}\n              _active={{ transform: \"scale(0.95)\" }}\n              color={tokenData.overlayTextColor! ?? \"#000\"}\n            >\n              {t(\"Previous\")}\n            </Button>\n          )}\n\n          {stage < 3 && (\n            <Button\n              width=\"100%\"\n              height=\"100%\"\n              // height=\"70px\"\n              mx={4}\n              // fontSize=\"2xl\"\n              onClick={() => handleSetStage(1)}\n              fontWeight=\"bold\"\n              borderRadius=\"10px\"\n              disabled={stage === 2 ? shouldNextButtonBeDisabled : false}\n              bg={tokenData.color! ?? \"#FFF\"}\n              _hover={{ transform: \"scale(1.02)\" }}\n              _active={{ transform: \"scale(0.95)\" }}\n              color={tokenData.overlayTextColor! ?? \"#000\"}\n            >\n              {t(\"Next\")}\n            </Button>\n          )}\n\n          {stage === 3 && (\n            <Button\n              width={needsRetry ? \"100%\" : \"75%\"}\n              height=\"70px\"\n              fontSize={{\n                base: \"sm\",\n                sm: \"sm\",\n                md: \"md\",\n                lg: \"xl\",\n              }}\n              onClick={() => deploy()}\n              fontWeight=\"bold\"\n              borderRadius=\"10px\"\n              disabled={!needsRetry && isDeploying}\n              bg={tokenData.color! ?? \"#FFF\"}\n              _hover={{ transform: \"scale(1.02)\" }}\n              _active={{ transform: \"scale(0.95)\" }}\n              color={tokenData.overlayTextColor! ?? \"#000\"}\n              style={{\n                whiteSpace: \"normal\",\n                wordWrap: \"break-word\",\n              }}\n            >\n              {needsRetry\n                ? `(RETRY) ${steps[activeStep]}`\n                : isDeploying\n                ? steps[activeStep]\n                : t(\"Confirm\")}\n            </Button>\n          )}\n        </Center>\n      </Column>\n    </Column>\n  );\n};\n\nexport default DeployButton;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/IRMChart.tsx",
    "content": "// Chakra and UI\nimport {\n    Box,\n    Text,\n    Spinner,\n  } from \"@chakra-ui/react\";\n  import {\n    Center,\n  } from \"utils/chakraUtils\";\n  \n// React\nimport { useTranslation } from \"react-i18next\";\n\n// Hooks\nimport { TokenData } from \"../../../../../hooks/useTokenData\";\n\n\n// Utils\nimport { FuseIRMDemoChartOptions } from \"../../../../../utils/chartOptions\";\n\n\n// Libraries\nimport Chart from \"react-apexcharts\";\n\n\nconst IRMChart = ({\n    curves,\n    tokenData,\n    modal\n  }: {\n    curves: any;\n    tokenData: TokenData;\n    modal?: boolean;\n  }) => {\n    const { t } = useTranslation();\n    return (\n      <Box\n        height=\"170px\"\n        width=\"100%\"\n        color=\"#000000\"\n        overflow=\"hidden\"\n        px={modal ? 0 : 3}\n        className=\"hide-bottom-tooltip\"\n        flexShrink={0}\n      >\n        {curves ? (\n          <Chart\n            options={\n              {\n                ...FuseIRMDemoChartOptions,\n                colors: [\"#FFFFFF\", tokenData.color! ?? \"#282727\"],\n              } as any\n            }\n            type=\"line\"\n            width=\"100%\"\n            height=\"100%\"\n            series={[\n              {\n                name: \"Borrow Rate\",\n                data: curves.borrowerRates,\n              },\n              {\n                name: \"Deposit Rate\",\n                data: curves.supplierRates,\n              },\n            ]}\n          />\n        ) : curves === undefined ? (\n          <Center expand color=\"#FFF\">\n            <Spinner my={8} />\n          </Center>\n        ) : (\n          <Center expand color=\"#FFFFFF\">\n            <Text>\n              {t(\"No graph is available for this asset's interest curves.\")}\n            </Text>\n          </Center>\n        )}\n      </Box>\n    );\n  };\n\nexport default IRMChart"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/OracleConfig/BaseTokenOracleConfig.tsx",
    "content": "// Chakra and UI\nimport { Input, Box, Text, Select, Alert, AlertIcon } from \"@chakra-ui/react\";\nimport { Column, Row } from \"utils/chakraUtils\";\nimport { DASHBOARD_BOX_PROPS } from \"components/shared/DashboardBox\";\nimport { QuestionIcon } from \"@chakra-ui/icons\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\n\n// Components\nimport { CTokenIcon } from \"components/shared/CTokenIcon\";\n\n// React\nimport { useEffect } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\n// Rari\nimport { useRari } from \"context/RariContext\";\n\n// Hooks\nimport { OracleDataType, useGetOracleOptions } from \"hooks/fuse/useOracleData\";\nimport { useAddAssetContext } from \"context/AddAssetContext\";\n\nconst BaseTokenOracleConfig = () => {\n  const { t } = useTranslation();\n\n  const { address } = useRari();\n\n  const {\n    mode,\n    oracleData,\n    uniV3BaseTokenAddress,\n    uniV3BaseTokenOracle,\n    setUniV3BaseTokenOracle,\n    baseTokenActiveOracleName,\n    setBaseTokenActiveOracleName,\n  } = useAddAssetContext();\n\n  const isUserAdmin = address === oracleData?.admin ?? false;\n\n  // We get all oracle options.\n  const options = useGetOracleOptions(oracleData, uniV3BaseTokenAddress);\n\n  console.log(\"helo there\", { options });\n  // If we're editing the asset, show master price oracle as a default.\n  // Should run only once, when component renders.\n  useEffect(() => {\n    if (\n      mode === \"Editing\" &&\n      baseTokenActiveOracleName === \"\" &&\n      options &&\n      options[\"Current_Price_Oracle\"]\n    )\n      setBaseTokenActiveOracleName(\"Current_Price_Oracle\");\n  }, [mode, baseTokenActiveOracleName, options, setBaseTokenActiveOracleName]);\n\n  // This will update the oracle address, after user chooses which options they want to use.\n  // If option is Custom_Oracle oracle address is typed in by user, so we dont trigger this.\n  useEffect(() => {\n    if (\n      !!baseTokenActiveOracleName &&\n      baseTokenActiveOracleName !== \"Custom_Oracle\" &&\n      options\n    )\n      setUniV3BaseTokenOracle(options[baseTokenActiveOracleName]);\n  }, [baseTokenActiveOracleName, options, setUniV3BaseTokenOracle]);\n\n  return (\n    <>\n      <Row\n        crossAxisAlignment=\"center\"\n        mainAxisAlignment=\"center\"\n        width=\"100%\"\n        my={2}\n      >\n        <Alert status=\"info\" width=\"80%\" height=\"50px\" borderRadius={5} my={1}>\n          <AlertIcon />\n          <Text fontSize=\"sm\" align=\"center\" color=\"black\">\n            {\"This Uniswap V3 TWAP Oracle needs an oracle for the BaseToken.\"}\n          </Text>\n        </Alert>\n      </Row>\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        w=\"100%\"\n        h=\"100%\"\n      >\n        <Column\n          my={4}\n          width=\"100%\"\n          crossAxisAlignment=\"center\"\n          mainAxisAlignment=\"space-between\"\n        >\n          <Column\n            mainAxisAlignment=\"center\"\n            crossAxisAlignment=\"center\"\n            height=\"50%\"\n            justifyContent=\"space-around\"\n          >\n            <CTokenIcon address={uniV3BaseTokenAddress} boxSize={\"50px\"} />\n            <SimpleTooltip\n              label={t(\"Choose the best price oracle for this BaseToken.\")}\n            >\n              <Text fontWeight=\"bold\" fontSize=\"sm\" align=\"center\">\n                {t(\"BaseToken Price Oracle\")} <QuestionIcon ml={1} mb=\"4px\" />\n              </Text>\n            </SimpleTooltip>\n          </Column>\n\n          {options ? (\n            <Box alignItems=\"center\" height=\"50%\">\n              <Select\n                {...DASHBOARD_BOX_PROPS}\n                ml=\"auto\"\n                my={2}\n                borderRadius=\"7px\"\n                _focus={{ outline: \"none\" }}\n                width=\"260px\"\n                placeholder={\n                  baseTokenActiveOracleName.length === 0\n                    ? t(\"Choose Oracle\")\n                    : baseTokenActiveOracleName.replaceAll(\"_\", \" \")\n                }\n                value={baseTokenActiveOracleName.toLowerCase()}\n                disabled={\n                  !isUserAdmin ||\n                  (!oracleData?.adminOverwrite &&\n                    !options.Current_Price_Oracle === null)\n                }\n                onChange={(event) =>\n                  setBaseTokenActiveOracleName(event.target.value)\n                }\n              >\n                {Object.entries(options).map(([key, value]) =>\n                  value !== null &&\n                  value !== undefined &&\n                  key !== \"Uniswap_V3_Oracle\" &&\n                  key !== \"Uniswap_V2_Oracle\" ? (\n                    <option className=\"black-bg-option\" value={key} key={key}>\n                      {key.replaceAll(\"_\", \" \")}\n                    </option>\n                  ) : null\n                )}\n              </Select>\n\n              {baseTokenActiveOracleName.length > 0 ? (\n                <Input\n                  width=\"100%\"\n                  textAlign=\"center\"\n                  height=\"40px\"\n                  variant=\"filled\"\n                  size=\"sm\"\n                  mt={2}\n                  mb={2}\n                  value={uniV3BaseTokenOracle}\n                  onChange={(event) => {\n                    const address = event.target.value;\n                    setUniV3BaseTokenOracle(address);\n                  }}\n                  disabled={\n                    baseTokenActiveOracleName === \"Custom_Oracle\" ? false : true\n                  }\n                  {...DASHBOARD_BOX_PROPS}\n                  _placeholder={{ color: \"#e0e0e0\" }}\n                  _focus={{ bg: \"#121212\" }}\n                  _hover={{ bg: \"#282727\" }}\n                  bg=\"#282727\"\n                />\n              ) : null}\n            </Box>\n          ) : null}\n        </Column>\n      </Column>\n    </>\n  );\n};\n\nexport default BaseTokenOracleConfig;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/OracleConfig/OracleConfig.tsx",
    "content": "// Chakra and UI\nimport { Input, Box, Text, Select, Spinner, useToast } from \"@chakra-ui/react\";\nimport { Center, Row } from \"utils/chakraUtils\";\nimport { DASHBOARD_BOX_PROPS } from \"../../../../../shared/DashboardBox\";\nimport { SaveButton } from \"../../../FusePoolEditPage\";\nimport { QuestionIcon } from \"@chakra-ui/icons\";\nimport { SimpleTooltip } from \"../../../../../shared/SimpleTooltip\";\n\n// React\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useQueryClient } from \"react-query\";\n\n// Rari\nimport { useRari } from \"../../../../../../context/RariContext\";\n\n// Hooks\nimport {\n  useGetOracleOptions,\n  useIdentifyOracle,\n} from \"hooks/fuse/useOracleData\";\nimport { createOracle } from \"../../../../../../utils/createComptroller\";\n\n// Utils\nimport { handleGenericError } from \"../../../../../../utils/errorHandling\";\nimport { isTokenETHOrWETH } from \"utils/tokenUtils\";\n\n// Components\nimport UniswapV3PriceOracleConfigurator from \"./UniswapV3PriceOracleConfigurator\";\nimport UniswapV2OrSushiPriceOracleConfigurator from \"./UniswapV2OrSushiPriceOracleConfigurator\";\nimport BaseTokenOracleConfig from \"./BaseTokenOracleConfig\";\nimport { useAddAssetContext } from \"context/AddAssetContext\";\n\n// const useOraclesLoading = (options: any) => {\n//   const [isLoading, setIsLoading] = useState(false)\n\n//   Object.keys(options).filter((option) => {\n\n//   })\n\n// };\n\nconst OracleConfig = () => {\n  const toast = useToast();\n  const { t } = useTranslation();\n  const queryClient = useQueryClient();\n\n  const { fuse, address } = useRari();\n\n  const {\n    mode,\n    feeTier,\n    oracleData,\n    activeOracleModel,\n    tokenAddress,\n    oracleAddress,\n    oracleTouched,\n    uniV3BaseTokenAddress,\n    setOracleTouched,\n    activeUniSwapPair,\n    setActiveOracleModel,\n    setOracleAddress,\n    poolOracleAddress,\n    uniV3BaseTokenOracle,\n    baseTokenActiveOracleName,\n    shouldShowUniV3BaseTokenOracleForm,\n  } = useAddAssetContext();\n\n  const isUserAdmin = !!oracleData ? address === oracleData.admin : false;\n\n  // Available oracle options for asset\n  const options = useGetOracleOptions(oracleData, tokenAddress);\n\n  // Identify token oracle address\n  const oracleIdentity = useIdentifyOracle(oracleAddress);\n\n  const [inputTouched, setInputTouched] = useState(false);\n\n  // If user's editing the asset's properties, show the Ctoken's active Oracle\n  useEffect(() => {\n    // Map oracleIdentity to whatever the type of `activeOracle` can be\n\n    // \"Current_Price_Oracle\" would only be avialable if you are editing\n    if (\n      mode === \"Editing\" &&\n      options &&\n      options[\"Current_Price_Oracle\"] &&\n      !oracleTouched\n    ) {\n      setActiveOracleModel(\"Current_Price_Oracle\");\n    }\n\n    // if avaiable, set to \"Default_Price_Oracle\" if you are adding\n    if (\n      mode === \"Adding\" &&\n      options &&\n      !!options[\"Default_Price_Oracle\"] &&\n      !oracleTouched\n    ) {\n      setActiveOracleModel(\"Default_Price_Oracle\");\n    }\n\n    // if avaiable, set to \"Default_Price_Oracle\" if you are adding\n    if (\n      mode === \"Adding\" &&\n      options &&\n      !!options[\"Current_Price_Oracle\"] &&\n      !oracleTouched\n    ) {\n      setActiveOracleModel(\"Current_Price_Oracle\");\n    }\n  }, [\n    mode,\n    activeOracleModel,\n    options,\n    setActiveOracleModel,\n    oracleIdentity,\n    oracleTouched,\n  ]);\n\n  // Update the oracle address, after user chooses which option they want to use.\n  // If option is Custom_Oracle or Uniswap_V3_Oracle, oracle address is changed differently so we dont trigger this.\n  useEffect(() => {\n    if (\n      activeOracleModel.length > 0 &&\n      activeOracleModel !== \"Custom_Oracle\" &&\n      activeOracleModel !== \"Uniswap_V3_Oracle\" &&\n      activeOracleModel !== \"Uniswap_V2_Oracle\" &&\n      activeOracleModel !== \"SushiSwap_Oracle\" &&\n      options\n    )\n      setOracleAddress(options[activeOracleModel]);\n    if (\n      activeUniSwapPair === \"\" &&\n      (activeOracleModel === \"Custom_Oracle\" ||\n        activeOracleModel === \"Uniswap_V3_Oracle\" ||\n        activeOracleModel === \"Uniswap_V2_Oracle\" ||\n        activeOracleModel === \"SushiSwap_Oracle\") &&\n      !inputTouched\n    )\n      setOracleAddress(\"\");\n  }, [activeOracleModel, options, setOracleAddress, activeUniSwapPair]);\n\n  // Will update oracle for the asset. This is used only if user is editing asset.\n  const updateOracle = async () => {\n    const poolOracleContract = createOracle(\n      poolOracleAddress,\n      fuse,\n      \"MasterPriceOracle\"\n    );\n\n    // This variable will change if we deploy an oracle. (i.e TWAP Oracles)\n    // If we're using an option that has been deployed it stays the same.\n    let oracleAddressToUse = oracleAddress;\n\n    try {\n      if (options === null) return null;\n\n      // If activeOracle if a TWAP Oracle\n      if (activeOracleModel === \"Uniswap_V3_Oracle\") {\n        // Check for observation cardinality and fix if necessary\n        await fuse.primeUniswapV3Oracle(oracleAddressToUse, { from: address });\n\n        // Deploy oracle\n        oracleAddressToUse = await fuse.deployPriceOracle(\n          \"UniswapV3TwapPriceOracleV2\",\n          {\n            feeTier,\n            baseToken: uniV3BaseTokenAddress,\n          },\n          { from: address }\n        );\n      }\n\n      const tokenArray =\n        shouldShowUniV3BaseTokenOracleForm &&\n        !isTokenETHOrWETH(uniV3BaseTokenAddress)\n          ? [tokenAddress, uniV3BaseTokenAddress]\n          : [tokenAddress];\n      const oracleAddressArray =\n        shouldShowUniV3BaseTokenOracleForm &&\n        !isTokenETHOrWETH(uniV3BaseTokenAddress)\n          ? [oracleAddressToUse, uniV3BaseTokenOracle]\n          : [oracleAddressToUse];\n\n      console.log({ tokenArray, oracleAddressArray });\n\n      // Add oracle to Master Price Oracle\n      await poolOracleContract.methods\n        .add(tokenArray, oracleAddressArray)\n        .send({ from: address });\n\n      queryClient.refetchQueries();\n\n      // Wait 2 seconds for refetch and then close modal.\n      // We do this instead of waiting the refetch because some refetches take a while or error out and we want to close now.\n      await new Promise((resolve) => setTimeout(resolve, 2000));\n\n      toast({\n        title: \"You have successfully updated the oracle to this asset!\",\n        description: \"Oracle will now point to the new selected address.\",\n        status: \"success\",\n        duration: 2000,\n        isClosable: true,\n        position: \"top-right\",\n      });\n      setActiveOracleModel(\"Current_Price_Oracle\");\n      setOracleAddress(options[\"Current_Price_Oracle\"]);\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  if (!options)\n    return (\n      <Center>\n        <Spinner />\n      </Center>\n    );\n\n  return (\n    <>\n      <Row\n        mainAxisAlignment={mode === \"Editing\" ? \"space-between\" : \"flex-start\"}\n        // background=\"gold\"\n        crossAxisAlignment={\"center\"}\n        width={\n          mode === \"Editing\"\n            ? !shouldShowUniV3BaseTokenOracleForm\n              ? \"100%\"\n              : \"50%\"\n            : \"100%\"\n        }\n        flexGrow={1}\n        pt={mode === \"Editing\" ? 4 : 0}\n        pb={mode === \"Editing\" ? 1 : 0}\n        px={mode === \"Editing\" ? 4 : 0}\n        id=\"PRICEORACLE\"\n      >\n        <SimpleTooltip label={t(\"Choose the best price oracle for the asset.\")}>\n          <Text fontWeight=\"bold\">\n            {t(\"Price Oracle\")} <QuestionIcon ml={1} mb=\"4px\" />\n          </Text>\n        </SimpleTooltip>\n\n        {/* Oracles */}\n        <Box\n          width={mode === \"Editing\" ? \"50%\" : \"100%\"}\n          alignItems=\"flex-end\"\n          flexDirection=\"column\"\n          alignContent=\"center\"\n          display=\"flex\"\n        >\n          <Select\n            mb={2}\n            ml=\"auto\"\n            width=\"260px\"\n            {...DASHBOARD_BOX_PROPS}\n            borderRadius=\"7px\"\n            _focus={{ outline: \"none\" }}\n            value={activeOracleModel.toLowerCase()}\n            onChange={(event) => {\n              // if (mode === \"Editing\") {\n              // }\n              setOracleTouched(true);\n              setActiveOracleModel(event.target.value);\n            }}\n            placeholder={\n              activeOracleModel.length === 0\n                ? t(\"Choose Oracle\")\n                : activeOracleModel.replaceAll(\"_\", \" \")\n            }\n            disabled={\n              !isUserAdmin ||\n              (!oracleData?.adminOverwrite &&\n                !options.Current_Price_Oracle === null)\n            }\n          >\n            {Object.entries(options).map(([key, value]) =>\n              value !== null &&\n              value !== undefined &&\n              key !== activeOracleModel &&\n              (mode === \"Adding\" ? key !== \"Current_Price_Oracle\" : true) ? (\n                // dont show the selected choice in the list\n                <option key={key} value={key} className=\"black-bg-option\">\n                  {key.replaceAll(\"_\", \" \")}\n                </option>\n              ) : null\n            )}\n            {/* <option disabled={true}>Loading...</option> */}\n          </Select>\n\n          {activeOracleModel.length > 0 ? (\n            <Input\n              mt={2}\n              mb={2}\n              ml=\"auto\"\n              size=\"sm\"\n              bg=\"#282727\"\n              height=\"40px\"\n              width=\"260px\"\n              variant=\"filled\"\n              textAlign=\"center\"\n              value={oracleAddress}\n              onChange={(event) => {\n                const address = event.target.value;\n                setInputTouched(true);\n                setOracleAddress(address);\n              }}\n              {...DASHBOARD_BOX_PROPS}\n              _focus={{ bg: \"#121212\" }}\n              _hover={{ bg: \"#282727\" }}\n              _placeholder={{ color: \"#e0e0e0\" }}\n              disabled={activeOracleModel === \"Custom_Oracle\" ? false : true}\n            />\n          ) : null}\n          <Text color=\"grey\" fontSize=\"sm\" textAlign=\"center\">\n            {oracleIdentity}\n          </Text>\n          {activeOracleModel === \"Custom_Oracle\" && (\n            <Text color=\"red\" fontSize=\"sm\" textAlign=\"center\">\n              Make sure you know what you are doing!\n            </Text>\n          )}\n        </Box>\n      </Row>\n\n      <Row\n        mainAxisAlignment={mode === \"Editing\" ? \"center\" : \"center\"}\n        crossAxisAlignment={mode === \"Editing\" ? \"flex-start\" : \"center\"}\n        flexDirection=\"column\"\n        width={\n          mode === \"Adding\" && !shouldShowUniV3BaseTokenOracleForm\n            ? \"100%\"\n            : \"50%\"\n        }\n        // bg=\"pink\"\n        ml={mode === \"Editing\" ? \"auto\" : \"\"}\n        px={mode === \"Editing\" ? 4 : 0}\n        id=\"UNIV3Config\"\n      >\n        {activeOracleModel === \"Uniswap_V3_Oracle\" ? (\n          <UniswapV3PriceOracleConfigurator />\n        ) : null}\n\n        {activeOracleModel === \"Uniswap_V2_Oracle\" ? (\n          <UniswapV2OrSushiPriceOracleConfigurator type=\"UniswapV2\" />\n        ) : null}\n\n        {activeOracleModel === \"SushiSwap_Oracle\" ? (\n          <UniswapV2OrSushiPriceOracleConfigurator type=\"Sushiswap\" />\n        ) : null}\n      </Row>\n\n      {shouldShowUniV3BaseTokenOracleForm && mode === \"Editing\" ? (\n        <BaseTokenOracleConfig />\n      ) : null}\n\n      {activeOracleModel !== \"Current_Price_Oracle\" && mode === \"Editing\" ? (\n        <SaveButton\n          ml={\"auto\"}\n          mb={3}\n          mr={4}\n          fontSize=\"xs\"\n          altText={t(\"Update\")}\n          onClick={updateOracle}\n        />\n      ) : null}\n    </>\n  );\n};\nexport default OracleConfig;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/OracleConfig/UniswapV2OrSushiPriceOracleConfigurator.tsx",
    "content": "// Chakra and UI\nimport { Button, Text, Select, Checkbox } from \"@chakra-ui/react\";\nimport { Row } from \"utils/chakraUtils\";\nimport { DASHBOARD_BOX_PROPS } from \"../../../../../shared/DashboardBox\";\nimport { QuestionIcon } from \"@chakra-ui/icons\";\nimport { SimpleTooltip } from \"../../../../../shared/SimpleTooltip\";\n\n// React\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\n// Hooks\nimport { useSushiOrUniswapV2Pairs } from \"hooks/fuse/useOracleData\";\nimport { useAddAssetContext } from \"context/AddAssetContext\";\n\n// Utils\nimport { smallUsdFormatter, shortUsdFormatter } from \"utils/bigUtils\";\n\nconst UniswapV2OrSushiPriceOracleConfigurator = ({\n  type,\n}: {\n  // Asset's Address. i.e DAI, USDC\n\n  // Either SushiSwap or Uniswap V2\n  type: string;\n}) => {\n  const { t } = useTranslation();\n\n  // This will be used to index whitelistPools array (fetched from the graph.)\n  // It also helps us know if user has selected anything or not. If they have, detail fields are shown.\n  const [activePool, setActivePair] = useState<string>(\"\");\n\n  // Checks if user has started the TWAP bot.\n  const [checked, setChecked] = useState<boolean>(false);\n\n  // Will store oracle response. This helps us know if its safe to add it to Master Price Oracle\n  const [checkedStepTwo, setCheckedStepTwo] = useState<boolean>(false);\n\n  const { tokenAddress, setOracleAddress, setUniV3BaseTokenAddress } =\n    useAddAssetContext();\n\n  // Get pair options from sushiswap and uniswap\n  const { SushiPairs, SushiError, UniV2Pairs, univ2Error } =\n    useSushiOrUniswapV2Pairs(tokenAddress);\n\n  // This is where we conditionally store data depending on type.\n  // Uniswap V2 or SushiSwap\n  const Pairs = type === \"UniswapV2\" ? UniV2Pairs : SushiPairs;\n  const Error = type === \"UniswapV2\" ? univ2Error : SushiError;\n\n  // Will update active pair, set oracle address and base token.\n  const updateInfo = (value: string) => {\n    const pair = Pairs[value];\n    setActivePair(value);\n    setOracleAddress(pair.id);\n    setUniV3BaseTokenAddress(\n      pair.token1.id === tokenAddress ? pair.token0.id : pair.token1.id\n    );\n  };\n\n  // If pairs are still being fetched, if theres and error or if there are none, return nothing.\n  if (Pairs === undefined || Error || Pairs === null) return null;\n\n  return (\n    <>\n      <Row\n        crossAxisAlignment=\"center\"\n        mainAxisAlignment=\"space-between\"\n        width=\"260px\"\n        my={3}\n      >\n        <Checkbox isChecked={checked} onChange={() => setChecked(!checked)}>\n          <Text fontSize=\"xs\" align=\"center\">\n            Using this type of oracle requires you to run a TWAP bot.\n          </Text>\n        </Checkbox>\n      </Row>\n\n      {checked ? (\n        <Row\n          crossAxisAlignment=\"center\"\n          mainAxisAlignment=\"space-between\"\n          width=\"260px\"\n          my={3}\n        >\n          <Button colorScheme=\"teal\">Check</Button>\n\n          <Text fontSize=\"xs\" align=\"center\">\n            After deploying your oracle, you have to wait about 15 - 25 minutes\n            for the oracle to be set.\n          </Text>\n        </Row>\n      ) : null}\n\n      {true ? (\n        <Row\n          crossAxisAlignment=\"center\"\n          mainAxisAlignment=\"space-between\"\n          width=\"260px\"\n          my={2}\n        >\n          <SimpleTooltip\n            label={t(\n              \"This field will determine which pool your oracle reads from. Its safer with more liquidity.\"\n            )}\n          >\n            <Text fontWeight=\"bold\">\n              {t(\"Pool:\")} <QuestionIcon ml={1} mb=\"4px\" />\n            </Text>\n          </SimpleTooltip>\n          <Select\n            {...DASHBOARD_BOX_PROPS}\n            ml={2}\n            mb={2}\n            borderRadius=\"7px\"\n            _focus={{ outline: \"none\" }}\n            width=\"180px\"\n            placeholder={\n              activePool.length === 0 ? t(\"Choose Pool\") : activePool\n            }\n            value={activePool}\n            disabled={!checked}\n            onChange={(event) => {\n              updateInfo(event.target.value);\n            }}\n          >\n            {typeof Pairs !== undefined\n              ? Object.entries(Pairs).map(([key, value]: any[]) =>\n                  value.totalSupply !== null &&\n                  value.totalSupply !== undefined &&\n                  value.totalSupply >= 100 ? (\n                    <option\n                      className=\"black-bg-option\"\n                      value={key}\n                      key={value.id}\n                    >\n                      {`${value.token0.symbol} / ${\n                        value.token1.symbol\n                      } (${shortUsdFormatter(value.totalSupply)})`}\n                    </option>\n                  ) : null\n                )\n              : null}\n          </Select>\n        </Row>\n      ) : null}\n\n      {activePool.length > 0 ? (\n        <Row\n          crossAxisAlignment=\"center\"\n          mainAxisAlignment=\"space-between\"\n          width=\"260px\"\n          my={2}\n        >\n          <SimpleTooltip label={t(\"TVL in pool as of this moment.\")}>\n            <Text fontWeight=\"bold\">\n              {t(\"Liquidity:\")} <QuestionIcon ml={1} mb=\"4px\" />\n            </Text>\n          </SimpleTooltip>\n          <h1>\n            {activePool !== \"\"\n              ? smallUsdFormatter(Pairs[activePool].totalSupply)\n              : null}\n          </h1>\n        </Row>\n      ) : null}\n    </>\n  );\n};\nexport default UniswapV2OrSushiPriceOracleConfigurator;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/OracleConfig/UniswapV3PriceOracleConfigurator.tsx",
    "content": "// Chakra and UI\nimport { Text, Select, Link, Alert, AlertIcon } from \"@chakra-ui/react\";\nimport { Column, Row } from \"utils/chakraUtils\";\nimport { DASHBOARD_BOX_PROPS } from \"../../../../../shared/DashboardBox\";\nimport { QuestionIcon } from \"@chakra-ui/icons\";\nimport { SimpleTooltip } from \"../../../../../shared/SimpleTooltip\";\n\n// React\nimport { useTranslation } from \"react-i18next\";\nimport { useQuery } from \"react-query\";\n\n// Axios\nimport axios from \"axios\";\n\n// Utils\nimport { shortUsdFormatter } from \"utils/bigUtils\";\nimport { useAddAssetContext } from \"context/AddAssetContext\";\nimport { useMemo } from \"react\";\n\nconst UniswapV3PriceOracleConfigurator = () => {\n  const { t } = useTranslation();\n\n  const {\n    setFeeTier,\n    tokenAddress,\n    setOracleAddress,\n    setUniV3BaseTokenAddress,\n    activeUniSwapPair,\n    setActiveUniSwapPair,\n  } = useAddAssetContext();\n\n  // We get a list of whitelistedPools from uniswap-v3's the graph.\n  const { data: liquidity, error } = useQuery(\n    \"UniswapV3 pool liquidity for \" + tokenAddress,\n    async () =>\n      (\n        await axios.post(\n          \"https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3\",\n          {\n            query: `{\n              token(id:\"${tokenAddress.toLowerCase()}\") {\n                whitelistPools {\n                  id,\n                  feeTier,\n                  volumeUSD,\n                  totalValueLockedUSD,\n                  token0 {\n                    symbol,\n                    id,\n                    name\n                  },\n                  token1 {\n                    symbol,\n                    id,\n                    name\n                  }\n                }\n              }\n            }`,\n          }\n        )\n      ).data,\n    { refetchOnMount: false }\n  );\n\n  // When user selects an option this function will be called.\n  // Active pool, fee Tier, and base token are updated and we set the oracle address to the address of the pool we chose.\n  const updateBoth = (value: string) => {\n    const uniPool = liquidity.data.token.whitelistPools[value];\n\n    const baseToken: string =\n      uniPool.token0.id.toLowerCase() === tokenAddress.toLocaleLowerCase()\n        ? uniPool.token1.id\n        : uniPool.token0.id;\n    setActiveUniSwapPair(value);\n    setFeeTier(uniPool.feeTier);\n    setOracleAddress(uniPool.id);\n    setUniV3BaseTokenAddress(baseToken);\n  };\n\n  // If liquidity is undefined, theres an error or theres no token found return nothing.\n  if (liquidity === undefined || liquidity.data === undefined)\n    return null;\n\n  // Sort whitelisted pools by TVL. Greatest to smallest. Greater TVL is safer for users so we show it first.\n  // Filter out pools where volume is less than $100,000\n  const liquiditySorted = liquidity.data.token.whitelistPools.sort(\n    (a: any, b: any): any =>\n      parseInt(a.totalValueLockedUSD) > parseInt(b.totalValueLockedUSD) ? -1 : 1\n  );\n  // .filter((pool: any) => pool.volumeUSD >= 100000);\n\n  const selectedOracle = liquidity.data.token.whitelistPools[activeUniSwapPair];\n  console.log({ selectedOracle });\n  // const warning = useMemo(() => {\n  //   if (selectedOracle.liquidityProviderCount <=100)\n  // }, [selectedOracle]);\n\n  return (\n    <>\n      <Column\n        crossAxisAlignment=\"flex-start\"\n        mainAxisAlignment=\"flex-start\"\n        width={\"100%\"}\n        my={2}\n        px={4}\n        ml={\"auto\"}\n        // bg=\"aqua\"\n        id=\"UNIv3COLUMN\"\n      >\n        <Row\n          crossAxisAlignment=\"center\"\n          mainAxisAlignment=\"space-between\"\n          w=\"100%\"\n          // bg=\"green\"\n        >\n          <SimpleTooltip\n            label={t(\n              \"This field will determine which pool your oracle reads from. Its safer with more liquidity.\"\n            )}\n          >\n            <Text fontWeight=\"bold\">\n              {t(\"Pool:\")} <QuestionIcon ml={1} mb=\"4px\" />\n            </Text>\n          </SimpleTooltip>\n          <Select\n            {...DASHBOARD_BOX_PROPS}\n            ml={2}\n            mb={2}\n            width=\"180px\"\n            borderRadius=\"7px\"\n            value={activeUniSwapPair}\n            _focus={{ outline: \"none\" }}\n            placeholder={\n              activeUniSwapPair === \"\" ? t(\"Choose Pool\") : activeUniSwapPair\n            }\n            onChange={(event) => {\n              updateBoth(event.target.value);\n            }}\n          >\n            {typeof liquidity !== undefined\n              ? Object.entries(liquiditySorted).map(([key, value]: any[]) =>\n                  value.totalValueLockedUSD !== null &&\n                  value.totalValueLockedUSD !== undefined &&\n                  value.totalValueLockedUSD >= 100 ? (\n                    <option\n                      className=\"black-bg-option\"\n                      value={key}\n                      key={value.id}\n                    >\n                      {`${value.token0.symbol} / ${\n                        value.token1.symbol\n                      } (${shortUsdFormatter(value.totalValueLockedUSD)})`}\n                    </option>\n                  ) : null\n                )\n              : null}\n          </Select>\n        </Row>\n\n        {activeUniSwapPair !== \"\" ? (\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"flex-start\"\n          >\n            <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"flex-start\">\n              <Alert\n                status=\"warning\"\n                width=\"100%\"\n                height=\"70px\"\n                borderRadius={5}\n                my={1}\n              >\n                <AlertIcon />\n                <Text fontSize=\"sm\" align=\"center\" color=\"black\">\n                  {\n                    \"Make sure this Uniswap V3 Pool has full-range liquidity. If not, your pool could be compromised.\"\n                  }\n                </Text>\n              </Alert>\n            </Row>\n\n            <Row\n              mainAxisAlignment=\"space-between\"\n              crossAxisAlignment=\"center\"\n              my={2}\n              w=\"100%\"\n              // bg=\"pink\"\n            >\n              <SimpleTooltip label={t(\"TVL in pool as of this moment.\")}>\n                <Text fontWeight=\"bold\">\n                  {t(\"Liquidity:\")} <QuestionIcon ml={1} mb=\"4px\" />\n                </Text>\n              </SimpleTooltip>\n              <h1>\n                {activeUniSwapPair !== \"\"\n                  ? shortUsdFormatter(\n                      liquidity.data.token.whitelistPools[activeUniSwapPair]\n                        .totalValueLockedUSD\n                    )\n                  : null}\n              </h1>\n            </Row>\n            <Row\n              mainAxisAlignment=\"space-between\"\n              crossAxisAlignment=\"center\"\n              my={2}\n              w=\"100%\"\n              // bg=\"pink\"\n            >\n              <SimpleTooltip label={t(\"Volume of pool.\")}>\n                <Text fontWeight=\"bold\">\n                  {t(\"Volume:\")} <QuestionIcon ml={1} mb=\"4px\" />\n                </Text>\n              </SimpleTooltip>\n\n              <h1>\n                {activeUniSwapPair !== \"\"\n                  ? shortUsdFormatter(\n                      liquidity.data.token.whitelistPools[activeUniSwapPair]\n                        .volumeUSD\n                    )\n                  : null}\n              </h1>\n            </Row>\n            {/* <Row\n              mainAxisAlignment=\"space-between\"\n              crossAxisAlignment=\"center\"\n              my={2}\n              w=\"100%\"\n              // bg=\"pink\"\n            >\n              <SimpleTooltip\n                label={t(\n                  \"The fee percentage for the pool on Uniswap (0.05%, 0.3%, 1%)\"\n                )}\n              >\n                <Text fontWeight=\"bold\">\n                  {t(\"Fee Tier:\")} <QuestionIcon ml={1} mb=\"4px\" />\n                </Text>\n              </SimpleTooltip>\n              <Text>\n                %\n                {activeUniSwapPair !== \"\"\n                  ? liquidity.data.token.whitelistPools[activeUniSwapPair]\n                      .feeTier / 10000\n                  : null}\n              </Text>\n            </Row> */}\n            <Row\n              crossAxisAlignment=\"center\"\n              mainAxisAlignment=\"center\"\n              width=\"260px\"\n              my={0}\n            >\n              <Link\n                href={`https://info.uniswap.org/#/pools/${liquidity.data.token.whitelistPools[activeUniSwapPair].id}`}\n                isExternal\n              >\n                Visit Pool in Uniswap\n              </Link>\n            </Row>\n          </Column>\n        ) : null}\n      </Column>\n    </>\n  );\n};\n\nexport default UniswapV3PriceOracleConfigurator;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/Screens/Screen1.tsx",
    "content": "// Chakra and UI\nimport { Row } from \"utils/chakraUtils\";\n\n// Components\nimport AssetConfig from \"../AssetConfig\";\n\n\nconst Screen1 = () => {\n\n    return (\n      <>\n        <Row\n          mainAxisAlignment=\"center\"\n          crossAxisAlignment=\"center\"\n          overflowY=\"scroll\"\n          maxHeight=\"100%\"\n          height=\"95%\"\n          width=\"100%\"\n          maxWidth=\"100%\"\n          id=\"SCREEN1COLUMN\"\n        >\n              <AssetConfig />\n        </Row>\n      </>\n    );\n  };\n\nexport default Screen1"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/Screens/Screen2.tsx",
    "content": "// Chakra and UI\nimport { Column, Row } from \"utils/chakraUtils\";\nimport { Alert, Text, AlertIcon } from \"@chakra-ui/react\";\n\n// Rari\nimport { useRari } from \"../../../../../../context/RariContext\";\n\n// Components\nimport BaseTokenOracleConfig from \"../OracleConfig/BaseTokenOracleConfig\";\nimport OracleConfig from \"../OracleConfig/OracleConfig\";\nimport { OracleDataType } from \"hooks/fuse/useOracleData\";\nimport { useQuery } from \"react-query\";\nimport { createOracle } from \"utils/createComptroller\";\nimport { Spinner } from \"@chakra-ui/spinner\";\nimport { useAddAssetContext } from \"context/AddAssetContext\";\n\nconst Screen2 = ({ mode }: { mode: string }) => {\n  const {\n    feeTier,\n    poolOracleModel,\n    oracleData,\n    setFeeTier,\n    activeOracleModel,\n    tokenAddress,\n    oracleAddress,\n    oracleTouched,\n    uniV3BaseTokenAddress,\n    setOracleTouched,\n    activeUniSwapPair,\n    setOracleAddress,\n    setActiveOracleModel,\n    setUniV3BaseTokenAddress,\n    poolOracleAddress,\n    setActiveUniSwapPair,\n    uniV3BaseTokenOracle,\n    setUniV3BaseTokenOracle,\n    baseTokenActiveOracleName,\n    setBaseTokenActiveOracleName,\n    shouldShowUniV3BaseTokenOracleForm,\n    // New stuff -skip oracle step with default oracle\n    hasPriceForAsset,\n    hasDefaultOracle,\n    hasCustomOracleForToken,\n    priceForAsset,\n    defaultOracle,\n    customOracleForToken,\n  } = useAddAssetContext();\n\n  if (\n    poolOracleModel === \"MasterOracleV1\" ||\n    poolOracleModel === \"ChainlinkPriceOracle\"\n  )\n    return (\n      <LegacyOracle\n        tokenAddress={tokenAddress}\n        poolOracleModel={poolOracleModel}\n        setActiveOracleModel={setActiveOracleModel}\n        poolOracleAddress={poolOracleAddress}\n        setOracleAddress={setOracleAddress}\n      />\n    );\n\n  // If it has a default oracle and the user hasn't edited to be outside the default oracle\n  const hasDefaultOraclePriceAndHasntEdited =\n    hasDefaultOracle && hasPriceForAsset && oracleAddress === defaultOracle;\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      h=\"100%\"\n      w=\"100%\"\n      // bg=\"aqua\"\n    >\n      {hasDefaultOraclePriceAndHasntEdited && (\n        <Row\n          mainAxisAlignment=\"center\"\n          crossAxisAlignment=\"center\"\n          w=\"100%\"\n          h=\"30%\"\n          // bg=\"red\"\n        >\n          <Alert status=\"info\" width=\"80%\" height=\"50px\" borderRadius={5}>\n            <AlertIcon />\n            <Text fontSize=\"sm\" align=\"center\" color=\"black\">\n              This asset already has a price from the Pool's Default Oracle, but\n              you can change this asset's oracle if you want.\n            </Text>\n          </Alert>\n        </Row>\n      )}\n      <Row\n        mainAxisAlignment={\n          mode === \"Adding\" && !shouldShowUniV3BaseTokenOracleForm\n            ? \"center\"\n            : \"flex-start\"\n        }\n        crossAxisAlignment={\n          mode === \"Adding\" && !shouldShowUniV3BaseTokenOracleForm\n            ? \"center\"\n            : \"flex-start\"\n        }\n        h=\"100%\"\n        w=\"100%\"\n      >\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment={\n            shouldShowUniV3BaseTokenOracleForm ? \"flex-start\" : \"center\"\n          }\n          maxHeight=\"100%\"\n          height=\"100%\"\n          maxWidth=\"100%\"\n          width={\n            mode === \"Adding\" && !shouldShowUniV3BaseTokenOracleForm\n              ? \"50%\"\n              : \"100%\"\n          }\n        >\n          <OracleConfig />\n        </Column>\n        {shouldShowUniV3BaseTokenOracleForm ? (\n          <Column\n            width=\"50%\"\n            minW=\"50%\"\n            height=\"100%\"\n            mainAxisAlignment=\"center\"\n            crossAxisAlignment=\"center\"\n          >\n            <BaseTokenOracleConfig />\n          </Column>\n        ) : null}\n      </Row>\n    </Column>\n  );\n};\nexport default Screen2;\n\nconst LegacyOracle = ({\n  tokenAddress,\n  poolOracleModel,\n  poolOracleAddress,\n  setOracleAddress,\n  setActiveOracleModel,\n}: {\n  tokenAddress: string;\n  poolOracleModel: string;\n  poolOracleAddress: string;\n  setOracleAddress: (x: string) => void;\n  setActiveOracleModel: (x: string) => void;\n}) => {\n  const supportedAddress: string | undefined = useIsAssetSupported(\n    tokenAddress,\n    poolOracleModel,\n    poolOracleAddress\n  );\n\n  if (!supportedAddress && typeof supportedAddress === \"undefined\")\n    return <Spinner />;\n\n  if (supportedAddress === \"0x0000000000000000000000000000000000000000\")\n    return (\n      <h1>\n        Asset is not currently supported by our oracle, please contact the Rari\n        Capital team for assistance.\n      </h1>\n    );\n\n  setOracleAddress(supportedAddress);\n  setActiveOracleModel(poolOracleModel);\n  return <h2>Your oracle supports this token.</h2>;\n};\n\nconst useIsAssetSupported = (\n  tokenAddress: string,\n  oracleModel: string,\n  poolOracleAddress: string\n): string | undefined => {\n  const { fuse } = useRari();\n\n  const { data: supportedAddress, error } = useQuery(\n    \"Checking if oracle supports: \" + tokenAddress,\n    async () => {\n      const contract = createOracle(poolOracleAddress, fuse, oracleModel);\n\n      let supportedAddress: string | undefined;\n\n      if (oracleModel === \"MasterPriceOracleV1\") {\n        const answer: string = await contract.methods\n          .oracles(tokenAddress)\n          .call();\n\n        supportedAddress = answer;\n      }\n\n      if (oracleModel === \"ChainlinkPriceOracle\") {\n        const answer: number = await contract.methods\n          .price(tokenAddress)\n          .call();\n        supportedAddress =\n          answer <= 0\n            ? \"0x0000000000000000000000000000000000000000\"\n            : poolOracleAddress;\n      }\n\n      return supportedAddress;\n    }\n  );\n\n  return error\n    ? \"0x0000000000000000000000000000000000000000\"\n    : supportedAddress;\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal/Screens/Screen3.tsx",
    "content": "// Chakra and UI\nimport { Column } from \"utils/chakraUtils\";\nimport { Box, Text } from \"@chakra-ui/layout\";\nimport { ConfigRow } from \"components/pages/Fuse/FusePoolEditPage\";\nimport { ModalDivider } from \"components/shared/Modal\";\n\n// Rari\nimport { useRari } from \"context/RariContext\";\nimport { useAddAssetContext } from \"context/AddAssetContext\";\n\n// Components\nimport IRMChart from \"../IRMChart\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\n\nconst Screen3 = () => {\n  const { fuse } = useRari();\n  const {\n    curves,\n    adminFee,\n    tokenData,\n    activeOracleModel,\n    oracleAddress,\n    reserveFactor,\n    collateralFactor,\n    interestRateModel,\n    baseTokenActiveOracleName,\n    shouldShowUniV3BaseTokenOracleForm,\n  } = useAddAssetContext();\n\n  return (\n    <Column\n      mainAxisAlignment=\"center\"\n      crossAxisAlignment=\"center\"\n      overflowY=\"scroll\"\n      maxHeight=\"100%\"\n      height=\"100%\"\n      width=\"95%\"\n      maxWidth=\"100%\"\n      // bg=\"yellow\"\n    >\n      <Box\n        d=\"flex\"\n        width=\"100%\"\n        flexDirection=\"row\"\n        alignItems=\"center\"\n        justifyContent=\"space-around\"\n        height=\"100%\"\n        // bg=\"red\"\n      >\n        <Column\n          width=\"47%\"\n          height=\"90%\"\n          d=\"flex\"\n          mainAxisAlignment=\"center\"\n          crossAxisAlignment=\"center\"\n          alignItems=\"center\"\n          justifyContent=\"center\"\n        >\n          <Text mb={1}>\n            {fuse\n              .identifyInterestRateModelName(interestRateModel)\n              .replace(\"_\", \" \")}\n          </Text>\n          <IRMChart modal curves={curves} tokenData={tokenData} />\n        </Column>\n        <Column\n          width=\"47%\"\n          height=\"90%\"\n          d=\"flex\"\n          mainAxisAlignment=\"center\"\n          crossAxisAlignment=\"center\"\n          alignItems=\"center\"\n          justifyContent=\"center\"\n        >\n          <ConfigRow maxHeight=\"35px\" mainAxisAlignment=\"space-between\">\n            <Text size=\"sm\">Collateral Factor:</Text>\n            <Text size=\"sm\">{collateralFactor}%</Text>\n          </ConfigRow>\n\n          <ModalDivider />\n\n          <ConfigRow maxHeight=\"35px\" mainAxisAlignment=\"space-between\">\n            <Text size=\"sm\">Reserve Factor:</Text>\n            <Text size=\"sm\">{reserveFactor}%</Text>\n          </ConfigRow>\n\n          <ModalDivider />\n\n          <ConfigRow maxHeight=\"35px\" mainAxisAlignment=\"space-between\">\n            <Text size=\"sm\">Admin Fee: </Text>\n            <Text size=\"sm\">{adminFee}%</Text>\n          </ConfigRow>\n\n          <ModalDivider />\n\n          <ConfigRow maxHeight=\"35px\" mainAxisAlignment=\"space-between\">\n            <Text size=\"sm\">Oracle:</Text>\n            <SimpleTooltip label={oracleAddress}>\n              <Text size=\"sm\">{activeOracleModel.replace(\"_\", \" \")}</Text>\n            </SimpleTooltip>\n          </ConfigRow>\n\n          {shouldShowUniV3BaseTokenOracleForm ? (\n            <>\n              <ModalDivider />\n              <ConfigRow maxHeight=\"35px\" mainAxisAlignment=\"space-between\">\n                <Text size=\"sm\"> Base token oracle: </Text>\n                <Text size=\"sm\">{baseTokenActiveOracleName}</Text>\n              </ConfigRow>\n            </>\n          ) : null}\n        </Column>\n      </Box>\n    </Column>\n  );\n};\n\nexport default Screen3;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddAssetModal.tsx",
    "content": "import {\n  Heading,\n  Modal,\n  ModalContent,\n  ModalOverlay,\n  Input,\n  Button,\n  Box,\n  Text,\n  Image,\n  Select,\n  Spinner,\n  useToast,\n} from \"@chakra-ui/react\";\nimport { Column, Center } from \"utils/chakraUtils\";\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport DashboardBox, {\n  DASHBOARD_BOX_PROPS,\n} from \"../../../shared/DashboardBox\";\nimport { ModalDivider, MODAL_PROPS } from \"../../../shared/Modal\";\n\nimport {\n  ETH_TOKEN_DATA,\n  TokenData,\n  useTokenData,\n} from \"../../../../hooks/useTokenData\";\nimport SmallWhiteCircle from \"../../../../static/small-white-circle.png\";\nimport { useRari } from \"../../../../context/RariContext\";\nimport { FuseIRMDemoChartOptions } from \"../../../../utils/chartOptions\";\nimport { SliderWithLabel } from \"../../../shared/SliderWithLabel\";\nimport { convertIRMtoCurve } from \"../FusePoolInfoPage\";\n\nimport Fuse from \"../../../../fuse-sdk\";\nimport Chart from \"react-apexcharts\";\nimport {\n  ConfigRow,\n  SaveButton,\n  testForComptrollerErrorAndSend,\n} from \"../FusePoolEditPage\";\nimport { useQuery, useQueryClient } from \"react-query\";\nimport { QuestionIcon } from \"@chakra-ui/icons\";\nimport { SimpleTooltip } from \"../../../shared/SimpleTooltip\";\nimport BigNumber from \"bignumber.js\";\nimport { createComptroller, createCToken } from \"utils/createComptroller\";\nimport { testForCTokenErrorAndSend } from \"./PoolModal/AmountSelect\";\n\nimport { handleGenericError } from \"../../../../utils/errorHandling\";\nimport { USDPricedFuseAsset } from \"../../../../utils/fetchFusePoolData\";\nimport LogRocket from \"logrocket\";\n\nconst formatPercentage = (value: number) => value.toFixed(1) + \"%\";\n\nexport const useLiquidationIncentive = (comptrollerAddress: string) => {\n  const { fuse } = useRari();\n\n  const { data } = useQuery(\n    comptrollerAddress + \" comptrollerData\",\n    async () => {\n      const comptroller = createComptroller(comptrollerAddress, fuse);\n\n      return comptroller.methods.liquidationIncentiveMantissa().call();\n    }\n  );\n\n  return data;\n};\n\nexport const useCTokenData = (\n  comptrollerAddress?: string,\n  cTokenAddress?: string\n) => {\n  const { fuse } = useRari();\n\n  const { data } = useQuery(cTokenAddress + \" cTokenData\", async () => {\n    if (comptrollerAddress && cTokenAddress) {\n      const comptroller = createComptroller(comptrollerAddress, fuse);\n      const cToken = createCToken(fuse, cTokenAddress);\n\n      const [\n        adminFeeMantissa,\n        reserveFactorMantissa,\n        interestRateModelAddress,\n        { collateralFactorMantissa },\n        isPaused,\n      ] = await Promise.all([\n        cToken.methods.adminFeeMantissa().call(),\n        cToken.methods.reserveFactorMantissa().call(),\n        cToken.methods.interestRateModel().call(),\n        comptroller.methods.markets(cTokenAddress).call(),\n        comptroller.methods.borrowGuardianPaused(cTokenAddress).call(),\n      ]);\n\n      return {\n        reserveFactorMantissa,\n        adminFeeMantissa,\n        collateralFactorMantissa,\n        interestRateModelAddress,\n        cTokenAddress,\n        isPaused,\n      };\n    } else {\n      return null;\n    }\n  });\n\n  return data;\n};\n\nexport const AssetSettings = ({\n  poolName,\n  poolID,\n  tokenData,\n  comptrollerAddress,\n  cTokenAddress,\n  existingAssets,\n  closeModal,\n}: {\n  poolName: string;\n  poolID: string;\n  comptrollerAddress: string;\n  tokenData: TokenData;\n\n  // Only for editing mode\n  cTokenAddress?: string;\n\n  // Only for add asset modal\n  existingAssets?: USDPricedFuseAsset[];\n  closeModal: () => any;\n}) => {\n  const { t } = useTranslation();\n  const { fuse, address } = useRari();\n  const toast = useToast();\n  const queryClient = useQueryClient();\n\n  const [isDeploying, setIsDeploying] = useState(false);\n\n  const [collateralFactor, setCollateralFactor] = useState(50);\n  const [reserveFactor, setReserveFactor] = useState(10);\n  const [adminFee, setAdminFee] = useState(0);\n\n  const [isBorrowPaused, setIsBorrowPaused] = useState(false);\n\n  const scaleCollateralFactor = (_collateralFactor: number) => {\n    return _collateralFactor / 1e16;\n  };\n\n  const scaleReserveFactor = (_reserveFactor: number) => {\n    return _reserveFactor / 1e16;\n  };\n\n  const scaleAdminFee = (_adminFee: number) => {\n    return _adminFee / 1e16;\n  };\n\n  const [interestRateModel, setInterestRateModel] = useState(\n    Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n      .JumpRateModel_Cream_Stables_Majors\n  );\n\n  const { data: curves } = useQuery(\n    interestRateModel + adminFee + reserveFactor + \" irm\",\n    async () => {\n      const IRM = await fuse.identifyInterestRateModel(interestRateModel);\n\n      if (IRM === null) {\n        return null;\n      }\n\n      await IRM._init(\n        fuse.web3,\n        interestRateModel,\n        // reserve factor\n        reserveFactor * 1e16,\n        // admin fee\n        adminFee * 1e16,\n        // hardcoded 10% Fuse fee\n        0.1e18\n      );\n\n      return convertIRMtoCurve(IRM, fuse);\n    }\n  );\n\n  const deploy = async () => {\n    // If pool already contains this asset:\n    if (\n      existingAssets!.some(\n        (asset) => asset.underlyingToken === tokenData.address\n      )\n    ) {\n      toast({\n        title: \"Error!\",\n        description: \"You have already added this asset to this pool.\",\n        status: \"error\",\n        duration: 2000,\n        isClosable: true,\n        position: \"top-right\",\n      });\n\n      return;\n    }\n\n    setIsDeploying(true);\n\n    // 50% -> 0.5 * 1e18\n    const bigCollateralFacotr = new BigNumber(collateralFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    // 10% -> 0.1 * 1e18\n    const bigReserveFactor = new BigNumber(reserveFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    // 5% -> 0.05 * 1e18\n    const bigAdminFee = new BigNumber(adminFee)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    const conf: any = {\n      underlying: tokenData.address,\n      comptroller: comptrollerAddress,\n      interestRateModel,\n      initialExchangeRateMantissa: fuse.web3.utils.toBN(1e18),\n\n      // Ex: BOGGED USDC\n      name: poolName + \" \" + tokenData.name,\n      // Ex: fUSDC-456\n      symbol: \"f\" + tokenData.symbol + \"-\" + poolID,\n      decimals: 8,\n    };\n\n    try {\n      await fuse.deployAsset(\n        conf,\n        bigCollateralFacotr,\n        bigReserveFactor,\n        bigAdminFee,\n        { from: address },\n        // TODO: Disable this. This bypasses the price feed check. Only using now because only trusted partners are deploying assets.\n        true\n      );\n\n      LogRocket.track(\"Fuse-DeployAsset\");\n\n      queryClient.refetchQueries();\n      // Wait 2 seconds for refetch and then close modal.\n      // We do this instead of waiting the refetch because some refetches take a while or error out and we want to close now.\n      await new Promise((resolve) => setTimeout(resolve, 2000));\n\n      toast({\n        title: \"You have successfully added an asset to this pool!\",\n        description: \"You may now lend and borrow with this asset.\",\n        status: \"success\",\n        duration: 2000,\n        isClosable: true,\n        position: \"top-right\",\n      });\n\n      closeModal();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const liquidationIncentiveMantissa =\n    useLiquidationIncentive(comptrollerAddress);\n\n  const cTokenData = useCTokenData(comptrollerAddress, cTokenAddress);\n\n  // Update values on refetch!\n  useEffect(() => {\n    if (cTokenData) {\n      setCollateralFactor(cTokenData.collateralFactorMantissa / 1e16);\n      setReserveFactor(cTokenData.reserveFactorMantissa / 1e16);\n      setAdminFee(cTokenData.adminFeeMantissa / 1e16);\n      setInterestRateModel(cTokenData.interestRateModelAddress);\n      setIsBorrowPaused(cTokenData.isPaused);\n    }\n  }, [cTokenData]);\n\n  const togglePause = async () => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    try {\n      await comptroller.methods\n        ._setBorrowPaused(cTokenAddress, !isBorrowPaused)\n        .send({ from: address });\n\n      LogRocket.track(\"Fuse-PauseToggle\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const updateCollateralFactor = async () => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    // 70% -> 0.7 * 1e18\n    const bigCollateralFactor = new BigNumber(collateralFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    try {\n      await testForComptrollerErrorAndSend(\n        comptroller.methods._setCollateralFactor(\n          cTokenAddress,\n          bigCollateralFactor\n        ),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateCollateralFactor\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const updateReserveFactor = async () => {\n    const cToken = createCToken(fuse, cTokenAddress!);\n\n    // 10% -> 0.1 * 1e18\n    const bigReserveFactor = new BigNumber(reserveFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n    try {\n      await testForCTokenErrorAndSend(\n        cToken.methods._setReserveFactor(bigReserveFactor),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateReserveFactor\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const updateAdminFee = async () => {\n    const cToken = createCToken(fuse, cTokenAddress!);\n\n    // 5% -> 0.05 * 1e18\n    const bigAdminFee = new BigNumber(adminFee)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    try {\n      await testForCTokenErrorAndSend(\n        cToken.methods._setAdminFee(bigAdminFee),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateAdminFee\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const updateInterestRateModel = async () => {\n    const cToken = createCToken(fuse, cTokenAddress!);\n\n    try {\n      await testForCTokenErrorAndSend(\n        cToken.methods._setInterestRateModel(interestRateModel),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateInterestRateModel\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  return (\n    cTokenAddress ? cTokenData?.cTokenAddress === cTokenAddress : true\n  ) ? (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      overflowY=\"auto\"\n      width=\"100%\"\n      height=\"100%\"\n    >\n      <ConfigRow height=\"35px\">\n        <SimpleTooltip\n          label={t(\n            \"Collateral factor can range from 0-90%, and represents the proportionate increase in liquidity (borrow limit) that an account receives by depositing the asset.\"\n          )}\n        >\n          <Text fontWeight=\"bold\">\n            {t(\"Collateral Factor\")} <QuestionIcon ml={1} mb=\"4px\" />\n          </Text>\n        </SimpleTooltip>\n\n        {cTokenData &&\n        collateralFactor !==\n          scaleCollateralFactor(cTokenData.collateralFactorMantissa) ? (\n          <SaveButton ml={3} onClick={updateCollateralFactor} />\n        ) : null}\n\n        <SliderWithLabel\n          ml=\"auto\"\n          value={collateralFactor}\n          setValue={setCollateralFactor}\n          formatValue={formatPercentage}\n          step={0.5}\n          max={\n            liquidationIncentiveMantissa\n              ? // 100% CF - Liquidation Incentive (ie: 8%) - 5% buffer\n                100 - (liquidationIncentiveMantissa.toString() / 1e16 - 100) - 5\n              : 90\n          }\n        />\n      </ConfigRow>\n\n      <ModalDivider />\n      {cTokenAddress ? (\n        <ConfigRow>\n          <SimpleTooltip\n            label={t(\"If enabled borrowing this asset will be disabled.\")}\n          >\n            <Text fontWeight=\"bold\">\n              {t(\"Pause Borrowing\")} <QuestionIcon ml={1} mb=\"4px\" />\n            </Text>\n          </SimpleTooltip>\n\n          <SaveButton\n            ml=\"auto\"\n            onClick={togglePause}\n            fontSize=\"xs\"\n            altText={\n              isBorrowPaused ? t(\"Enable Borrowing\") : t(\"Pause Borrowing\")\n            }\n          />\n        </ConfigRow>\n      ) : null}\n\n      <ModalDivider />\n\n      <ConfigRow height=\"35px\">\n        <SimpleTooltip\n          label={t(\n            \"The fraction of interest generated on a given asset that is routed to the asset's Reserve Pool. The Reserve Pool protects lenders against borrower default and liquidation malfunction.\"\n          )}\n        >\n          <Text fontWeight=\"bold\">\n            {t(\"Reserve Factor\")} <QuestionIcon ml={1} mb=\"4px\" />\n          </Text>\n        </SimpleTooltip>\n\n        {cTokenData &&\n        reserveFactor !==\n          scaleReserveFactor(cTokenData.reserveFactorMantissa) ? (\n          <SaveButton ml={3} onClick={updateReserveFactor} />\n        ) : null}\n\n        <SliderWithLabel\n          ml=\"auto\"\n          value={reserveFactor}\n          setValue={setReserveFactor}\n          formatValue={formatPercentage}\n          max={50}\n        />\n      </ConfigRow>\n      <ModalDivider />\n\n      <ConfigRow height=\"35px\">\n        <SimpleTooltip\n          label={t(\n            \"The fraction of interest generated on a given asset that is routed to the asset's admin address as a fee.\"\n          )}\n        >\n          <Text fontWeight=\"bold\">\n            {t(\"Admin Fee\")} <QuestionIcon ml={1} mb=\"4px\" />\n          </Text>\n        </SimpleTooltip>\n\n        {cTokenData &&\n        adminFee !== scaleAdminFee(cTokenData.adminFeeMantissa) ? (\n          <SaveButton ml={3} onClick={updateAdminFee} />\n        ) : null}\n\n        <SliderWithLabel\n          ml=\"auto\"\n          value={adminFee}\n          setValue={setAdminFee}\n          formatValue={formatPercentage}\n          max={30}\n        />\n      </ConfigRow>\n\n      <ModalDivider />\n\n      <ConfigRow>\n        <SimpleTooltip\n          label={t(\n            \"The interest rate model chosen for an asset defines the rates of interest for borrowers and suppliers at different utilization levels.\"\n          )}\n        >\n          <Text fontWeight=\"bold\">\n            {t(\"Interest Model\")} <QuestionIcon ml={1} mb=\"4px\" />\n          </Text>\n        </SimpleTooltip>\n\n        <Select\n          {...DASHBOARD_BOX_PROPS}\n          ml=\"auto\"\n          borderRadius=\"7px\"\n          fontWeight=\"bold\"\n          _focus={{ outline: \"none\" }}\n          width=\"260px\"\n          value={interestRateModel.toLowerCase()}\n          onChange={(event) => setInterestRateModel(event.target.value)}\n        >\n          {Object.entries(\n            Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n          ).map(([key, value]) => {\n            return (\n              <option\n                className=\"black-bg-option\"\n                value={value.toLowerCase()}\n                key={key}\n              >\n                {key}\n              </option>\n            );\n          })}\n        </Select>\n\n        {cTokenData &&\n        cTokenData.interestRateModelAddress.toLowerCase() !==\n          interestRateModel.toLowerCase() ? (\n          <SaveButton\n            height=\"40px\"\n            borderRadius=\"7px\"\n            onClick={updateInterestRateModel}\n          />\n        ) : null}\n      </ConfigRow>\n\n      <Box\n        height=\"170px\"\n        width=\"100%\"\n        color=\"#000000\"\n        overflow=\"hidden\"\n        pl={2}\n        pr={3}\n        className=\"hide-bottom-tooltip\"\n        flexShrink={0}\n      >\n        {curves ? (\n          <Chart\n            options={\n              {\n                ...FuseIRMDemoChartOptions,\n                colors: [\"#FFFFFF\", tokenData.color! ?? \"#282727\"],\n              } as any\n            }\n            type=\"line\"\n            width=\"100%\"\n            height=\"100%\"\n            series={[\n              {\n                name: \"Borrow Rate\",\n                data: curves.borrowerRates,\n              },\n              {\n                name: \"Deposit Rate\",\n                data: curves.supplierRates,\n              },\n            ]}\n          />\n        ) : curves === undefined ? (\n          <Center expand color=\"#FFF\">\n            <Spinner my={8} />\n          </Center>\n        ) : (\n          <Center expand color=\"#FFFFFF\">\n            <Text>\n              {t(\"No graph is available for this asset's interest curves.\")}\n            </Text>\n          </Center>\n        )}\n      </Box>\n\n      {cTokenAddress ? null : (\n        <Box px={4} mt={4} width=\"100%\">\n          <Button\n            fontWeight=\"bold\"\n            fontSize=\"2xl\"\n            borderRadius=\"10px\"\n            width=\"100%\"\n            height=\"70px\"\n            color={tokenData.overlayTextColor! ?? \"#000\"}\n            bg={tokenData.color! ?? \"#FFF\"}\n            _hover={{ transform: \"scale(1.02)\" }}\n            _active={{ transform: \"scale(0.95)\" }}\n            isLoading={isDeploying}\n            onClick={deploy}\n          >\n            {t(\"Confirm\")}\n          </Button>\n        </Box>\n      )}\n    </Column>\n  ) : (\n    <Center expand>\n      <Spinner my={8} />\n    </Center>\n  );\n};\n\nconst AddAssetModal = ({\n  comptrollerAddress,\n  poolName,\n  poolID,\n  isOpen,\n  onClose,\n  existingAssets,\n}: {\n  comptrollerAddress: string;\n  poolName: string;\n  poolID: string;\n  isOpen: boolean;\n  onClose: () => any;\n  existingAssets: USDPricedFuseAsset[];\n}) => {\n  const { t } = useTranslation();\n\n  const [tokenAddress, _setTokenAddress] = useState<string>(\"\");\n\n  const tokenData = useTokenData(tokenAddress);\n\n  const isEmpty = tokenAddress.trim() === \"\";\n\n  return (\n    <Modal\n      motionPreset=\"slideInBottom\"\n      isOpen={isOpen}\n      onClose={onClose}\n      isCentered\n    >\n      <ModalOverlay />\n      <ModalContent {...MODAL_PROPS}>\n        <Heading fontSize=\"27px\" my={4} textAlign=\"center\">\n          {t(\"Add Asset\")}\n        </Heading>\n\n        <ModalDivider />\n\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          pb={4}\n        >\n          {!isEmpty ? (\n            <>\n              {tokenData?.logoURL ? (\n                <Image\n                  mt={4}\n                  src={tokenData.logoURL}\n                  boxSize=\"50px\"\n                  borderRadius=\"50%\"\n                  backgroundImage={`url(${SmallWhiteCircle})`}\n                  backgroundSize=\"100% auto\"\n                />\n              ) : null}\n              <Heading\n                my={tokenData?.symbol ? 3 : 6}\n                fontSize=\"22px\"\n                color={tokenData?.color ?? \"#FFF\"}\n              >\n                {tokenData\n                  ? tokenData.name ?? \"Invalid Address!\"\n                  : \"Loading...\"}\n              </Heading>\n            </>\n          ) : null}\n\n          <Center px={4} mt={isEmpty ? 4 : 0} width=\"100%\">\n            <Input\n              width=\"100%\"\n              textAlign=\"center\"\n              placeholder={t(\n                \"Token Address: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n              )}\n              height=\"40px\"\n              variant=\"filled\"\n              size=\"sm\"\n              value={tokenAddress}\n              onChange={(event) => {\n                const address = event.target.value;\n                _setTokenAddress(address);\n              }}\n              {...DASHBOARD_BOX_PROPS}\n              _placeholder={{ color: \"#e0e0e0\" }}\n              _focus={{ bg: \"#121212\" }}\n              _hover={{ bg: \"#282727\" }}\n              bg=\"#282727\"\n            />\n\n            {!existingAssets.some(\n              // If ETH hasn't been added:\n              (asset) => asset.underlyingToken === ETH_TOKEN_DATA.address\n            ) ? (\n              <DashboardBox\n                flexShrink={0}\n                as=\"button\"\n                ml={2}\n                height=\"40px\"\n                borderRadius=\"10px\"\n                px={2}\n                fontSize=\"sm\"\n                fontWeight=\"bold\"\n                onClick={() => _setTokenAddress(ETH_TOKEN_DATA.address)}\n              >\n                <Center expand>ETH</Center>\n              </DashboardBox>\n            ) : null}\n          </Center>\n\n          {tokenData?.symbol ? (\n            <>\n              <ModalDivider mt={4} />\n              <AssetSettings\n                comptrollerAddress={comptrollerAddress}\n                tokenData={tokenData}\n                closeModal={onClose}\n                poolName={poolName}\n                poolID={poolID}\n                existingAssets={existingAssets}\n              />\n            </>\n          ) : null}\n        </Column>\n      </ModalContent>\n    </Modal>\n  );\n};\n\nexport default AddAssetModal;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/AddRewardsDistributorModal.tsx",
    "content": "import {\n  Heading,\n  Modal,\n  ModalContent,\n  ModalOverlay,\n  Input,\n  Button,\n  Box,\n  Text,\n  Image,\n  RadioGroup,\n  Stack,\n  Radio,\n  useToast,\n} from \"@chakra-ui/react\";\n\nimport { Column, Center, Row } from \"utils/chakraUtils\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport DashboardBox, {\n  DASHBOARD_BOX_PROPS,\n} from \"../../../shared/DashboardBox\";\nimport { ModalDivider, MODAL_PROPS } from \"../../../shared/Modal\";\n\nimport { ETH_TOKEN_DATA, TokenData, useTokenData } from \"hooks/useTokenData\";\nimport SmallWhiteCircle from \"static/small-white-circle.png\";\nimport { useRari } from \"context/RariContext\";\nimport Fuse from \"fuse-sdk\";\n\nimport { ConfigRow } from \"../FusePoolEditPage\";\n\nimport {\n  createComptroller,\n  createRewardsDistributor,\n} from \"utils/createComptroller\";\nimport Web3 from \"web3\";\nimport TransactionStepper from \"components/shared/TransactionStepper\";\n\nconst steps = [\n  \"Deploying Rewards Distributor\",\n  \"Configuring Comptroller\",\n];\n\nconst AddRewardsDistributorModal = ({\n  comptrollerAddress,\n  poolName,\n  poolID,\n  isOpen,\n  onClose,\n}: {\n  comptrollerAddress: string;\n  poolName: string;\n  poolID: string;\n  isOpen: boolean;\n  onClose: () => any;\n}) => {\n  const { fuse, address: userAddress } = useRari();\n  const { t } = useTranslation();\n  const toast = useToast();\n\n  const [isDeploying, setIsDeploying] = useState(false);\n\n  const [address, setAddress] = useState<string>(\n    \"\"\n  );\n  const [rewardToken, setRewardToken] = useState<string>(\"\");\n\n  // If you have selected \"Add RewardsDistributor, this value will be filled\"\n  const [nav, setNav] = useState<Nav>(Nav.CREATE);\n\n  // Stepper\n  const [activeStep, setActiveStep] = useState<0 | 1 | 2>(0);\n\n  const tokenData = useTokenData(rewardToken);\n\n  const isEmpty = address.trim() === \"\";\n\n  useEffect(() => {\n    const isRewardsDistributorAddress = nav === Nav.ADD;\n    if (isRewardsDistributorAddress) {\n      setRewardToken(\"\");\n    }\n\n    try {\n      const validAddress = Web3.utils.toChecksumAddress(address);\n      if (validAddress && isRewardsDistributorAddress) {\n        const rd = createRewardsDistributor(address, fuse);\n        rd.methods\n          .rewardToken()\n          .call()\n          .then((tokenAddr: string) => setRewardToken(tokenAddr));\n      }\n\n      // If we're creating a rewardsDistributor then this is the rewardToken\n      if (validAddress && !isRewardsDistributorAddress) {\n        setRewardToken(address);\n      }\n    } catch (err) {\n      return;\n    }\n\n    // If we're adding a rewardsDistributor then get the rewardToken\n  }, [fuse, address, nav]);\n\n  const handleDeploy = async () => {\n    if (!tokenData) return;\n    setIsDeploying(true);\n\n    let rDAddress = address;\n    try {\n      if (nav === Nav.CREATE) {\n        rDAddress = await deploy();\n      }\n    } catch (err) {\n      console.log({ err });\n      setIsDeploying(false);\n      toast({\n        title: \"Error deploying RewardsDistributor\",\n        description: \"\",\n        status: \"error\",\n        duration: 10000,\n        isClosable: true,\n        position: \"top-right\",\n      });\n      return;\n    }\n\n    setActiveStep(1);\n\n    try {\n      await addRDToComptroller(comptrollerAddress, rDAddress, fuse);\n\n      setIsDeploying(false);\n      onClose();\n    } catch (err) {\n      console.log({ err });\n      setIsDeploying(false);\n      toast({\n        title: \"Error adding RewardsDistributor to Comptroller\",\n        description: \"\",\n        status: \"error\",\n        duration: 10000,\n        isClosable: true,\n        position: \"top-right\",\n      });\n      return;\n    }\n  };\n\n  // Deploy new RD\n  const deploy = async (): Promise<string> => {\n    if (!tokenData) throw new Error(\"No tokendata \");\n\n    const deployedDistributor = await fuse.deployRewardsDistributor(\n      tokenData.address,\n      {\n        from: userAddress,\n      }\n    );\n\n    toast({\n      title: \"RewardsDistributor Deployed\",\n      description: \"RewardsDistributor for \" + tokenData.symbol + \" deployed\",\n      status: \"success\",\n      duration: 2000,\n      isClosable: true,\n      position: \"top-right\",\n    });\n\n    const rDAddress = deployedDistributor.options.address;\n    return rDAddress;\n  };\n\n  const addRDToComptroller = async (\n    comptrollerAddress: string,\n    rDAddress: string,\n    fuse: Fuse\n  ) => {\n    const comptroller = await createComptroller(comptrollerAddress, fuse);\n\n    if (!comptroller || !comptroller.methods._addRewardsDistributor) {\n      throw new Error(\"Could not create Comptroller\");\n    }\n\n    // Add distributor to pool Comptroller\n    await comptroller.methods\n      ._addRewardsDistributor(rDAddress)\n      .send({ from: userAddress });\n\n    toast({\n      title: \"RewardsDistributor Added to Pool\",\n      description: \"\",\n      status: \"success\",\n      duration: 2000,\n      isClosable: true,\n      position: \"top-right\",\n    });\n  };\n\n  const subtitle = useMemo(() => {\n    if (nav === Nav.CREATE) {\n      return tokenData\n        ? tokenData.name ?? \"Invalid ERC20 Token Address!\"\n        : \"Loading...\";\n    } else {\n      return tokenData\n        ? tokenData.name ?? \"Invalid RewardsDistributor Address!\"\n        : \"Loading...\";\n    }\n  }, [tokenData, nav]);\n\n  return (\n    <Modal\n      motionPreset=\"slideInBottom\"\n      isOpen={isOpen}\n      onClose={onClose}\n      isCentered\n      size=\"lg\"\n    >\n      <ModalOverlay />\n      <ModalContent {...MODAL_PROPS}>\n        <Heading fontSize=\"27px\" my={4} textAlign=\"center\">\n          {nav === Nav.CREATE\n            ? t(\"Deploy Rewards Distributor\")\n            : t(\"Add Rewards Distributor\")}\n        </Heading>\n\n        <ModalDivider />\n\n        <Box h=\"100%\" w=\"100%\" bg=\"\">\n          <Row\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"flex-start\"\n            bg=\"\"\n            p={4}\n          >\n            <RadioGroup onChange={(value: Nav) => setNav(value)} value={nav}>\n              <Stack direction=\"row\">\n                <Radio value={Nav.CREATE} disabled={isDeploying}>\n                  Create\n                </Radio>\n                <Radio value={Nav.ADD} disabled={isDeploying}>\n                  Add\n                </Radio>\n              </Stack>\n            </RadioGroup>\n          </Row>\n\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n            pb={4}\n          >\n            {!isEmpty ? (\n              <>\n                {tokenData?.logoURL ? (\n                  <Image\n                    mt={4}\n                    src={tokenData.logoURL}\n                    boxSize=\"50px\"\n                    borderRadius=\"50%\"\n                    backgroundImage={`url(${SmallWhiteCircle})`}\n                    backgroundSize=\"100% auto\"\n                  />\n                ) : null}\n                <Heading\n                  my={tokenData?.symbol ? 3 : 6}\n                  fontSize=\"22px\"\n                  color={tokenData?.color ?? \"#FFF\"}\n                >\n                  {subtitle}\n                </Heading>\n              </>\n            ) : null}\n\n            <Center px={4} mt={isEmpty ? 4 : 0} width=\"100%\">\n              <Input\n                width=\"100%\"\n                textAlign=\"center\"\n                placeholder={\n                  nav === Nav.CREATE\n                    ? t(\n                        \"Token Address: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\"\n                      )\n                    : t(\"RewardsDistributor Address:\")\n                }\n                height=\"40px\"\n                variant=\"filled\"\n                size=\"sm\"\n                value={address}\n                onChange={(event) => setAddress(event.target.value)}\n                {...DASHBOARD_BOX_PROPS}\n                _placeholder={{ color: \"#e0e0e0\" }}\n                _focus={{ bg: \"#121212\" }}\n                _hover={{ bg: \"#282727\" }}\n                bg=\"#282727\"\n              />\n            </Center>\n\n            {isDeploying && (\n              <Box my={3} w=\"100%\" h=\"100%\">\n                <TransactionStepper\n                  activeStep={activeStep}\n                  tokenData={tokenData}\n                  steps={steps}\n                />\n              </Box>\n            )}\n\n            {tokenData?.symbol && (\n              <Box px={4} mt={4} width=\"100%\">\n                <Button\n                  fontWeight=\"bold\"\n                  fontSize=\"2xl\"\n                  borderRadius=\"10px\"\n                  width=\"100%\"\n                  height=\"70px\"\n                  color={tokenData.overlayTextColor! ?? \"#000\"}\n                  bg={tokenData.color! ?? \"#FFF\"}\n                  _hover={{ transform: \"scale(1.02)\" }}\n                  _active={{ transform: \"scale(0.95)\" }}\n                  // isLoading={isDeploying}\n                  disabled={isDeploying}\n                  onClick={handleDeploy}\n                >\n                  {isDeploying\n                    ? steps[activeStep]\n                    : nav === Nav.CREATE\n                    ? t(\"Deploy RewardsDistributor\")\n                    : t(\"Add RewardsDistributor\")}\n                </Button>\n              </Box>\n            )}\n          </Column>\n        </Box>\n      </ModalContent>\n    </Modal>\n  );\n};\n\nexport default AddRewardsDistributorModal;\n\nenum Nav {\n  CREATE = \"Create\",\n  ADD = \"ADD\",\n}\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/Edit/AssetConfiguration.tsx",
    "content": "import { Box, Center, Heading, Text } from \"@chakra-ui/layout\";\nimport { Spinner } from \"@chakra-ui/spinner\";\nimport DashboardBox from \"components/shared/DashboardBox\";\nimport { ModalDivider } from \"components/shared/Modal\";\nimport { useRari } from \"context/RariContext\";\nimport { OracleDataType, useOracleData } from \"hooks/fuse/useOracleData\";\nimport { useIsUpgradeable } from \"hooks/useIsUpgradable\";\nimport { useTokenData } from \"hooks/useTokenData\";\nimport { useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Column } from \"utils/chakraUtils\";\nimport { USDPricedFuseAsset } from \"utils/fetchFusePoolData\";\nimport { ConfigRow } from \"../../FusePoolEditPage\";\nimport AssetSettings from \"../AddAssetModal/AssetSettings\";\n\nconst activeStyle = { bg: \"#FFF\", color: \"#000\" };\nconst noop = () => {};  \n\nconst AssetConfiguration = ({\n  openAddAssetModal,\n  assets,\n  comptrollerAddress,\n  poolOracleAddress,\n  oracleModel,\n  poolName,\n  poolID,\n}: {\n  openAddAssetModal: () => any;\n  assets: USDPricedFuseAsset[];\n  comptrollerAddress: string;\n  poolOracleAddress: string;\n  oracleModel: string | undefined;\n  poolName: string;\n  poolID: string;\n}) => {\n  const { t } = useTranslation();\n  const { fuse } = useRari();\n  const oracleData = useOracleData(poolOracleAddress, fuse, oracleModel);\n  const [selectedAsset, setSelectedAsset] = useState(assets[0]);\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      height=\"100%\"\n      width=\"100%\"\n      flexShrink={0}\n    >\n      <ConfigRow mainAxisAlignment=\"space-between\">\n        <Heading size=\"sm\">{t(\"Assets Configuration\")}</Heading>\n\n        <AddAssetButton\n          comptrollerAddress={comptrollerAddress}\n          openAddAssetModal={openAddAssetModal}\n        />\n      </ConfigRow>\n\n      <ModalDivider />\n\n      <ConfigRow>\n        <Text fontWeight=\"bold\" mr={2}>\n          {t(\"Assets:\")}\n        </Text>\n\n        {assets.map((asset, index, array) => {\n          return (\n            <Box\n              pr={index === array.length - 1 ? 4 : 2}\n              key={asset.cToken}\n              flexShrink={0}\n            >\n              <DashboardBox\n                as=\"button\"\n                onClick={() => setSelectedAsset(asset)}\n                {...(asset.cToken === selectedAsset.cToken\n                  ? activeStyle\n                  : noop)}\n              >\n                <Center expand px={4} py={1} fontWeight=\"bold\">\n                  {asset.underlyingSymbol}\n                </Center>\n              </DashboardBox>\n            </Box>\n          );\n        })}\n      </ConfigRow>\n\n      <ModalDivider />\n\n      <ColoredAssetSettings\n        comptrollerAddress={comptrollerAddress}\n        tokenAddress={selectedAsset.underlyingToken}\n        cTokenAddress={selectedAsset.cToken}\n        poolName={poolName}\n        poolID={poolID}\n        poolOracleAddress={poolOracleAddress}\n        oracleModel={oracleModel}\n        oracleData={oracleData}\n      />\n    </Column>\n  );\n};\n\nexport default AssetConfiguration;\n\nexport const AddAssetButton = ({\n  openAddAssetModal,\n  comptrollerAddress,\n}: {\n  openAddAssetModal: () => any;\n  comptrollerAddress: string;\n}) => {\n  const { t } = useTranslation();\n\n  const isUpgradeable = useIsUpgradeable(comptrollerAddress);\n\n  return isUpgradeable ? (\n    <DashboardBox\n      onClick={openAddAssetModal}\n      as=\"button\"\n      py={1}\n      px={2}\n      fontWeight=\"bold\"\n    >\n      {t(\"Add Asset\")}\n    </DashboardBox>\n  ) : null;\n};\n\nconst ColoredAssetSettings = ({\n  tokenAddress,\n  poolName,\n  poolID,\n  comptrollerAddress,\n  cTokenAddress,\n  poolOracleAddress,\n  oracleModel,\n  oracleData,\n}: {\n  tokenAddress: string;\n  poolName: string;\n  poolID: string;\n  comptrollerAddress: string;\n  cTokenAddress: string;\n  poolOracleAddress: string;\n  oracleModel: string | undefined;\n  oracleData: OracleDataType | undefined;\n}) => {\n  const tokenData = useTokenData(tokenAddress);\n\n  return tokenData ? (\n    <AssetSettings\n      mode=\"Editing\"\n      tokenAddress={tokenAddress}\n      poolOracleAddress={poolOracleAddress}\n      oracleModel={oracleModel}\n      oracleData={oracleData}\n      closeModal={noop}\n      comptrollerAddress={comptrollerAddress}\n      poolName={poolName}\n      poolID={poolID}\n      tokenData={tokenData}\n      cTokenAddress={cTokenAddress}\n    />\n  ) : (\n    <Center expand>\n      <Spinner my={8} />\n    </Center>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/Edit/MarketCapConfigurator.tsx",
    "content": "// Charka and UI\nimport { ConfigRow, SaveButton } from \"../../FusePoolEditPage\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\nimport { Box, Text } from \"@chakra-ui/layout\";\nimport { QuestionIcon } from \"@chakra-ui/icons\";\nimport { useTranslation } from \"react-i18next\";\nimport { Input } from \"@chakra-ui/react\";\nimport { Row } from \"utils/chakraUtils\";\nimport { useState } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport { createComptroller } from \"utils/createComptroller\";\nimport { Button } from \"@chakra-ui/button\";\nimport { handleGenericError } from \"utils/errorHandling\";\nimport { useToast } from \"@chakra-ui/toast\";\nimport { TokenData } from \"hooks/useTokenData\";\n\nconst MarketCapConfigurator = ({\n  comptrollerAddress,\n  cTokenAddress,\n  tokenData,\n  mode,\n}: {\n  comptrollerAddress: string;\n  cTokenAddress: string | undefined;\n  tokenData: TokenData;\n  mode: \"Supply\" | \"Borrow\";\n}) => {\n  const { t } = useTranslation();\n  const [newSupplyCap, setNewSupplyCap] = useState<string>(\"\");\n  const { fuse, address } = useRari();\n  const toast = useToast();\n\n  const tokenSymbol = tokenData.symbol\n\n  const comptroller = createComptroller(comptrollerAddress, fuse);\n\n  const { data: supplyCap } = useQuery(\n    \"Get \" + mode + \" cap for: \" + tokenSymbol,\n    async () => {\n      if (cTokenAddress) {\n        if (mode === \"Supply\") {\n          return await comptroller.methods.supplyCaps(cTokenAddress).call();\n        }\n\n        if (mode === \"Borrow\") {\n          return await comptroller.methods.borrowCaps(cTokenAddress).call();\n        }\n      }\n    }\n  );\n\n\n  const handleSubmit = async (\n    cTokenAddress: string | undefined,\n    newSupplyCap: number\n  ) => {\n    const tokenDecimals = tokenData.decimals ?? 18\n    const newSupplyCapInWei = newSupplyCap * (10 ** tokenDecimals)\n\n    if (!cTokenAddress) return\n\n    try {\n      if (mode === \"Supply\")\n        await comptroller.methods\n          ._setMarketSupplyCaps([cTokenAddress], [newSupplyCapInWei])\n          .send({ from: address });\n\n      if (mode === \"Borrow\")\n        await comptroller.methods\n          ._setMarketBorrowCaps([cTokenAddress], [newSupplyCapInWei])\n          .send({ from: address });\n\n      toast({\n        title: \"Success!\",\n        description: \"You've updated the asset's\" + mode + \" cap.\",\n        status: \"success\",\n        duration: 2000,\n        isClosable: true,\n        position: \"top-right\",\n      });\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n\n  const displayedSupplyCap = (parseInt(supplyCap) / (10 ** (tokenData?.decimals ?? 18))).toLocaleString() + \" \" + tokenSymbol\n\n  return (\n    <>\n      <Row\n        mainAxisAlignment=\"center\"\n        justifyContent=\"space-between\"\n        crossAxisAlignment=\"center\"\n        width=\"100%\"\n        my={4}\n        px={4}\n        height=\"100%\"\n      >\n        <SimpleTooltip\n          label={t(\n            \"Sets cap for the market. Users will not be able to supply/borrow once the cap is met.\"\n          )}\n        >\n          <Text fontWeight=\"bold\">\n            {mode + \" caps\"} <QuestionIcon ml={1} mb=\"4px\" />\n          </Text>\n        </SimpleTooltip>\n        <Box\n          width=\"50%\"\n          height=\"auto\"\n          display=\"flex\"\n          flexDirection=\"column\"\n          justifyContent=\"center\"\n          alignItems=\"flex-end\"\n          alignContent=\"center\"\n        >\n          <Input\n            width=\"150px\"\n            height=\"30px\"\n            extAlign=\"center\"\n            mb={newSupplyCap !== \"\" ? 5 : 0}\n            placeholder={\n              supplyCap > 0\n                ? displayedSupplyCap\n                : t(`${tokenSymbol} Cap`)\n            }\n            type=\"number\"\n            size=\"sm\"\n            value={newSupplyCap}\n            onChange={(event) => {\n              setNewSupplyCap(event.target.value);\n            }}\n          />\n\n          {newSupplyCap !== \"\" ? (\n            <Box\n              height=\"100%\"\n              width=\"100%\"\n              display=\"flex\"\n              justifyContent=\"flex-end\"\n              flexDirection=\"column\"\n            >\n              <Box\n                display=\"flex\"\n                justifyContent=\"space-between\"\n                alignContent=\"center\"\n              >\n                <Text size=\"sm\" opacity=\"0.7\">\n                  New supply cap:\n                </Text>\n                <Box height=\"100%\" width=\"40%\">\n                  <Text opacity=\"0.5\" textAlign=\"end\">\n                    {parseInt(newSupplyCap).toLocaleString()} {tokenSymbol} \n                  </Text>\n                </Box>\n              </Box>\n\n              {supplyCap === \"0\" ? null : (\n                <Box\n                  display=\"flex\"\n                  justifyContent=\"space-between\"\n                  alignContent=\"center\"\n                >\n                  <Text size=\"sm\" opacity=\"0.7\">\n                    Current supply cap:\n                  </Text>\n                  <Box height=\"100%\" width=\"40%\">\n                    <Text opacity=\"0.5\" textAlign=\"end\">\n                     {displayedSupplyCap}\n                    </Text>\n                  </Box>\n                </Box>\n              )}\n              <SaveButton\n                mt=\"2\"\n                ml=\"auto\"\n                onClick={() =>\n                  handleSubmit(cTokenAddress, parseInt(newSupplyCap))\n                }\n                fontSize=\"xs\"\n                altText={\"Submit\"}\n              />\n            </Box>\n          ) : null}\n        </Box>\n      </Row>\n    </>\n  );\n};\n\nexport default MarketCapConfigurator;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/Edit/OraclesTable.tsx",
    "content": "// Chakra and UI\nimport {\n  AvatarGroup,\n  Text,\n  Link,\n  // Table\n  Table,\n  Thead,\n  Tbody,\n  Tr,\n  Th,\n  Td,\n} from \"@chakra-ui/react\";\nimport { CTokenIcon } from \"components/shared/CTokenIcon\";\nimport { useIdentifyOracle } from \"hooks/fuse/useOracleData\";\nimport { shortAddress } from \"utils/shortAddress\";\n\nconst OraclesTable = ({\n  data,\n  oraclesMap,\n}: {\n  data: any;\n  oraclesMap: {\n    [oracleAddr: string]: string[];\n  };\n}) => {\n  return (\n    <Table variant=\"unstyled\">\n      <Thead>\n        <Tr>\n          <Th color=\"white\">Oracle:</Th>\n          <Th color=\"white\">Assets</Th>\n        </Tr>\n      </Thead>\n      <Tbody>\n        {!!data.defaultOracle && (\n          <OracleRow\n            oracle={data.defaultOracle}\n            underlyings={[]}\n            isDefault={true}\n          />\n        )}\n        {Object.keys(oraclesMap).map((oracle) => {\n          const underlyings = oraclesMap[oracle];\n          return <OracleRow oracle={oracle} underlyings={underlyings} />;\n        })}\n      </Tbody>\n    </Table>\n  );\n};\n\nconst OracleRow = ({\n  oracle,\n  underlyings,\n  isDefault = false,\n}: {\n  oracle: string;\n  underlyings: string[];\n  isDefault?: boolean;\n}) => {\n  const oracleIdentity = useIdentifyOracle(oracle);\n\n  const displayedOracle = !!oracleIdentity\n    ? oracleIdentity\n    : shortAddress(oracle);\n\n  return (\n    <>\n      <Tr>\n        <Td>\n          <Link\n            href={`https://etherscan.io/address/${oracle}`}\n            isExternal\n            _hover={{ pointer: \"cursor\", color: \"#21C35E\" }}\n          >\n            <Text fontWeight=\"bold\">{displayedOracle}</Text>\n          </Link>\n        </Td>\n        <Td>\n          {isDefault ? (\n            <span style={{ fontWeight: \"bold\" }}>DEFAULT</span>\n          ) : (\n            <AvatarGroup size=\"xs\" max={30} mr={2}>\n              {underlyings.map((underlying) => {\n                return <CTokenIcon key={underlying} address={underlying} />;\n              })}\n            </AvatarGroup>\n          )}\n        </Td>\n      </Tr>\n    </>\n  );\n};\n\nexport default OraclesTable;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/Edit/PoolConfiguration.tsx",
    "content": "import OraclesTable from \"./OraclesTable\";\n\nimport { Box, Center, Heading, Text } from \"@chakra-ui/layout\";\nimport { Spinner } from \"@chakra-ui/spinner\";\nimport { DASHBOARD_BOX_PROPS } from \"components/shared/DashboardBox\";\nimport { ModalDivider } from \"components/shared/Modal\";\nimport { useRari } from \"context/RariContext\";\nimport { useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Column } from \"utils/chakraUtils\";\nimport { USDPricedFuseAsset } from \"utils/fetchFusePoolData\";\nimport {\n  ConfigRow,\n  SaveButton,\n  testForComptrollerErrorAndSend,\n} from \"../../FusePoolEditPage\";\nimport AssetSettings from \"../AddAssetModal/AssetSettings\";\nimport { useParams } from \"react-router\";\nimport { useQueryClient } from \"react-query\";\nimport { useToast } from \"@chakra-ui/toast\";\nimport { useExtraPoolInfo } from \"../../FusePoolInfoPage\";\nimport useOraclesForPool from \"hooks/fuse/useOraclesForPool\";\nimport { createComptroller, createUnitroller } from \"utils/createComptroller\";\nimport LogRocket from \"logrocket\";\nimport { handleGenericError } from \"utils/errorHandling\";\nimport BigNumber from \"bignumber.js\";\nimport { CTokenAvatarGroup } from \"components/shared/CTokenIcon\";\nimport { WhitelistInfo } from \"../../FusePoolCreatePage\";\nimport { Input } from \"@chakra-ui/input\";\nimport { SliderWithLabel } from \"components/shared/SliderWithLabel\";\nimport { Switch } from \"@chakra-ui/switch\";\n\nconst formatPercentage = (value: number) => value.toFixed(0) + \"%\";\n\n\nconst PoolConfiguration = ({\n  assets,\n  comptrollerAddress,\n  oracleAddress,\n}: {\n  assets: USDPricedFuseAsset[];\n  comptrollerAddress: string;\n  oracleAddress: string;\n}) => {\n  const { t } = useTranslation();\n  const { poolId } = useParams();\n\n  const { fuse, address } = useRari();\n\n  const queryClient = useQueryClient();\n  const toast = useToast();\n\n  const data = useExtraPoolInfo(comptrollerAddress, oracleAddress);\n\n  // Maps underlying to oracle\n  const oraclesMap = useOraclesForPool(\n    oracleAddress,\n    assets.map((asset: USDPricedFuseAsset) => asset.underlyingToken) ?? []\n  );\n\n  const changeWhitelistStatus = async (enforce: boolean) => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    try {\n      await testForComptrollerErrorAndSend(\n        comptroller.methods._setWhitelistEnforcement(enforce),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-ChangeWhitelistStatus\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const addToWhitelist = async (newUser: string) => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    const newList = [...data!.whitelist, newUser];\n\n    try {\n      await testForComptrollerErrorAndSend(\n        comptroller.methods._setWhitelistStatuses(\n          newList,\n          Array(newList.length).fill(true)\n        ),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-AddToWhitelist\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const removeFromWhitelist = async (removeUser: string) => {\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    const whitelist = data!.whitelist;\n    try {\n      await testForComptrollerErrorAndSend(\n        comptroller.methods._setWhitelistStatuses(\n          whitelist,\n          whitelist.map((user: string) => user !== removeUser)\n        ),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-RemoveFromWhitelist\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const [admin, setAdmin] = useState(address);\n\n  const revokeRights = async () => {\n    const unitroller = createUnitroller(comptrollerAddress, fuse);\n\n    try {\n      await testForComptrollerErrorAndSend(\n        unitroller.methods._toggleAdminRights(false),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-RevokeRights\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const acceptAdmin = async () => {\n    const unitroller = createUnitroller(comptrollerAddress, fuse);\n\n    try {\n      await testForComptrollerErrorAndSend(\n        unitroller.methods._acceptAdmin(),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-AcceptAdmin\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const updateAdmin = async () => {\n    const unitroller = createUnitroller(comptrollerAddress, fuse);\n\n    if (!fuse.web3.utils.isAddress(admin)) {\n      handleGenericError({ message: \"This is not a valid address.\" }, toast);\n      return;\n    }\n\n    try {\n      await testForComptrollerErrorAndSend(\n        unitroller.methods._setPendingAdmin(admin),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateAdmin\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const [closeFactor, setCloseFactor] = useState(50);\n  const [liquidationIncentive, setLiquidationIncentive] = useState(8);\n\n  const scaleCloseFactor = (_closeFactor: number) => {\n    return _closeFactor / 1e16;\n  };\n\n  const scaleLiquidationIncentive = (_liquidationIncentive: number) => {\n    return _liquidationIncentive / 1e16 - 100;\n  };\n\n  // Update values on refetch!\n  useEffect(() => {\n    if (data) {\n      setCloseFactor(scaleCloseFactor(data.closeFactor));\n      setLiquidationIncentive(\n        scaleLiquidationIncentive(data.liquidationIncentive)\n      );\n      setAdmin(data.admin);\n    }\n  }, [data]);\n\n  const updateCloseFactor = async () => {\n    // 50% -> 0.5 * 1e18\n    const bigCloseFactor = new BigNumber(closeFactor)\n      .dividedBy(100)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    try {\n      await testForComptrollerErrorAndSend(\n        comptroller.methods._setCloseFactor(bigCloseFactor),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateCloseFactor\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const updateLiquidationIncentive = async () => {\n    // 8% -> 1.08 * 1e8\n    const bigLiquidationIncentive = new BigNumber(liquidationIncentive)\n      .dividedBy(100)\n      .plus(1)\n      .multipliedBy(1e18)\n      .toFixed(0);\n\n    const comptroller = createComptroller(comptrollerAddress, fuse);\n\n    try {\n      await testForComptrollerErrorAndSend(\n        comptroller.methods._setLiquidationIncentive(bigLiquidationIncentive),\n        address,\n        \"\"\n      );\n\n      LogRocket.track(\"Fuse-UpdateLiquidationIncentive\");\n\n      queryClient.refetchQueries();\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      height=\"100%\"\n    >\n      <Heading size=\"sm\" px={4} py={4}>\n        {t(\"Pool {{num}} Configuration\", { num: poolId })}\n      </Heading>\n\n      <ModalDivider />\n\n      {data ? (\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n          height=\"100%\"\n          width=\"100%\"\n          overflowY=\"auto\"\n        >\n          <ConfigRow>\n            <Text fontWeight=\"bold\" mr={2}>\n              {t(\"Assets:\")}\n            </Text>\n\n            {assets.length > 0 ? (\n              <>\n                <CTokenAvatarGroup\n                  tokenAddresses={assets.map(\n                    ({ underlyingToken }) => underlyingToken\n                  )}\n                  popOnHover={true}\n                />\n\n                <Text ml={2} flexShrink={0}>\n                  {assets.map(({ underlyingSymbol }, index, array) => {\n                    return (\n                      underlyingSymbol +\n                      (index !== array.length - 1 ? \" / \" : \"\")\n                    );\n                  })}\n                </Text>\n              </>\n            ) : (\n              <Text>{t(\"None\")}</Text>\n            )}\n          </ConfigRow>\n\n          <ModalDivider />\n\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"flex-start\"\n            width=\"100%\"\n          >\n            <ConfigRow>\n              <Text fontWeight=\"bold\">{t(\"Whitelist\")}:</Text>\n\n              <Switch\n                ml=\"auto\"\n                h=\"20px\"\n                isDisabled={!data.upgradeable}\n                isChecked={data.enforceWhitelist}\n                onChange={() => {\n                  changeWhitelistStatus(!data.enforceWhitelist);\n                }}\n                className=\"black-switch\"\n                colorScheme=\"#121212\"\n              />\n            </ConfigRow>\n\n            {data.enforceWhitelist ? (\n              <WhitelistInfo\n                whitelist={data.whitelist}\n                addToWhitelist={addToWhitelist}\n                removeFromWhitelist={removeFromWhitelist}\n              />\n            ) : null}\n\n            <ModalDivider />\n\n            <ConfigRow height=\"35px\">\n              <Text fontWeight=\"bold\">{t(\"Admin\")}:</Text>\n\n              {admin.toLowerCase() !== data.admin.toLowerCase() ? (\n                <SaveButton ml={3} onClick={updateAdmin} />\n              ) : address.toLowerCase() === data.pendingAdmin.toLowerCase() ? (\n                <SaveButton\n                  ml={3}\n                  onClick={acceptAdmin}\n                  fontSize=\"xs\"\n                  altText={t(\"Become Admin\")}\n                />\n              ) : data.adminHasRights &&\n                address.toLowerCase() === data.admin.toLowerCase() ? (\n                <SaveButton\n                  ml={3}\n                  onClick={revokeRights}\n                  fontSize=\"xs\"\n                  altText={t(\"Revoke Rights\")}\n                />\n              ) : null}\n\n              <Input\n                isDisabled={\n                  !data.adminHasRights ||\n                  data.admin?.toLowerCase() !== address.toLowerCase()\n                }\n                ml=\"auto\"\n                width=\"320px\"\n                height=\"100%\"\n                textAlign=\"center\"\n                variant=\"filled\"\n                size=\"sm\"\n                value={admin}\n                onChange={(event) => {\n                  const address = event.target.value;\n                  setAdmin(address);\n                }}\n                {...DASHBOARD_BOX_PROPS}\n                _placeholder={{ color: \"#e0e0e0\" }}\n                _focus={{ bg: \"#121212\" }}\n                _hover={{ bg: \"#282727\" }}\n                bg=\"#282727\"\n              />\n            </ConfigRow>\n\n            <ModalDivider />\n\n            <ConfigRow height=\"35px\">\n              <Text fontWeight=\"bold\">{t(\"Close Factor\")}:</Text>\n\n              {data && scaleCloseFactor(data.closeFactor) !== closeFactor ? (\n                <SaveButton onClick={updateCloseFactor} />\n              ) : null}\n\n              <SliderWithLabel\n                ml=\"auto\"\n                value={closeFactor}\n                setValue={setCloseFactor}\n                formatValue={formatPercentage}\n                min={5}\n                max={90}\n              />\n            </ConfigRow>\n\n            <ModalDivider />\n\n            <ConfigRow height=\"35px\">\n              <Text fontWeight=\"bold\">{t(\"Liquidation Incentive\")}:</Text>\n\n              {data &&\n              scaleLiquidationIncentive(data.liquidationIncentive) !==\n                liquidationIncentive ? (\n                <SaveButton onClick={updateLiquidationIncentive} />\n              ) : null}\n\n              <SliderWithLabel\n                ml=\"auto\"\n                value={liquidationIncentive}\n                setValue={setLiquidationIncentive}\n                formatValue={formatPercentage}\n                min={0}\n                max={50}\n              />\n            </ConfigRow>\n            <ModalDivider />\n\n            {/* OraclesTable */}\n            <OraclesTable oraclesMap={oraclesMap} data={data} />\n\n          </Column>\n        </Column>\n      ) : (\n        <Center expand>\n          <Spinner my={8} />\n        </Center>\n      )}\n    </Column>\n  );\n};\n\nexport default PoolConfiguration;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/EditRewardsDistributorModal.tsx",
    "content": "import { useEffect, useState } from \"react\";\nimport {\n  Heading,\n  Modal,\n  ModalContent,\n  ModalOverlay,\n  Input,\n  Button,\n  Box,\n  Text,\n  Image,\n  Select,\n  Spinner,\n  useToast,\n  NumberInput,\n  NumberInputField,\n  NumberInputStepper,\n  NumberIncrementStepper,\n  NumberDecrementStepper,\n  useClipboard,\n} from \"@chakra-ui/react\";\n\nimport { Column, Center, Row } from \"utils/chakraUtils\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { ModalDivider, MODAL_PROPS } from \"components/shared/Modal\";\nimport { AdminAlert } from \"components/shared/AdminAlert\";\n\nimport { useTokenData } from \"hooks/useTokenData\";\nimport SmallWhiteCircle from \"../../../../static/small-white-circle.png\";\nimport { useRari } from \"context/RariContext\";\n\nimport Fuse from \"../../../../fuse-sdk\";\n\nimport { handleGenericError } from \"../../../../utils/errorHandling\";\nimport {\n  FusePoolData,\n  USDPricedFuseAsset,\n} from \"../../../../utils/fetchFusePoolData\";\nimport { useTokenBalance } from \"hooks/useTokenBalance\";\nimport DashboardBox from \"../../../shared/DashboardBox\";\nimport { createRewardsDistributor } from \"utils/createComptroller\";\nimport { RewardsDistributor } from \"hooks/rewards/useRewardsDistributorsForPool\";\nimport { shortAddress } from \"utils/shortAddress\";\n\n// Styles\nconst activeStyle = { bg: \"#FFF\", color: \"#000\" };\nconst noop = () => {};\n\nconst useRewardsDistributorInstance = (rDAddress: string) => {\n  const { fuse } = useRari();\n  return createRewardsDistributor(rDAddress, fuse);\n};\n\n// Gets Reward Speed of CToken\nconst useRewardSpeedsOfCToken = (rDAddress: any, cTokenAddress?: string) => {\n  const { fuse } = useRari();\n  const instance = createRewardsDistributor(rDAddress, fuse);\n\n  const [supplySpeed, setSupplySpeed] = useState<any>();\n  const [borrowSpeed, setBorrowSpeed] = useState<any>();\n\n  useEffect(() => {\n    if (!cTokenAddress) return;\n\n    // Get Supply reward speed for this CToken from the mapping\n    instance.methods\n      .compSupplySpeeds(cTokenAddress)\n      .call()\n      .then((result: any) => {\n        console.log({ result });\n        setSupplySpeed(result);\n      });\n\n    // Get Borrow reward speed for this CToken from the mapping\n    instance.methods\n      .compBorrowSpeeds(cTokenAddress)\n      .call()\n      .then((result: any) => {\n        console.log({ result });\n        setBorrowSpeed(result);\n      });\n  }, [instance, fuse, cTokenAddress]);\n\n  return [supplySpeed, borrowSpeed];\n};\n\nconst EditRewardsDistributorModal = ({\n  rewardsDistributor,\n  pool,\n  isOpen,\n  onClose,\n}: {\n  rewardsDistributor: RewardsDistributor;\n  pool: FusePoolData;\n  isOpen: boolean;\n  onClose: () => any;\n}) => {\n  const { t } = useTranslation();\n\n  const { address, fuse } = useRari();\n  const rewardsDistributorInstance = useRewardsDistributorInstance(\n    rewardsDistributor.address\n  );\n  const tokenData = useTokenData(rewardsDistributor.rewardToken);\n  const isAdmin = address === rewardsDistributor.admin;\n\n  //   Balances\n  const { data: balanceERC20 } = useTokenBalance(\n    rewardsDistributor.rewardToken,\n    rewardsDistributor.address\n  );\n\n  const { data: myBalance } = useTokenBalance(rewardsDistributor.rewardToken);\n\n  const toast = useToast();\n\n  // Inputs\n  const [sendAmt, setSendAmt] = useState<number>(0);\n\n  const [supplySpeed, setSupplySpeed] = useState<number>(0.001);\n  const [borrowSpeed, setBorrowSpeed] = useState<number>(0.001);\n\n  //  Loading states\n  const [fundingDistributor, setFundingDistributor] = useState(false);\n  const [seizing, setSeizing] = useState(false);\n  const [changingSpeed, setChangingSpeed] = useState(false);\n  const [changingBorrowSpeed, setChangingBorrowSpeed] = useState(false);\n  const [selectedAsset, setSelectedAsset] = useState<\n    USDPricedFuseAsset | undefined\n  >(pool?.assets[0] ?? undefined);\n\n  //   RewardsSpeeds\n  const [supplySpeedForCToken, borrowSpeedForCToken] = useRewardSpeedsOfCToken(\n    rewardsDistributor.address,\n    selectedAsset?.cToken\n  );\n\n  const { hasCopied, onCopy } = useClipboard(rewardsDistributor?.address ?? \"\");\n\n  // Sends tokens to distributor\n  const fundDistributor = async () => {\n    // Create ERC20 instance of rewardToken\n    const token = new fuse.web3.eth.Contract(\n      JSON.parse(\n        fuse.compoundContracts[\"contracts/EIP20Interface.sol:EIP20Interface\"]\n          .abi\n      ),\n      rewardsDistributor.rewardToken\n    );\n\n    setFundingDistributor(true);\n    try {\n      await token.methods\n        .transfer(\n          rewardsDistributor.address,\n          Fuse.Web3.utils\n            .toBN(sendAmt)\n            .mul(\n              Fuse.Web3.utils\n                .toBN(10)\n                .pow(Fuse.Web3.utils.toBN(tokenData?.decimals ?? 18))\n            )\n        )\n        .send({\n          from: address,\n        });\n\n      setFundingDistributor(false);\n    } catch (err) {\n      handleGenericError(err, toast);\n      setFundingDistributor(false);\n    }\n  };\n\n  //   Adds LM to supply side of a CToken in this fuse pool\n  const changeSupplySpeed = async () => {\n    try {\n      if (!isAdmin) throw new Error(\"User is not admin of this Distributor!\");\n\n      setChangingSpeed(true);\n\n      await rewardsDistributorInstance.methods\n        ._setCompSupplySpeed(\n          selectedAsset?.cToken,\n          Fuse.Web3.utils.toBN(supplySpeed * 10 ** (tokenData?.decimals ?? 18)) // set supplySpeed to 0.001e18 for now\n        )\n        .send({ from: address });\n\n      setChangingSpeed(false);\n    } catch (err) {\n      handleGenericError(err, toast);\n      setChangingSpeed(false);\n    }\n  };\n\n  //   Adds LM to supply side of a CToken in this fuse pool\n  const changeBorrowSpeed = async () => {\n    try {\n      if (!isAdmin) throw new Error(\"User is not admin of this Distributor!\");\n\n      setChangingBorrowSpeed(true);\n\n      await rewardsDistributorInstance.methods\n        ._setCompBorrowSpeed(\n          selectedAsset?.cToken,\n          Fuse.Web3.utils.toBN(borrowSpeed * 10 ** (tokenData?.decimals ?? 18)) // set supplySpeed to 0.001e18 for now\n        )\n        .send({ from: address });\n\n      setChangingBorrowSpeed(false);\n    } catch (err) {\n      handleGenericError(err, toast);\n      setChangingBorrowSpeed(false);\n    }\n  };\n\n  const handleSeizeTokens = async () => {\n    setSeizing(true);\n    if (isAdmin) {\n      await rewardsDistributorInstance.methods._grantComp(\n        address,\n        balanceERC20\n      );\n    } else {\n      toast({\n        title: \"Admin Only!\",\n        description: \"Only admin can seize tokens!\",\n        status: \"error\",\n        duration: 9000,\n        isClosable: true,\n        position: \"top-right\",\n      });\n    }\n    setSeizing(false);\n  };\n\n  return (\n    <Modal\n      motionPreset=\"slideInBottom\"\n      isOpen={isOpen}\n      onClose={onClose}\n      isCentered\n    >\n      <ModalOverlay />\n      <ModalContent {...MODAL_PROPS}>\n        <Heading fontSize=\"27px\" my={4} textAlign=\"center\">\n          {t(\"Edit Rewards Distributor\")}\n        </Heading>\n\n        <ModalDivider />\n\n        {/*  RewardToken data */}\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          p={4}\n        >\n          <>\n            {tokenData?.logoURL ? (\n              <Image\n                mt={4}\n                src={tokenData.logoURL}\n                boxSize=\"50px\"\n                borderRadius=\"50%\"\n                backgroundImage={`url(${SmallWhiteCircle})`}\n                backgroundSize=\"100% auto\"\n              />\n            ) : null}\n            <Heading\n              my={tokenData?.symbol ? 3 : 6}\n              fontSize=\"22px\"\n              color={tokenData?.color ?? \"#FFF\"}\n            >\n              {tokenData ? tokenData.name ?? \"Invalid Address!\" : \"Loading...\"}\n            </Heading>\n            <Text>\n              {balanceERC20 && tokenData && tokenData.decimals\n                ? (\n                    parseFloat(balanceERC20?.toString()) /\n                    10 ** tokenData.decimals\n                  ).toFixed(3)\n                : 0}{\" \"}\n              {tokenData?.symbol}\n            </Text>\n            <Text onClick={onCopy}>\n              Contract: {shortAddress(rewardsDistributor.address)}{\" \"}\n              {hasCopied && \"Copied!\"}\n            </Text>\n          </>\n        </Column>\n\n        <AdminAlert\n          isAdmin={isAdmin}\n          mt={2}\n          isNotAdminText=\"You are not the admin of this RewardsDistributor. Only the admin can configure rewards.\"\n        />\n\n        {/* Basic Info  */}\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n          py={4}\n        >\n          {/* <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n            <Text>Address: {rewardsDistributor.address}</Text>\n          </Row>\n          <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n            <Text>Admin: {rewardsDistributor.admin}</Text>\n          </Row>\n          <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n            <Text>\n              Balance:{\" \"}\n              {balanceERC20 ? parseFloat(balanceERC20?.toString()) / 1e18 : 0}{\" \"}\n              {tokenData?.symbol}\n            </Text>\n          </Row> */}\n\n          <ModalDivider />\n\n          {/* Fund distributor */}\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"flex-start\"\n            p={4}\n          >\n            <Heading fontSize={\"lg\"}> Fund Distributor </Heading>\n            <Row\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"center\"\n              mt={1}\n            >\n              <NumberInput\n                step={0.1}\n                min={0}\n                onChange={(valueString) => {\n                  console.log({ valueString });\n                  setSendAmt(parseFloat(valueString));\n                }}\n              >\n                <NumberInputField\n                  width=\"100%\"\n                  textAlign=\"center\"\n                  placeholder={\"0 \" + tokenData?.symbol}\n                />\n                <NumberInputStepper>\n                  <NumberIncrementStepper />\n                  <NumberDecrementStepper />\n                </NumberInputStepper>\n              </NumberInput>\n              <Button\n                onClick={fundDistributor}\n                bg=\"black\"\n                disabled={fundingDistributor}\n              >\n                {fundingDistributor ? <Spinner /> : \"Send\"}\n              </Button>\n              {isAdmin && (!balanceERC20?.isZero() ?? false) && (\n                <Button onClick={handleSeizeTokens} bg=\"red\" disabled={seizing}>\n                  {seizing ? <Spinner /> : \"Withdraw Tokens\"}\n                </Button>\n              )}\n            </Row>\n            <Text mt={1}>\n              Your balance:{\" \"}\n              {myBalance\n                ? (\n                    parseFloat(myBalance?.toString()) /\n                    10 ** (tokenData?.decimals ?? 18)\n                  ).toFixed(2)\n                : 0}{\" \"}\n              {tokenData?.symbol}\n            </Text>\n          </Column>\n\n          {/* Add or Edit a CToken to the Distributor */}\n\n          {pool.assets.length ? (\n            <Column\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"flex-start\"\n              p={4}\n            >\n              <Heading fontSize={\"lg\"}> Manage CToken Rewards </Heading>\n              {/* Select Asset */}\n              <Row\n                mainAxisAlignment=\"flex-start\"\n                crossAxisAlignment=\"center\"\n                mt={1}\n              >\n                {pool.assets.map(\n                  (asset: USDPricedFuseAsset, index: number, array: any[]) => {\n                    return (\n                      <Box\n                        pr={index === array.length - 1 ? 4 : 2}\n                        key={asset.cToken}\n                        flexShrink={0}\n                      >\n                        <DashboardBox\n                          as=\"button\"\n                          onClick={() => setSelectedAsset(asset)}\n                          {...(asset.cToken === selectedAsset?.cToken\n                            ? activeStyle\n                            : noop)}\n                        >\n                          <Center expand px={4} py={1} fontWeight=\"bold\">\n                            {asset.underlyingSymbol}\n                          </Center>\n                        </DashboardBox>\n                      </Box>\n                    );\n                  }\n                )}\n              </Row>\n\n              {/* Change Supply Speed */}\n              <Column\n                mainAxisAlignment=\"flex-start\"\n                crossAxisAlignment=\"flex-start\"\n                py={3}\n              >\n                <Row\n                  mainAxisAlignment=\"flex-start\"\n                  crossAxisAlignment=\"flex-start\"\n                >\n                  <NumberInput\n                    step={0.1}\n                    min={0}\n                    onChange={(supplySpeed) => {\n                      console.log({ supplySpeed });\n                      setSupplySpeed(parseFloat(supplySpeed));\n                    }}\n                  >\n                    <NumberInputField\n                      width=\"100%\"\n                      textAlign=\"center\"\n                      placeholder={\"0 \" + tokenData?.symbol}\n                    />\n                    <NumberInputStepper>\n                      <NumberIncrementStepper />\n                      <NumberDecrementStepper />\n                    </NumberInputStepper>\n                  </NumberInput>\n                  <Button\n                    onClick={changeSupplySpeed}\n                    bg=\"black\"\n                    disabled={changingSpeed || !isAdmin}\n                  >\n                    {changingSpeed ? <Spinner /> : \"Set\"}\n                  </Button>\n                </Row>\n                <Row\n                  mainAxisAlignment=\"flex-start\"\n                  crossAxisAlignment=\"flex-start\"\n                >\n                  <Text>\n                    Supply Speed:{\" \"}\n                    {(parseFloat(supplySpeedForCToken) / 1e18).toFixed(4)}\n                  </Text>\n                </Row>\n              </Column>\n\n              {/* Change Borrow Speed */}\n              <Column\n                mainAxisAlignment=\"flex-start\"\n                crossAxisAlignment=\"flex-start\"\n                py={3}\n              >\n                <Row\n                  mainAxisAlignment=\"flex-start\"\n                  crossAxisAlignment=\"flex-start\"\n                >\n                  <NumberInput\n                    step={0.1}\n                    min={0}\n                    onChange={(borrowSpeed) => {\n                      console.log({ borrowSpeed });\n                      setBorrowSpeed(parseFloat(borrowSpeed));\n                    }}\n                  >\n                    <NumberInputField\n                      width=\"100%\"\n                      textAlign=\"center\"\n                      placeholder={\"0 \" + tokenData?.symbol}\n                    />\n                    <NumberInputStepper>\n                      <NumberIncrementStepper />\n                      <NumberDecrementStepper />\n                    </NumberInputStepper>\n                  </NumberInput>\n\n                  <Button\n                    onClick={changeBorrowSpeed}\n                    bg=\"black\"\n                    disabled={changingBorrowSpeed || !isAdmin}\n                  >\n                    {changingBorrowSpeed ? <Spinner /> : \"Set\"}\n                  </Button>\n                </Row>\n                <Row\n                  mainAxisAlignment=\"flex-start\"\n                  crossAxisAlignment=\"flex-start\"\n                >\n                  <Text>\n                    Borrow Speed:{\" \"}\n                    {(parseFloat(borrowSpeedForCToken) / 1e18).toFixed(2)}\n                  </Text>\n                </Row>\n              </Column>\n            </Column>\n          ) : (\n            <Center p={4}>\n              <Text fontWeight=\"bold\">\n                Add CTokens to this pool to configure their rewards.\n              </Text>\n            </Center>\n          )}\n        </Column>\n      </ModalContent>\n    </Modal>\n  );\n};\n\nexport default EditRewardsDistributorModal;\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/PoolModal/AmountSelect.tsx",
    "content": "import { useState } from \"react\";\nimport { Row, Column, Center, useIsMobile } from \"utils/chakraUtils\";\n\nimport LogRocket from \"logrocket\";\nimport {\n  Heading,\n  Box,\n  Button,\n  Text,\n  Image,\n  Input,\n  useToast,\n  Switch,\n  Tab,\n  TabList,\n  Tabs,\n  Spinner,\n} from \"@chakra-ui/react\";\nimport SmallWhiteCircle from \"../../../../../static/small-white-circle.png\";\n\nimport BigNumber from \"bignumber.js\";\n\nimport { UseQueryResult, useQuery, useQueryClient } from \"react-query\";\n\nimport { HashLoader } from \"react-spinners\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { useRari } from \"../../../../../context/RariContext\";\nimport { fetchTokenBalance } from \"../../../../../hooks/useTokenBalance\";\nimport { BN, smallUsdFormatter } from \"../../../../../utils/bigUtils\";\n\nimport DashboardBox from \"../../../../shared/DashboardBox\";\nimport { ModalDivider } from \"../../../../shared/Modal\";\n\nimport { Mode } from \".\";\n\nimport {\n  ETH_TOKEN_DATA,\n  useTokenData,\n} from \"../../../../../hooks/useTokenData\";\nimport { useBorrowLimit } from \"../../../../../hooks/useBorrowLimit\";\n\nimport Fuse from \"../../../../../fuse-sdk\";\nimport { USDPricedFuseAsset } from \"../../../../../utils/fetchFusePoolData\";\nimport { createComptroller } from \"../../../../../utils/createComptroller\";\nimport { handleGenericError } from \"../../../../../utils/errorHandling\";\nimport { ComptrollerErrorCodes } from \"../../FusePoolEditPage\";\nimport { SwitchCSS } from \"../../../../shared/SwitchCSS\";\n\nimport { convertMantissaToAPY } from \"../../../../../utils/apyUtils\";\nimport { getSymbol } from \"utils/symbolUtils\";\n\nenum UserAction {\n  NO_ACTION,\n  WAITING_FOR_TRANSACTIONS,\n}\n\nexport enum CTokenErrorCodes {\n  NO_ERROR,\n  UNAUTHORIZED,\n  BAD_INPUT,\n  COMPTROLLER_REJECTION,\n  COMPTROLLER_CALCULATION_ERROR,\n  INTEREST_RATE_MODEL_ERROR,\n  INVALID_ACCOUNT_PAIR,\n  INVALID_CLOSE_AMOUNT_REQUESTED,\n  INVALID_COLLATERAL_FACTOR,\n  MATH_ERROR,\n  MARKET_NOT_FRESH,\n  MARKET_NOT_LISTED,\n  TOKEN_INSUFFICIENT_ALLOWANCE,\n  TOKEN_INSUFFICIENT_BALANCE,\n  TOKEN_INSUFFICIENT_CASH,\n  TOKEN_TRANSFER_IN_FAILED,\n  TOKEN_TRANSFER_OUT_FAILED,\n  UTILIZATION_ABOVE_MAX,\n}\n\nexport async function testForCTokenErrorAndSend(\n  txObject: any,\n  caller: string,\n  failMessage: string\n) {\n  let response = await txObject.call({ from: caller });\n\n  // For some reason `response` will be `[\"0\"]` if no error but otherwise it will return a string of a number.\n  if (response[0] !== \"0\") {\n    response = parseInt(response);\n\n    let err;\n\n    if (response >= 1000) {\n      const comptrollerResponse = response - 1000;\n\n      let msg = ComptrollerErrorCodes[comptrollerResponse] ?? response;\n\n      if (msg === \"BORROW_BELOW_MIN\") {\n        msg =\n          \"As part of our guarded launch, you cannot borrow less than 1 ETH worth of tokens at the moment.\";\n      }\n\n      // This is a comptroller error:\n      err = new Error(failMessage + \" Comptroller Error: \" + msg);\n    } else {\n      // This is a standard token error:\n      err = new Error(\n        failMessage + \" CToken Code: \" + CTokenErrorCodes[response]\n      );\n    }\n\n    LogRocket.captureException(err);\n    throw err;\n  }\n\n  return txObject.send({ from: caller });\n}\n\nconst fetchGasForCall = async (\n  call: any,\n  amountBN: BN,\n  fuse: Fuse,\n  address: string\n) => {\n  const estimatedGas = fuse.web3.utils.toBN(\n    (\n      (await call.estimateGas({\n        from: address,\n        // Cut amountBN in half in case it screws up the gas estimation by causing a fail in the event that it accounts for gasPrice > 0 which means there will not be enough ETH (after paying gas)\n        value: amountBN.div(fuse.web3.utils.toBN(2)),\n      })) *\n      // 50% more gas for limit:\n      1.5\n    ).toFixed(0)\n  );\n\n  // Ex: 100 (in GWEI)\n  const { standard } = await fetch(\"https://gasprice.poa.network\").then((res) =>\n    res.json()\n  );\n\n  const gasPrice = fuse.web3.utils.toBN(\n    // @ts-ignore For some reason it's returning a string not a BN\n    fuse.web3.utils.toWei(standard.toString(), \"gwei\")\n  );\n\n  const gasWEI = estimatedGas.mul(gasPrice);\n\n  return { gasWEI, gasPrice, estimatedGas };\n};\n\nasync function fetchMaxAmount(\n  mode: Mode,\n  fuse: Fuse,\n  address: string,\n  asset: USDPricedFuseAsset\n) {\n  if (mode === Mode.SUPPLY) {\n    const balance = await fetchTokenBalance(\n      asset.underlyingToken,\n      //@ts-ignore\n      fuse.web3,\n      address\n    );\n\n    return balance;\n  }\n\n  if (mode === Mode.REPAY) {\n    const balance = await fetchTokenBalance(\n      asset.underlyingToken,\n      //@ts-ignore\n      fuse.web3,\n      address\n    );\n    const debt = fuse.web3.utils.toBN(asset.borrowBalance);\n\n    if (balance.gt(debt)) {\n      return debt;\n    } else {\n      return balance;\n    }\n  }\n\n  if (mode === Mode.BORROW) {\n    const maxBorrow = await fuse.contracts.FusePoolLensSecondary.methods\n      .getMaxBorrow(address, asset.cToken)\n      .call();\n\n    return fuse.web3.utils.toBN(\n      new BigNumber(maxBorrow).multipliedBy(0.75).toFixed(0)\n    );\n  }\n\n  if (mode === Mode.WITHDRAW) {\n    const maxRedeem = await fuse.contracts.FusePoolLensSecondary.methods\n      .getMaxRedeem(address, asset.cToken)\n      .call();\n\n    return fuse.web3.utils.toBN(maxRedeem);\n  }\n}\n\nconst AmountSelect = ({\n  onClose,\n  assets,\n  index,\n  mode,\n  setMode,\n\n  comptrollerAddress,\n  isBorrowPaused = false\n}: {\n  onClose: () => any;\n  assets: USDPricedFuseAsset[];\n  index: number;\n  mode: Mode;\n  setMode: (mode: Mode) => any;\n  comptrollerAddress: string;\n  isBorrowPaused?: boolean;\n}) => {\n  const asset = assets[index];\n\n  const { address, fuse } = useRari();\n\n  const toast = useToast();\n\n  const queryClient = useQueryClient();\n\n  const tokenData = useTokenData(asset.underlyingToken);\n\n  const [userAction, setUserAction] = useState(UserAction.NO_ACTION);\n\n  const [userEnteredAmount, _setUserEnteredAmount] = useState(\"\");\n\n  const [amount, _setAmount] = useState<BigNumber | null>(\n    () => new BigNumber(0)\n  );\n\n  const showEnableAsCollateral = !asset.membership && mode === Mode.SUPPLY;\n  const [enableAsCollateral, setEnableAsCollateral] = useState(\n    showEnableAsCollateral\n  );\n\n  const { t } = useTranslation();\n\n  const updateAmount = (newAmount: string) => {\n    if (newAmount.startsWith(\"-\")) {\n      return;\n    }\n\n    _setUserEnteredAmount(newAmount);\n\n    try {\n      BigNumber.DEBUG = true;\n\n      // Try to set the amount to BigNumber(newAmount):\n      const bigAmount = new BigNumber(newAmount);\n      _setAmount(bigAmount.multipliedBy(10 ** asset.underlyingDecimals));\n    } catch (e) {\n      // If the number was invalid, set the amount to null to disable confirming:\n      _setAmount(null);\n    }\n\n    setUserAction(UserAction.NO_ACTION);\n  };\n\n  const { data: amountIsValid } = useQuery(\n    (amount?.toString() ?? \"null\") + \" \" + mode + \" isValid\",\n    async () => {\n      if (amount === null || amount.isZero()) {\n        return false;\n      }\n\n      try {\n        const max = await fetchMaxAmount(mode, fuse, address, asset);\n\n        return amount.lte(max!.toString());\n      } catch (e) {\n        handleGenericError(e, toast);\n        return false;\n      }\n    }\n  );\n\n  let depositOrWithdrawAlert = null;\n\n  if (mode === Mode.BORROW && isBorrowPaused) {\n    depositOrWithdrawAlert = t(\"Borrowing is disabled for this asset.\");\n  }\n  else if (amount === null || amount.isZero()) {\n    if (mode === Mode.SUPPLY) {\n      depositOrWithdrawAlert = t(\"Enter a valid amount to supply.\");\n    } else if (mode === Mode.BORROW) {\n      depositOrWithdrawAlert = t(\"Enter a valid amount to borrow.\");\n    } else if (mode === Mode.WITHDRAW) {\n      depositOrWithdrawAlert = t(\"Enter a valid amount to withdraw.\");\n    } else {\n      depositOrWithdrawAlert = t(\"Enter a valid amount to repay.\");\n    }\n  } else if (amountIsValid === undefined) {\n    depositOrWithdrawAlert = t(\"Loading your balance of {{token}}...\", {\n      token: asset.underlyingSymbol,\n    });\n  } else if (!amountIsValid) {\n    if (mode === Mode.SUPPLY) {\n      depositOrWithdrawAlert = t(\"You don't have enough {{token}}!\", {\n        token: asset.underlyingSymbol,\n      });\n    } else if (mode === Mode.REPAY) {\n      depositOrWithdrawAlert = t(\n        \"You don't have enough {{token}} or are over-repaying!\",\n        {\n          token: asset.underlyingSymbol,\n        }\n      );\n    } else if (mode === Mode.WITHDRAW) {\n      depositOrWithdrawAlert = t(\"You cannot withdraw this much!\");\n    } else if (mode === Mode.BORROW) {\n      depositOrWithdrawAlert = t(\"You cannot borrow this much!\");\n    }\n  } else {\n    depositOrWithdrawAlert = null;\n  }\n\n  const isMobile = useIsMobile();\n\n  const length = depositOrWithdrawAlert?.length ?? 0;\n  let depositOrWithdrawAlertFontSize;\n  if (length < 40) {\n    depositOrWithdrawAlertFontSize = !isMobile ? \"xl\" : \"17px\";\n  } else if (length < 50) {\n    depositOrWithdrawAlertFontSize = !isMobile ? \"15px\" : \"11px\";\n  } else if (length < 60) {\n    depositOrWithdrawAlertFontSize = !isMobile ? \"14px\" : \"10px\";\n  }\n\n  const onConfirm = async () => {\n    try {\n      setUserAction(UserAction.WAITING_FOR_TRANSACTIONS);\n\n      const isETH = asset.underlyingToken === ETH_TOKEN_DATA.address;\n      const isRepayingMax =\n        amount!.eq(asset.borrowBalance) && !isETH && mode === Mode.REPAY;\n\n      isRepayingMax && console.log(\"Using max repay!\");\n\n      const max = new BigNumber(2).pow(256).minus(1).toFixed(0);\n\n      const amountBN = fuse.web3.utils.toBN(amount!.toFixed(0));\n\n      const cToken = new fuse.web3.eth.Contract(\n        isETH\n          ? JSON.parse(\n            fuse.compoundContracts[\n              \"contracts/CEtherDelegate.sol:CEtherDelegate\"\n            ].abi\n          )\n          : JSON.parse(\n            fuse.compoundContracts[\n              \"contracts/CErc20Delegate.sol:CErc20Delegate\"\n            ].abi\n          ),\n        asset.cToken\n      );\n\n      if (mode === Mode.SUPPLY || mode === Mode.REPAY) {\n        if (!isETH) {\n          const token = new fuse.web3.eth.Contract(\n            JSON.parse(\n              fuse.compoundContracts[\n                \"contracts/EIP20Interface.sol:EIP20Interface\"\n              ].abi\n            ),\n            asset.underlyingToken\n          );\n\n          const hasApprovedEnough = fuse.web3.utils\n            .toBN(\n              await token.methods\n                .allowance(address, cToken.options.address)\n                .call()\n            )\n            .gte(amountBN);\n\n          if (!hasApprovedEnough) {\n            await token.methods\n              .approve(cToken.options.address, max)\n              .send({ from: address });\n          }\n\n          LogRocket.track(\"Fuse-Approve\");\n        }\n\n        if (mode === Mode.SUPPLY) {\n          // If they want to enable as collateral now, enter the market:\n          if (enableAsCollateral) {\n            const comptroller = createComptroller(comptrollerAddress, fuse);\n            // Don't await this, we don't care if it gets executed first!\n            comptroller.methods\n              .enterMarkets([asset.cToken])\n              .send({ from: address });\n\n            LogRocket.track(\"Fuse-ToggleCollateral\");\n          }\n\n          if (isETH) {\n            const call = cToken.methods.mint();\n\n            if (\n              // If they are supplying their whole balance:\n              amountBN.toString() === (await fuse.web3.eth.getBalance(address))\n            ) {\n              // Subtract gas for max ETH\n\n              const { gasWEI, gasPrice, estimatedGas } = await fetchGasForCall(\n                call,\n                amountBN,\n                fuse,\n                address\n              );\n\n              await call.send({\n                from: address,\n                value: amountBN.sub(gasWEI),\n\n                gasPrice,\n                gas: estimatedGas,\n              });\n            } else {\n              await call.send({\n                from: address,\n                value: amountBN,\n              });\n            }\n          } else {\n            await testForCTokenErrorAndSend(\n              cToken.methods.mint(amountBN),\n              address,\n              \"Cannot deposit this amount right now!\"\n            );\n          }\n\n          LogRocket.track(\"Fuse-Supply\");\n        } else if (mode === Mode.REPAY) {\n          if (isETH) {\n            const call = cToken.methods.repayBorrow();\n\n            if (\n              // If they are repaying their whole balance:\n              amountBN.toString() === (await fuse.web3.eth.getBalance(address))\n            ) {\n              // Subtract gas for max ETH\n\n              const { gasWEI, gasPrice, estimatedGas } = await fetchGasForCall(\n                call,\n                amountBN,\n                fuse,\n                address\n              );\n\n              await call.send({\n                from: address,\n                value: amountBN.sub(gasWEI),\n\n                gasPrice,\n                gas: estimatedGas,\n              });\n            } else {\n              await call.send({\n                from: address,\n                value: amountBN,\n              });\n            }\n          } else {\n            await testForCTokenErrorAndSend(\n              cToken.methods.repayBorrow(isRepayingMax ? max : amountBN),\n              address,\n              \"Cannot repay this amount right now!\"\n            );\n          }\n\n          LogRocket.track(\"Fuse-Repay\");\n        }\n      } else if (mode === Mode.BORROW) {\n        await testForCTokenErrorAndSend(\n          cToken.methods.borrow(amountBN),\n          address,\n          \"Cannot borrow this amount right now!\"\n        );\n\n        LogRocket.track(\"Fuse-Borrow\");\n      } else if (mode === Mode.WITHDRAW) {\n        await testForCTokenErrorAndSend(\n          cToken.methods.redeemUnderlying(amountBN),\n          address,\n          \"Cannot withdraw this amount right now!\"\n        );\n\n        LogRocket.track(\"Fuse-Withdraw\");\n      }\n\n      queryClient.refetchQueries();\n\n      // Wait 2 seconds for refetch and then close modal.\n      // We do this instead of waiting the refetch because some refetches take a while or error out and we want to close now.\n      await new Promise((resolve) => setTimeout(resolve, 2000));\n\n      onClose();\n    } catch (e) {\n      handleGenericError(e, toast);\n      setUserAction(UserAction.NO_ACTION);\n    }\n  };\n\n  const symbol = getSymbol(tokenData, asset);\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      height={showEnableAsCollateral ? \"575px\" : \"500px\"}\n    >\n      {userAction === UserAction.WAITING_FOR_TRANSACTIONS ? (\n        <Column\n          expand\n          mainAxisAlignment=\"center\"\n          crossAxisAlignment=\"center\"\n          p={4}\n        >\n          <HashLoader size={70} color={tokenData?.color ?? \"#FFF\"} loading />\n          <Heading mt=\"30px\" textAlign=\"center\" size=\"md\">\n            {t(\"Check your wallet to submit the transactions\")}\n          </Heading>\n          <Text fontSize=\"sm\" mt=\"15px\" textAlign=\"center\">\n            {t(\"Do not close this tab until you submit all transactions!\")}\n          </Text>\n        </Column>\n      ) : (\n        <>\n          <Row\n            width=\"100%\"\n            mainAxisAlignment=\"center\"\n            crossAxisAlignment=\"center\"\n            p={4}\n            height=\"72px\"\n            flexShrink={0}\n          >\n            <Box height=\"35px\" width=\"35px\">\n              <Image\n                width=\"100%\"\n                height=\"100%\"\n                borderRadius=\"50%\"\n                src={\n                  tokenData?.logoURL ??\n                  \"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"\n                }\n                alt=\"\"\n              />\n            </Box>\n\n            <Heading fontSize=\"27px\" ml={3}>\n              {!isMobile && asset.underlyingName.length < 25\n                ? asset.underlyingName\n                : symbol}\n            </Heading>\n          </Row>\n\n          <ModalDivider />\n\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n            px={4}\n            pb={4}\n            pt={1}\n            height=\"100%\"\n          >\n            <Column\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"flex-start\"\n              width=\"100%\"\n            >\n              <TabBar color={tokenData?.color} mode={mode} setMode={setMode} />\n\n              <DashboardBox width=\"100%\" height=\"70px\">\n                <Row\n                  p={4}\n                  mainAxisAlignment=\"space-between\"\n                  crossAxisAlignment=\"center\"\n                  expand\n                >\n                  <AmountInput\n                    color={tokenData?.color ?? \"#FFF\"}\n                    displayAmount={userEnteredAmount}\n                    updateAmount={updateAmount}\n                    disabled={mode === Mode.BORROW && isBorrowPaused}\n                  />\n                  <TokenNameAndMaxButton\n                    comptrollerAddress={comptrollerAddress}\n                    mode={mode}\n                    symbol={symbol}\n                    logoURL={\n                      tokenData?.logoURL ??\n                      \"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"\n                    }\n                    asset={asset}\n                    updateAmount={updateAmount}\n                  />\n                </Row>\n              </DashboardBox>\n            </Column>\n\n            <StatsColumn\n              symbol={symbol}\n              amount={parseInt(amount?.toFixed(0) ?? \"0\") ?? 0}\n              color={tokenData?.color ?? \"#FFF\"}\n              assets={assets}\n              index={index}\n              mode={mode}\n              enableAsCollateral={enableAsCollateral}\n            />\n\n            {showEnableAsCollateral ? (\n              <DashboardBox p={4} width=\"100%\" mt={4}>\n                <Row\n                  mainAxisAlignment=\"space-between\"\n                  crossAxisAlignment=\"center\"\n                  width=\"100%\"\n                >\n                  <Text fontWeight=\"bold\">{t(\"Enable As Collateral\")}:</Text>\n                  <SwitchCSS\n                    symbol={asset.underlyingSymbol}\n                    color={tokenData?.color}\n                  />\n                  <Switch\n                    h=\"20px\"\n                    className={asset.underlyingSymbol + \"-switch\"}\n                    isChecked={enableAsCollateral}\n                    onChange={() => {\n                      setEnableAsCollateral((past) => !past);\n                    }}\n                  />\n                </Row>\n              </DashboardBox>\n            ) : null}\n\n            <Button\n              mt={4}\n              fontWeight=\"bold\"\n              fontSize={\n                depositOrWithdrawAlert ? depositOrWithdrawAlertFontSize : \"2xl\"\n              }\n              borderRadius=\"10px\"\n              width=\"100%\"\n              height=\"70px\"\n              bg={tokenData?.color ?? \"#FFF\"}\n              color={tokenData?.overlayTextColor ?? \"#000\"}\n              // If the size is small, this means the text is large and we don't want the font size scale animation.\n              className={\n                isMobile ||\n                  depositOrWithdrawAlertFontSize === \"14px\" ||\n                  depositOrWithdrawAlertFontSize === \"15px\"\n                  ? \"confirm-button-disable-font-size-scale\"\n                  : \"\"\n              }\n              _hover={{ transform: \"scale(1.02)\" }}\n              _active={{ transform: \"scale(0.95)\" }}\n              onClick={onConfirm}\n              isDisabled={!amountIsValid}\n            >\n              {depositOrWithdrawAlert ?? t(\"Confirm\")}\n            </Button>\n          </Column>\n        </>\n      )}\n    </Column>\n  );\n};\n\nexport default AmountSelect;\n\nconst TabBar = ({\n  color,\n  mode,\n  setMode,\n}: {\n  mode: Mode;\n  setMode: (mode: Mode) => any;\n  color: string | null | undefined;\n}) => {\n  const isSupplySide = mode < 2;\n  const { t } = useTranslation();\n\n  // Woohoo okay so there's some pretty weird shit going on in this component.\n\n  // The AmountSelect component gets passed a `mode` param which is a `Mode` enum. The `Mode` enum has 4 values (SUPPLY, WITHDRAW, BORROW, REPAY).\n  // The `mode` param is used to determine what text gets rendered and what action to take on clicking the confirm button.\n\n  // As part of our simple design for the modal, we only show 2 mode options in the tab bar at a time.\n\n  // When the modal is triggered it is given a `defaultMode` (starting mode). This is passed in by the component which renders the modal.\n  // - If the user starts off in SUPPLY or WITHDRAW, we only want show them the option to switch between SUPPLY and WITHDRAW.\n  // - If the user starts off in BORROW or REPAY, we want to only show them the option to switch between BORROW and REPAY.\n\n  // However since the tab list has only has 2 tabs under it. It accepts an `index` parameter which determines which tab to show as \"selected\". Since we only show 2 tabs, it can either be 0 or 1.\n  // This means we can't just pass `mode` to `index` because `mode` could be 2 or 3 (for BORROW or REPAY respectively) which would be invalid.\n\n  // To solve this, if the mode is BORROW or REPAY we pass the index as `mode - 2` which transforms the BORROW mode to 0 and the REPAY mode to 1.\n\n  // However, we also need to do the opposite of that logic in `onChange`:\n  // - If a user clicks a tab and the current mode is SUPPLY or WITHDRAW we just pass that index (0 or 1 respectively) to setMode.\n  // - But if a user clicks on a tab and the current mode is BORROW or REPAY, we need to add 2 to the index of the tab so it's the right index in the `Mode` enum.\n  //   - Otherwise whenver you clicked on a tab it would always set the mode to SUPPLY or BORROW when clicking the left or right button respectively.\n\n  // Does that make sense? Everything I described above is basically a way to get around the tab component's understanding that it only has 2 tabs under it to make it fit into our 4 value enum setup.\n  // Still confused? DM me on Twitter (@transmissions11) for help.\n\n  return (\n    <>\n      <style>\n        {`\n            \n            .chakra-tabs__tab {\n              color: ${color ?? \"#FFFFFF\"} !important;\n\n              border-bottom-width: 1px;\n            }\n\n            .chakra-tabs__tablist {\n              border-bottom: 1px solid;\n              border-color: #272727;\n            }\n            \n        `}\n      </style>\n      <Box px={3} width=\"100%\" mt={1} mb=\"-1px\" zIndex={99999}>\n        <Tabs\n          isFitted\n          width=\"100%\"\n          align=\"center\"\n          index={isSupplySide ? mode : mode - 2}\n          onChange={(index: number) => {\n            if (isSupplySide) {\n              return setMode(index);\n            } else {\n              return setMode(index + 2);\n            }\n          }}\n        >\n          <TabList>\n            {isSupplySide ? (\n              <>\n                <Tab fontWeight=\"bold\" _active={{}} mb=\"-1px\">\n                  {t(\"Supply\")}\n                </Tab>\n                <Tab fontWeight=\"bold\" _active={{}} mb=\"-1px\">\n                  {t(\"Withdraw\")}\n                </Tab>\n              </>\n            ) : (\n              <>\n                <Tab fontWeight=\"bold\" _active={{}} mb=\"-1px\">\n                  {t(\"Borrow\")}\n                </Tab>\n                <Tab fontWeight=\"bold\" _active={{}} mb=\"-1px\">\n                  {t(\"Repay\")}\n                </Tab>\n              </>\n            )}\n          </TabList>\n        </Tabs>\n      </Box>\n    </>\n  );\n};\n\nconst StatsColumn = ({\n  color,\n  mode,\n  assets,\n  index,\n  amount,\n  symbol,\n  enableAsCollateral,\n}: {\n  color: string;\n  mode: Mode;\n  assets: USDPricedFuseAsset[];\n  index: number;\n  amount: number;\n  symbol: string;\n  enableAsCollateral: boolean;\n}) => {\n  const { t } = useTranslation();\n\n  const { rari, fuse } = useRari();\n\n  const { data: updatedAssets }: UseQueryResult<USDPricedFuseAsset[]> =\n    useQuery(\n      mode + \" \" + index + \" \" + JSON.stringify(assets) + \" \" + amount,\n      async () => {\n        const ethPrice: number = fuse.web3.utils.fromWei(\n          await rari.getEthUsdPriceBN()\n        ) as any;\n\n        const assetToBeUpdated = assets[index];\n\n        const interestRateModel = await fuse.getInterestRateModel(\n          assetToBeUpdated.cToken\n        );\n\n        let updatedAsset: USDPricedFuseAsset;\n        if (mode === Mode.SUPPLY) {\n          const supplyBalance =\n            parseInt(assetToBeUpdated.supplyBalance as any) + amount;\n\n          const totalSupply =\n            parseInt(assetToBeUpdated.totalSupply as any) + amount;\n\n          updatedAsset = {\n            ...assetToBeUpdated,\n\n            supplyBalance,\n            supplyBalanceUSD:\n              ((supplyBalance * assetToBeUpdated.underlyingPrice) / 1e36) *\n              ethPrice,\n\n            totalSupply,\n            supplyRatePerBlock: interestRateModel.getSupplyRate(\n              fuse.web3.utils.toBN(\n                totalSupply > 0\n                  ? new BigNumber(assetToBeUpdated.totalBorrow)\n                    .dividedBy(totalSupply.toString())\n                    .multipliedBy(1e18)\n                    .toFixed(0)\n                  : 0\n              )\n            ),\n          };\n        } else if (mode === Mode.WITHDRAW) {\n          const supplyBalance =\n            parseInt(assetToBeUpdated.supplyBalance as any) - amount;\n\n          const totalSupply =\n            parseInt(assetToBeUpdated.totalSupply as any) - amount;\n\n          updatedAsset = {\n            ...assetToBeUpdated,\n\n            supplyBalance,\n            supplyBalanceUSD:\n              ((supplyBalance * assetToBeUpdated.underlyingPrice) / 1e36) *\n              ethPrice,\n\n            totalSupply,\n            supplyRatePerBlock: interestRateModel.getSupplyRate(\n              fuse.web3.utils.toBN(\n                totalSupply > 0\n                  ? new BigNumber(assetToBeUpdated.totalBorrow)\n                    .dividedBy(totalSupply.toString())\n                    .multipliedBy(1e18)\n                    .toFixed(0)\n                  : 0\n              )\n            ),\n          };\n        } else if (mode === Mode.BORROW) {\n          const borrowBalance =\n            parseInt(assetToBeUpdated.borrowBalance as any) + amount;\n\n          const totalBorrow =\n            parseInt(assetToBeUpdated.totalBorrow as any) + amount;\n\n          updatedAsset = {\n            ...assetToBeUpdated,\n\n            borrowBalance,\n            borrowBalanceUSD:\n              ((borrowBalance * assetToBeUpdated.underlyingPrice) / 1e36) *\n              ethPrice,\n\n            totalBorrow,\n            borrowRatePerBlock: interestRateModel.getBorrowRate(\n              fuse.web3.utils.toBN(\n                assetToBeUpdated.totalSupply > 0\n                  ? new BigNumber(totalBorrow.toString())\n                    .dividedBy(assetToBeUpdated.totalSupply)\n                    .multipliedBy(1e18)\n                    .toFixed(0)\n                  : 0\n              )\n            ),\n          };\n        } else if (mode === Mode.REPAY) {\n          const borrowBalance =\n            parseInt(assetToBeUpdated.borrowBalance as any) - amount;\n\n          const totalBorrow =\n            parseInt(assetToBeUpdated.totalBorrow as any) - amount;\n\n          updatedAsset = {\n            ...assetToBeUpdated,\n\n            borrowBalance,\n            borrowBalanceUSD:\n              ((borrowBalance * assetToBeUpdated.underlyingPrice) / 1e36) *\n              ethPrice,\n\n            totalBorrow,\n            borrowRatePerBlock: interestRateModel.getBorrowRate(\n              fuse.web3.utils.toBN(\n                assetToBeUpdated.totalSupply > 0\n                  ? new BigNumber(totalBorrow.toString())\n                    .dividedBy(assetToBeUpdated.totalSupply)\n                    .multipliedBy(1e18)\n                    .toFixed(0)\n                  : 0\n              )\n            ),\n          };\n        }\n\n        return assets.map((value, _index) => {\n          if (_index === index) {\n            return updatedAsset;\n          } else {\n            return value;\n          }\n        });\n      }\n    );\n\n  const asset = assets[index];\n  const updatedAsset = updatedAssets ? updatedAssets[index] : null;\n\n  const borrowLimit = useBorrowLimit(assets);\n  const updatedBorrowLimit = useBorrowLimit(\n    updatedAssets ?? [],\n    enableAsCollateral\n      ? {\n        ignoreIsEnabledCheckFor: asset.cToken,\n      }\n      : undefined\n  );\n\n  const isSupplyingOrWithdrawing =\n    mode === Mode.SUPPLY || mode === Mode.WITHDRAW;\n\n  const supplyAPY = convertMantissaToAPY(asset.supplyRatePerBlock, 365);\n  const borrowAPY = convertMantissaToAPY(asset.borrowRatePerBlock, 365);\n\n  const updatedSupplyAPY = convertMantissaToAPY(\n    updatedAsset?.supplyRatePerBlock ?? 0,\n    365\n  );\n  const updatedBorrowAPY = convertMantissaToAPY(\n    updatedAsset?.borrowRatePerBlock ?? 0,\n    365\n  );\n\n  // If the difference is greater than a 0.1 percentage point change, alert the user\n  const updatedAPYDiffIsLarge = isSupplyingOrWithdrawing\n    ? Math.abs(updatedSupplyAPY - supplyAPY) > 0.1\n    : Math.abs(updatedBorrowAPY - borrowAPY) > 0.1;\n\n  return (\n    <DashboardBox width=\"100%\" height=\"190px\" mt={4}>\n      {updatedAsset ? (\n        <Column\n          mainAxisAlignment=\"space-between\"\n          crossAxisAlignment=\"flex-start\"\n          expand\n          py={3}\n          px={4}\n          fontSize=\"lg\"\n        >\n          <Row\n            mainAxisAlignment=\"space-between\"\n            crossAxisAlignment=\"center\"\n            width=\"100%\"\n            color={color}\n          >\n            <Text fontWeight=\"bold\" flexShrink={0}>\n              {t(\"Supply Balance\")}:\n            </Text>\n            <Text\n              fontWeight=\"bold\"\n              flexShrink={0}\n              fontSize={isSupplyingOrWithdrawing ? \"sm\" : \"lg\"}\n            >\n              {smallUsdFormatter(\n                asset.supplyBalance / 10 ** asset.underlyingDecimals\n              ).replace(\"$\", \"\")}\n              {isSupplyingOrWithdrawing ? (\n                <>\n                  {\" → \"}\n                  {smallUsdFormatter(\n                    updatedAsset!.supplyBalance /\n                    10 ** updatedAsset!.underlyingDecimals\n                  ).replace(\"$\", \"\")}\n                </>\n              ) : null}{\" \"}\n              {symbol}\n            </Text>\n          </Row>\n\n          <Row\n            mainAxisAlignment=\"space-between\"\n            crossAxisAlignment=\"center\"\n            width=\"100%\"\n          >\n            <Text fontWeight=\"bold\" flexShrink={0}>\n              {isSupplyingOrWithdrawing ? t(\"Supply APY\") : t(\"Borrow APY\")}:\n            </Text>\n            <Text\n              fontWeight=\"bold\"\n              fontSize={updatedAPYDiffIsLarge ? \"sm\" : \"lg\"}\n            >\n              {isSupplyingOrWithdrawing\n                ? supplyAPY.toFixed(2)\n                : borrowAPY.toFixed(2)}\n              %\n              {updatedAPYDiffIsLarge ? (\n                <>\n                  {\" → \"}\n                  {isSupplyingOrWithdrawing\n                    ? updatedSupplyAPY.toFixed(2)\n                    : updatedBorrowAPY.toFixed(2)}\n                  %\n                </>\n              ) : null}\n            </Text>\n          </Row>\n\n          <Row\n            mainAxisAlignment=\"space-between\"\n            crossAxisAlignment=\"center\"\n            width=\"100%\"\n          >\n            <Text fontWeight=\"bold\" flexShrink={0}>\n              {t(\"Borrow Limit\")}:\n            </Text>\n            <Text\n              fontWeight=\"bold\"\n              fontSize={isSupplyingOrWithdrawing ? \"sm\" : \"lg\"}\n            >\n              {smallUsdFormatter(borrowLimit)}\n              {isSupplyingOrWithdrawing ? (\n                <>\n                  {\" → \"} {smallUsdFormatter(updatedBorrowLimit)}\n                </>\n              ) : null}{\" \"}\n            </Text>\n          </Row>\n\n          <Row\n            mainAxisAlignment=\"space-between\"\n            crossAxisAlignment=\"center\"\n            width=\"100%\"\n          >\n            <Text fontWeight=\"bold\">{t(\"Debt Balance\")}:</Text>\n            <Text\n              fontWeight=\"bold\"\n              fontSize={!isSupplyingOrWithdrawing ? \"sm\" : \"lg\"}\n            >\n              {smallUsdFormatter(asset.borrowBalanceUSD)}\n              {!isSupplyingOrWithdrawing ? (\n                <>\n                  {\" → \"}\n                  {smallUsdFormatter(updatedAsset.borrowBalanceUSD)}\n                </>\n              ) : null}\n            </Text>\n          </Row>\n        </Column>\n      ) : (\n        <Center expand>\n          <Spinner />\n        </Center>\n      )}\n    </DashboardBox>\n  );\n};\n\nconst TokenNameAndMaxButton = ({\n  updateAmount,\n  logoURL,\n  asset,\n  mode,\n  symbol,\n  comptrollerAddress,\n}: {\n  logoURL: string;\n  symbol: string;\n  asset: USDPricedFuseAsset;\n  mode: Mode;\n  comptrollerAddress: string;\n  updateAmount: (newAmount: string) => any;\n}) => {\n  const { fuse, address } = useRari();\n\n  const toast = useToast();\n\n  const [isMaxLoading, setIsMaxLoading] = useState(false);\n\n  const setToMax = async () => {\n    setIsMaxLoading(true);\n\n    try {\n      const maxBN = await fetchMaxAmount(mode, fuse, address, asset);\n\n      if (maxBN!.isNeg() || maxBN!.isZero()) {\n        updateAmount(\"\");\n      } else {\n        const str = new BigNumber(maxBN!.toString())\n          .div(10 ** asset.underlyingDecimals)\n          .toFixed(18)\n          // Remove trailing zeroes\n          .replace(/\\.?0+$/, \"\");\n\n        updateAmount(str);\n      }\n\n      setIsMaxLoading(false);\n    } catch (e) {\n      handleGenericError(e, toast);\n    }\n  };\n\n  const { t } = useTranslation();\n\n  return (\n    <Row\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"center\"\n      flexShrink={0}\n    >\n      <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n        <Box height=\"25px\" width=\"25px\" mb=\"2px\" mr={2}>\n          <Image\n            width=\"100%\"\n            height=\"100%\"\n            borderRadius=\"50%\"\n            backgroundImage={`url(${SmallWhiteCircle})`}\n            src={logoURL}\n            alt=\"\"\n          />\n        </Box>\n        <Heading fontSize=\"24px\" mr={2} flexShrink={0}>\n          {symbol}\n        </Heading>\n      </Row>\n\n      <Button\n        ml={1}\n        height=\"28px\"\n        width=\"58px\"\n        bg=\"transparent\"\n        border=\"2px\"\n        borderRadius=\"8px\"\n        borderColor=\"#272727\"\n        fontSize=\"sm\"\n        fontWeight=\"extrabold\"\n        _hover={{}}\n        _active={{}}\n        onClick={setToMax}\n        isLoading={isMaxLoading}\n      >\n        {t(\"MAX\")}\n      </Button>\n    </Row>\n  );\n};\n\nconst AmountInput = ({\n  displayAmount,\n  updateAmount,\n  color,\n  disabled = false\n}: {\n  displayAmount: string;\n  updateAmount: (symbol: string) => any;\n  color: string;\n  disabled?: boolean;\n}) => {\n  return (\n    <Input\n      type=\"number\"\n      inputMode=\"decimal\"\n      fontSize=\"3xl\"\n      fontWeight=\"bold\"\n      variant=\"unstyled\"\n      _placeholder={{ color }}\n      placeholder=\"0.0\"\n      value={displayAmount}\n      color={color}\n      onChange={(event) => updateAmount(event.target.value)}\n      mr={4}\n      disabled={disabled}\n    />\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Fuse/Modals/PoolModal/index.tsx",
    "content": "import { useEffect, useState } from \"react\";\nimport { Modal, ModalOverlay, ModalContent } from \"@chakra-ui/react\";\n\nimport AmountSelect from \"./AmountSelect\";\nimport { MODAL_PROPS } from \"../../../../shared/Modal\";\n\nimport { USDPricedFuseAsset } from \"../../../../../utils/fetchFusePoolData\";\n\ninterface Props {\n  isOpen: boolean;\n  onClose: () => any;\n  defaultMode: Mode;\n  index: number;\n  assets: USDPricedFuseAsset[];\n  comptrollerAddress: string;\n  isBorrowPaused: boolean;\n}\n\nexport enum Mode {\n  SUPPLY,\n  WITHDRAW,\n  BORROW,\n  REPAY,\n}\n\nconst DepositModal = (props: Props) => {\n  const [mode, setMode] = useState(props.defaultMode);\n\n  useEffect(() => {\n    setMode(props.defaultMode);\n  }, [props.isOpen, props.defaultMode]);\n\n  return (\n    <Modal\n      motionPreset=\"slideInBottom\"\n      isOpen={props.isOpen}\n      onClose={props.onClose}\n      isCentered\n    >\n      <ModalOverlay />\n      <ModalContent {...MODAL_PROPS}>\n        <AmountSelect\n          comptrollerAddress={props.comptrollerAddress}\n          onClose={props.onClose}\n          assets={props.assets}\n          index={props.index}\n          mode={mode}\n          setMode={setMode}\n          isBorrowPaused={props.isBorrowPaused}\n        />\n      </ModalContent>\n    </Modal>\n  );\n};\n\nexport default DepositModal;\n"
  },
  {
    "path": "src/components/pages/InterestRates/InterestRates.tsx",
    "content": "// Components\nimport { Alert, Link, AlertIcon } from \"@chakra-ui/react\";\nimport { Column } from \"utils/chakraUtils\";\nimport InterestRatesView from \"./InterestRatesView\";\nimport { Header } from \"components/shared/Header\";\nimport Footer from \"components/shared/Footer\";\n// Hooks\nimport { useIsSmallScreen } from \"hooks/useIsSmallScreen\";\nimport { useRari } from \"context/RariContext\";\nimport { useTranslation } from \"react-i18next\";\n\nexport default function InterestRates() {\n  const isMobile = useIsSmallScreen();\n\n  const { isAuthed } = useRari();\n\n  const { t } = useTranslation();\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"center\"\n      color=\"#FFFFFF\"\n      mx=\"auto\"\n      width=\"100%\"\n      height=\"100%\"\n      px={4}\n    >\n      <Header isAuthed={isAuthed} />\n      <Alert colorScheme=\"green\" borderRadius={5} mt=\"5\">\n        <AlertIcon />\n        <span style={{ color: \"#2F855A\" }}>\n          {t(\n            \"This page is currently in beta. If you notice any issues, please\"\n          )}{\" \"}\n          <Link\n            isExternal={true}\n            href=\"https://discord.gg/3uWWeQGq\"\n            textDecoration=\"underline\"\n          >\n            {t(\"let us know!\")}\n          </Link>\n        </span>\n      </Alert>\n      {isMobile ? (\n        <Alert colorScheme=\"orange\" borderRadius={5} mt={5}>\n          <AlertIcon />\n          <span style={{ color: \"#C05621\" }}>\n            {t(\n              \"This page is not optimized for use on smaller screens. Sorry for the inconvenience!\"\n            )}\n          </span>\n        </Alert>\n      ) : null}\n      <InterestRatesView />\n      <Footer />\n    </Column>\n  );\n}\n"
  },
  {
    "path": "src/components/pages/InterestRates/InterestRatesTable.tsx",
    "content": "import { useContext, useMemo, useState } from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\n// Components\nimport { Avatar, Box, Link, Spinner } from \"@chakra-ui/react\";\nimport { Table, Td, Th, Tr, Thead, Tbody } from \"@chakra-ui/table\";\nimport { WindowTable } from \"window-table\";\n\n// Context\nimport {\n  InterestRatesContext,\n  InterestRatesTableOptions,\n} from \"./InterestRatesView\";\n\n// Types\nimport { MarketInfo } from \"hooks/interestRates/types\";\nimport { TokenData } from \"hooks/useTokenData\";\nimport { useTranslation } from \"react-i18next\";\n\nconst DEFAULT_COLUMNS: any = [\n  {\n    title: \"Asset\",\n    key: \"asset\",\n    width: 375,\n    Component: AssetTitle,\n  },\n  {\n    title: \"Compound\",\n    key: \"compound\",\n    width: 150,\n    Component: PercentageComponent,\n  },\n  {\n    title: \"Aave\",\n    key: \"aave\",\n    width: 150,\n    Component: PercentageComponent,\n  },\n];\n\nexport default function InterestRatesTable() {\n  const { fusePools, tokens, markets } = useContext(InterestRatesContext);\n\n  const columns = useMemo(\n    () => [\n      ...DEFAULT_COLUMNS,\n      ...(fusePools?.map((pool) => {\n        return {\n          key: pool.id.toString(),\n          width: 150,\n          title: pool.name,\n          Component: PercentageComponent,\n        };\n      }) || []),\n    ],\n    [fusePools]\n  );\n\n  const data = useMemo(\n    () => [\n      ...tokens.map((token) => {\n        return {\n          asset: JSON.stringify(token),\n          compound: JSON.stringify(\n            markets.compound.find(\n              (market) => market.tokenAddress === token.address\n            )\n          ),\n          aave: JSON.stringify(\n            markets.aave.find((market) => market.tokenAddress === token.address)\n          ),\n          fuse: JSON.stringify(\n            fusePools\n              ?.map((pool) => {\n                return {\n                  id: pool.id.toString(),\n                  marketInfo: markets.fuse[pool.id.toString()]?.find(\n                    (market) => market.tokenAddress === token.address\n                  ),\n                };\n              })\n              // filter out empty items\n              .filter(\n                (item) =>\n                  item.marketInfo && Object.keys(item.marketInfo).length !== 0\n              )\n          ),\n        };\n      }),\n      // last couple items are here to add additional padding\n      {\n        asset: \"NO_ASSET\",\n        compound: \"\",\n        aave: \"\",\n        fuse: \"\",\n      },\n      {\n        asset: \"NO_ASSET\",\n        compound: \"\",\n        aave: \"\",\n        fuse: \"\",\n      },\n    ],\n    [tokens, fusePools, markets]\n  );\n\n  return (\n    <Box w=\"100%\" mt=\"5\">\n      <WindowTable\n        Table={Table}\n        HeaderRow={Tr}\n        Row={TableRow}\n        HeaderCell={HeaderCell}\n        Cell={TableCell}\n        Header={Thead}\n        Body={Tbody}\n        columns={columns}\n        data={\n          tokens.length === 0\n            ? [{ asset: \"NO_RESULTS\", compound: \"\", aave: \"\", fuse: \"\" }]\n            : data\n        }\n        rowHeight={55}\n        style={{\n          width: \"100%\",\n          height: 600,\n          position: \"relative\",\n          overflowY: \"hidden\",\n        }}\n      ></WindowTable>\n      {/* gradient at rightmost edge of scroll to hint at scrolling functionality */}\n      <Box\n        w=\"100px\"\n        h=\"100%\"\n        pointerEvents=\"none\"\n        position=\"absolute\"\n        background=\"linear-gradient(90deg, rgba(0,0,0,0) 0%, rgba(0,0,0,1) 100%)\"\n        transition=\"opacity 200ms ease\"\n        top={0}\n        right={0}\n        zIndex={2}\n      />\n    </Box>\n  );\n}\n\nfunction TableCell({ children, column, ...props }: any) {\n  return (\n    <Td\n      position={column.key === \"asset\" ? \"sticky\" : null}\n      left={0}\n      zIndex={2}\n      {...props}\n    >\n      {children}\n    </Td>\n  );\n}\n\nfunction TableRow({ children, row, ...props }: any) {\n  const { t } = useTranslation();\n\n  // NO_ASSET is for blank rows (added jankily to provide padding at the end of the list)\n  return row.asset === \"NO_ASSET\" || row.asset === \"NO_RESULTS\" ? (\n    <Tr {...props}>\n      <Td colSpan={10000} border=\"none\">\n        {row.asset === \"NO_ASSET\" ? \"\" : t(\"No assets match your search.\")}\n      </Td>\n    </Tr>\n  ) : (\n    <Tr {...props}>{children}</Tr>\n  );\n}\n\nfunction HeaderCell({ children, column, ...props }: any) {\n  const poolLink = useMemo(() => {\n    switch (column.key) {\n      case \"asset\":\n        return \"\";\n      case \"aave\":\n        return \"https://app.aave.com/markets\";\n      case \"compound\":\n        return \"https://app.compound.finance/\";\n      default:\n        // column.key is the pool ID for Fuse pools\n        return \"/fuse/pool/\" + column.key;\n    }\n  }, [column.key]);\n\n  return (\n    // janky way to make exception for asset column\n    <Th\n      textAlign={column.key === \"asset\" ? \"left\" : \"center\"}\n      position={column.key === \"asset\" ? \"sticky\" : null}\n      color=\"#fff\"\n      {...props}\n    >\n      {column.key === \"asset\" ? (\n        children\n      ) : column.key === \"aave\" || column.key === \"compound\" ? (\n        // external (out) links (Aave, Compound)\n        <Link href={poolLink} isExternal={true}>\n          {children}\n        </Link>\n      ) : (\n        // internal router links (Fuse)\n        <Link to={poolLink} as={RouterLink}>\n          {children}\n        </Link>\n      )}\n    </Th>\n  );\n}\n\nfunction AssetTitle({ row, column }: any) {\n  const asset = useMemo(\n    () => JSON.parse(row[column.key] || \"null\") as TokenData | null,\n    [row, column.key]\n  );\n\n  const [hasLogoLoaded, setHasLogoLoaded] = useState(false);\n\n  return asset ? (\n    <>\n      <Spinner size=\"xs\" hidden={hasLogoLoaded} />\n      <Box hidden={!hasLogoLoaded}>\n        <Avatar\n          bg=\"#fff\"\n          borderWidth=\"1px\"\n          src={asset?.logoURL!}\n          name={asset?.name!}\n          size=\"xs\"\n          display=\"inline-block\"\n          mr=\"7px\"\n          position=\"relative\"\n          transform=\"translateY(-2px)\"\n          onLoad={() => setHasLogoLoaded(true)}\n        />\n        <strong>\n          {shortenString(25, asset?.name!)} ({asset?.symbol})\n        </strong>\n      </Box>\n    </>\n  ) : (\n    // no data yet, so show spinner\n    <Spinner size=\"xs\" />\n  );\n}\n\nconst shortenString = (length: number, str?: string) =>\n  (str?.length || 0) <= length\n    ? str\n    : str?.substring(0, length).trim() + \"\\u2026\";\n\nfunction PercentageComponent({ row, column }: any) {\n  const datum = useMemo(\n    () =>\n      column.key === \"compound\" || column.key === \"aave\"\n        ? (JSON.parse(row[column.key] || \"null\") as MarketInfo | null)\n        : // logic to get Fuse pool (sorry it's janky--it's 2 AM rip)\n          (JSON.parse(row.fuse).find((item: any) => item.id === column.key)\n            ?.marketInfo as MarketInfo),\n    [row, column.key]\n  );\n\n  const { selectedTable } = useContext(InterestRatesContext);\n\n  // current rate in view (either lending or borrowing)\n  const rate = useMemo(\n    () =>\n      selectedTable === InterestRatesTableOptions.Lending\n        ? datum?.rates.lending\n        : datum?.rates.borrowing,\n    [selectedTable, datum]\n  );\n\n  return (\n    <div style={{ textAlign: \"center\", width: \"100%\", height: \"100%\" }}>\n      {datum ? formatPercentage(rate as number) : \"\\u2013\"}\n    </div>\n  );\n}\n\n// format percentage with 2 decimal places\nconst formatPercentage = (rate: number) => {\n  const percent = rate * 100;\n  return percent < 0.01 && percent > 0 ? \"<0.01%\" : percent.toFixed(2) + \"%\";\n};\n"
  },
  {
    "path": "src/components/pages/InterestRates/InterestRatesView.tsx",
    "content": "import { useEffect, useMemo, useState, createContext } from \"react\";\n\n// Components\nimport { Box, Center, Flex, Heading, Spacer, Spinner } from \"@chakra-ui/react\";\nimport { Column } from \"utils/chakraUtils\";\n// import InterestRatesRow from \"./InterestRatesRow\";\nimport MultiPicker from \"./MultiPicker\";\nimport TokenSearch from \"./TokenSearch\";\nimport InterestRatesTable from \"./InterestRatesTable\";\n\n// Hooks\nimport { TokenData, fetchTokenData } from \"hooks/useTokenData\";\nimport useReserves from \"hooks/interestRates/aave/useReserves\";\nimport useCompoundMarkets from \"hooks/interestRates/compound/useCompoundMarkets\";\nimport useFuseMarkets from \"hooks/interestRates/fuse/useFuseMarkets\";\n\n// Types\nimport { MarketInfo } from \"hooks/interestRates/types\";\nimport { MergedPool } from \"hooks/fuse/useFusePools\";\nimport { useTranslation } from \"react-i18next\";\n\nexport enum InterestRatesTableOptions {\n  Lending = \"lending\",\n  Borrowing = \"borrowing\",\n}\n\ntype FuseMarket = {\n  [id: string]: MarketInfo[];\n};\n\ntype InterestRatesContextType = {\n  selectedTable: InterestRatesTableOptions;\n  tokens: TokenData[];\n  fusePools?: MergedPool[];\n  markets: {\n    aave: MarketInfo[];\n    compound: MarketInfo[];\n    fuse: FuseMarket;\n  };\n  marketDataLoaded: boolean; // whether or not the market data has loaded\n};\nexport const InterestRatesContext = createContext<InterestRatesContextType>({\n  selectedTable: InterestRatesTableOptions.Lending,\n  tokens: [],\n  fusePools: [],\n  markets: {\n    aave: [],\n    compound: [],\n    fuse: {},\n  },\n  marketDataLoaded: false,\n});\n\nexport default function InterestRatesView() {\n  // name of table in view (current)\n  const [tableName, setTableName] = useState<InterestRatesTableOptions>(\n    InterestRatesTableOptions.Lending\n  );\n  // search term in TokenSearch component\n  const [tokenSearchValue, setTokenSearchValue] = useState(\"\");\n  // information about each token\n  const [tokenData, setTokenData] = useState<TokenData[]>([]);\n\n  // Aave\n  const aaveReserves = useReserves();\n  // Compound\n  const compoundMarkets = useCompoundMarkets();\n  // Fuse\n  const { pools: fusePools, markets: fuseMarkets } = useFuseMarkets();\n\n  useEffect(() => {\n    let isUnmounting = false;\n\n    async function getTokenData() {\n      // gather list of all tokens\n      const allTokens = [\n        ...aaveReserves.map((reserve) => reserve.tokenAddress),\n        ...compoundMarkets.map((market) => market.tokenAddress),\n      ];\n\n      // add fuse pools if available\n      if (fusePools)\n        allTokens.push(\n          ...fusePools.map((pool) => pool.underlyingTokens).flat()\n        );\n\n      // isolate unique tokens only\n      const tokenAddresses = [...new Set(allTokens)];\n\n      // fetch token data asynchronously\n      const tokenDataList: TokenData[] = [];\n      await Promise.all(\n        tokenAddresses.map(async (address) => {\n          tokenDataList.push(await fetchTokenDataWithCache(address));\n        })\n      );\n\n      // sort token data\n      tokenDataList.sort(\n        (a, b) =>\n          tokenAddresses.indexOf(a.address!) -\n          tokenAddresses.indexOf(b.address!)\n      );\n\n      // set list in state if conditions are met\n      if (!isUnmounting && tokenDataList.length === tokenAddresses.length)\n        setTokenData(tokenDataList);\n    }\n\n    getTokenData();\n\n    // set isUnmounting to true when unmounting\n    return () => {\n      isUnmounting = false;\n    };\n  }, [aaveReserves, compoundMarkets, setTokenData, fusePools]);\n\n  // token list filtered by search term\n  const filteredTokenData = useMemo(\n    () =>\n      tokenSearchValue === \"\"\n        ? tokenData\n        : tokenData // filter token by search term\n            .filter(\n              (token) =>\n                token\n                  .name!.toLowerCase()\n                  .includes(tokenSearchValue.toLowerCase()) ||\n                token\n                  .symbol!.toLowerCase()\n                  .includes(tokenSearchValue.toLowerCase())\n            ),\n    [tokenSearchValue, tokenData]\n  );\n\n  const { t } = useTranslation();\n\n  return (\n    <InterestRatesContext.Provider\n      value={{\n        selectedTable: tableName,\n        tokens: filteredTokenData,\n        fusePools: fusePools,\n        markets: {\n          aave: aaveReserves,\n          compound: compoundMarkets,\n          fuse: fuseMarkets,\n        },\n        marketDataLoaded: aaveReserves.length > 0 && compoundMarkets.length > 0,\n      }}\n    >\n      <Column\n        width=\"100%\"\n        mainAxisAlignment=\"center\"\n        crossAxisAlignment=\"flex-start\"\n        mt=\"3\"\n        p={15}\n      >\n        {/* TODO (Zane): Add i18n */}\n        <Heading size=\"lg\" mb=\"5\">\n          Interest Rates\n        </Heading>\n        {tokenData.length === 0 ||\n        !fusePools ||\n        !fuseMarkets ||\n        !aaveReserves ||\n        !compoundMarkets ? (\n          <Center w=\"100%\" h=\"100px\">\n            <Spinner size=\"xl\" />\n          </Center>\n        ) : (\n          <>\n            <Flex w=\"100%\">\n              <Box flex=\"3\">\n                <MultiPicker\n                  options={{\n                    lending: t(\"Lending Rates\"),\n                    borrowing: t(\"Borrowing Rates\"),\n                  }}\n                  // set table on change\n                  onChange={(value) =>\n                    setTableName(value as InterestRatesTableOptions)\n                  }\n                />\n              </Box>\n              <Spacer flex=\"2\" />\n              <Box flex=\"3\">\n                <TokenSearch onChange={setTokenSearchValue} />\n              </Box>\n            </Flex>\n            <Box mt=\"4\" w=\"100%\" position=\"relative\">\n              <InterestRatesTable />\n            </Box>\n          </>\n        )}\n      </Column>\n    </InterestRatesContext.Provider>\n  );\n}\n\nasync function fetchTokenDataWithCache(address: string) {\n  const storageKey = \"tokenInfo:\" + address;\n  if (window.sessionStorage.getItem(storageKey)) {\n    return JSON.parse(window.sessionStorage.getItem(storageKey) as string);\n  }\n\n  // if not in storage, fetch it fresh\n  const tokenData = await fetchTokenData(address);\n  window.sessionStorage.setItem(storageKey, JSON.stringify(tokenData));\n\n  return tokenData;\n}\n"
  },
  {
    "path": "src/components/pages/InterestRates/MultiPicker.tsx",
    "content": "import { useState, useEffect, MouseEventHandler, ReactNode } from \"react\";\n\n// Components\nimport { Button, ButtonGroup } from \"@chakra-ui/react\";\n\n// TODO (Zane): change \"any\" type to something else?\nexport default function MultiPicker({\n  options,\n  onChange,\n}: {\n  options: any;\n  onChange: (state: string) => any;\n}) {\n  // start with first option as default\n  const [selectedKey, setSelectedKey] = useState<string>(\n    Object.keys(options)[0]\n  );\n\n  useEffect(() => {\n    onChange(selectedKey);\n  }, [onChange, selectedKey]);\n\n  return (\n    <ButtonGroup spacing=\"0\" borderRadius=\"full\" bgColor=\"#2D3748\">\n      {Object.keys(options).map((key) => (\n        <MultiPickerButton\n          selected={key === selectedKey}\n          onClick={() => setSelectedKey(key)}\n          key={key}\n        >\n          {options[key]}\n        </MultiPickerButton>\n      ))}\n    </ButtonGroup>\n  );\n}\n\nfunction MultiPickerButton({\n  children,\n  selected,\n  onClick,\n}: {\n  children: ReactNode;\n  selected: boolean;\n  onClick?: MouseEventHandler<HTMLButtonElement>;\n}) {\n  return (\n    <Button\n      colorScheme=\"black\"\n      variant={selected ? \"solid\" : \"ghost\"}\n      borderRadius=\"full\"\n      onClick={onClick}\n      bgColor={selected ? \"#00C628\" : \"transparent\"}\n    >\n      {children}\n    </Button>\n  );\n}\n"
  },
  {
    "path": "src/components/pages/InterestRates/TokenSearch.tsx",
    "content": "import { useEffect } from \"react\";\nimport { useState } from \"react\";\n\n// Components\nimport { Box } from \"@chakra-ui/react\";\nimport {\n  Input,\n  InputGroup,\n  InputLeftElement,\n  InputRightElement,\n} from \"@chakra-ui/input\";\nimport { SearchIcon, CloseIcon } from \"@chakra-ui/icons\";\nimport { useTranslation } from \"react-i18next\";\n\nexport default function TokenSearch({\n  onChange,\n}: {\n  onChange: (value: string) => void;\n}) {\n  const [val, setVal] = useState(\"\");\n\n  // run onChange on value change\n  useEffect(() => {\n    onChange(val);\n  }, [val, onChange]);\n\n  const { t } = useTranslation();\n\n  return (\n    <Box>\n      <InputGroup>\n        <InputLeftElement\n          pointerEvents=\"none\"\n          children={<SearchIcon color=\"#757575\" />}\n        />\n        <Input\n          variant=\"filled\"\n          value={val}\n          color=\"#757575\"\n          onChange={({ target: { value } }) => setVal(value)}\n          placeholder={t(\"Search Assets\")}\n          _placeholder={{ color: \"gray.500\", fontWeight: \"bold\" }}\n          _focus={{ color: \"#fff\", background: \"transparent\" }}\n        />\n        {/* button to clear search */}\n        {val === \"\" ? null : (\n          <InputRightElement\n            role=\"button\"\n            aria-label=\"Clear search\"\n            title=\"Clear search\"\n            cursor=\"pointer\"\n            onClick={() => setVal(\"\")}\n            children={<CloseIcon color=\"#757575\" boxSize=\"12px\" />}\n          />\n        )}\n      </InputGroup>\n    </Box>\n  );\n}\n"
  },
  {
    "path": "src/components/pages/MultiPoolPortal.tsx",
    "content": "import { memo, ReactNode, useEffect, useState } from \"react\";\n\nimport {\n  Center,\n  Column,\n  Row,\n  RowOnDesktopColumnOnMobile,\n  useWindowSize,\n} from \"utils/chakraUtils\";\nimport DashboardBox from \"../shared/DashboardBox\";\n\n// import SmallLogo from \"../../static/small-logo.png\";\n\nimport CaptionedStat from \"../shared/CaptionedStat\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nimport { FaTwitter } from \"react-icons/fa\";\nimport {\n  Box,\n  Heading,\n  Link,\n  Text,\n  Image,\n  Spinner,\n  useDisclosure,\n  Icon,\n} from \"@chakra-ui/react\";\nimport { ModalDivider } from \"../shared/Modal\";\n\n//@ts-ignore\nimport Marquee from \"react-double-marquee\";\nimport { useRari } from \"../../context/RariContext\";\n\nimport { MdSwapHoriz } from \"react-icons/md\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { PoolTypeProvider } from \"../../context/PoolContext\";\nimport { usePoolInfo } from \"../../hooks/usePoolInfo\";\nimport { useQuery } from \"react-query\";\n\nimport DepositModal from \"./RariDepositModal\";\nimport { Header } from \"../shared/Header\";\nimport { SimpleTooltip } from \"../shared/SimpleTooltip\";\nimport {\n  APYMovingStat,\n  APYWithRefreshMovingStat,\n  RefetchMovingStat,\n} from \"../shared/MovingStat\";\nimport {\n  smallStringUsdFormatter,\n  smallUsdFormatter,\n  stringUsdFormatter,\n  usdFormatter,\n} from \"../../utils/bigUtils\";\nimport {\n  usePoolBalance,\n  useTotalPoolsBalance,\n} from \"../../hooks/usePoolBalance\";\nimport PoolsPerformanceChart from \"../shared/PoolsPerformance\";\nimport { useTVLFetchers } from \"../../hooks/useTVL\";\nimport { usePoolAPY } from \"../../hooks/usePoolAPY\";\n\nimport BigNumber from \"bignumber.js\";\nimport { InfoIcon, QuestionIcon } from \"@chakra-ui/icons\";\nimport { getSDKPool, Pool } from \"../../utils/poolUtils\";\nimport { useNoSlippageCurrencies } from \"../../hooks/useNoSlippageCurrencies\";\nimport { usePoolInterestEarned } from \"hooks/usePoolInterest\";\nimport { formatBalanceBN } from \"utils/format\";\nimport Footer from \"components/shared/Footer\";\n\nimport { useAuthedCallback } from \"hooks/useAuthedCallback\";\n\nimport { ABILLY } from \"constants/homepage\";\n\nconst faces = [\n  { type: \"svg\", src: \"jack.svg\", size: 20, weight: 0.03 },\n  { type: \"svg\", src: \"david.svg\", size: 20, weight: 0.03 },\n  { type: \"svg\", src: \"jai.svg\", size: 20, weight: 0.03 },\n  // { type: \"svg\", src: \"t11s.svg\", size: 20, weight: 0.03 },\n];\n\nconst props = [\"square\", \"triangle\", \"line\"];\n\nconst propsWithFaces = [...props, ...faces];\n\nconst MultiPoolPortal = memo(() => {\n  const { width } = useWindowSize();\n\n  const { isAuthed } = useRari();\n\n  // Determine the column width based on the width of the window.\n  const columnWidth = width > 930 ? \"900px\" : width > 730 ? \"700px\" : \"100%\";\n\n  const { getNumberTVL } = useTVLFetchers();\n\n  const [celebrate, setCelebrate] = useState(false);\n\n  useEffect(() => {\n    getNumberTVL().then((tvl) => {\n      if (tvl > ABILLY) {\n        setCelebrate(true);\n      }\n    });\n  }, []);\n\n  return (\n    <>\n      <canvas\n        id=\"my-canvas\"\n        style={{\n          position: \"fixed\",\n          zIndex: 0,\n        }}\n      ></canvas>\n      <Box h=\"100%\" w=\"100%\" zIndex={1}>\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          color=\"#FFFFFF\"\n          mx=\"auto\"\n          width={columnWidth}\n          px={columnWidth === \"100%\" ? 4 : 0}\n        >\n          <Header isAuthed={isAuthed} />\n\n          <FundStats glow={celebrate} />\n\n          <DashboardBox mt={4} width=\"100%\" height=\"100px\">\n            <NewsAndTwitterLink celebrate={celebrate} />\n          </DashboardBox>\n\n          <DashboardBox\n            mt={4}\n            height=\"300px\"\n            width=\"100%\"\n            color=\"#292828\"\n            overflow=\"hidden\"\n            px={1}\n          >\n            <PoolsPerformanceChart size={300} />\n          </DashboardBox>\n\n          <DashboardBox\n            width=\"100%\"\n            height={{ md: \"100px\", base: \"250px\" }}\n            mt={4}\n          >\n            <GovernanceStats />\n          </DashboardBox>\n\n          <PoolCards />\n          <Footer />\n        </Column>\n      </Box>\n    </>\n  );\n});\n\nexport default MultiPoolPortal;\n\nexport const RGTPrice = () => {\n  const { t } = useTranslation();\n\n  const { rari } = useRari();\n\n  return (\n    <RefetchMovingStat\n      queryKey=\"rgtPrice\"\n      interval={5000}\n      fetch={() => {\n        return rari.governance.rgt.getExchangeRate().then((data) => {\n          return stringUsdFormatter(rari.web3.utils.fromWei(data));\n        });\n      }}\n      loadingPlaceholder=\"$?\"\n      statSize=\"3xl\"\n      captionSize=\"xs\"\n      caption={t(\"Rari Governance Token Price\")}\n      crossAxisAlignment=\"center\"\n      captionFirst={false}\n    />\n  );\n};\n\nconst GovernanceStats = () => {\n  const { t } = useTranslation();\n\n  const { rari, address } = useRari();\n\n  const { data: rgtBalance } = useQuery(\n    address + \" balanceOf RGT\",\n    async () => {\n      const rawBalance = await rari.governance.rgt.balanceOf(address);\n\n      return stringUsdFormatter(rari.web3.utils.fromWei(rawBalance)).replace(\n        \"$\",\n        \"\"\n      );\n    }\n  );\n\n  const { data: rgtSupply } = useQuery(\"rgtSupply\", async () => {\n    const rawSupply =\n      //@ts-ignore\n      await rari.governance.contracts.RariGovernanceToken.methods\n        .totalSupply()\n        .call();\n\n    return smallStringUsdFormatter((parseFloat(rawSupply) / 1e18).toFixed(0))\n      .replace(\"$\", \"\")\n      .replace(\".00\", \"\");\n  });\n\n  return (\n    <RowOnDesktopColumnOnMobile\n      expand\n      mainAxisAlignment=\"space-around\"\n      crossAxisAlignment=\"center\"\n    >\n      <Center expand>\n        <CaptionedStat\n          stat={rgtSupply ?? \"?\"}\n          statSize=\"3xl\"\n          captionSize=\"xs\"\n          caption={t(\"RGT Supply\")}\n          crossAxisAlignment=\"center\"\n          captionFirst={false}\n        />\n      </Center>\n\n      <Center expand>\n        <RGTPrice />\n      </Center>\n      <Center expand>\n        <CaptionedStat\n          stat={rgtBalance ?? \"$?\"}\n          statSize=\"3xl\"\n          captionSize=\"xs\"\n          caption={t(\"RGT Balance (Claimed)\")}\n          crossAxisAlignment=\"center\"\n          captionFirst={false}\n        />\n      </Center>\n    </RowOnDesktopColumnOnMobile>\n  );\n};\n\nconst FundStats = ({ glow = false }: { glow?: boolean }) => {\n  const { t } = useTranslation();\n\n  const { isAuthed } = useRari();\n\n  const { isLoading: isBalanceLoading, data: balanceData } =\n    useTotalPoolsBalance();\n\n  const { getNumberTVL } = useTVLFetchers();\n\n  // If loading, stop here\n  if (isBalanceLoading) {\n    return (\n      <Center\n        height={{\n          md: isAuthed ? \"235px\" : \"110px\",\n          base: isAuthed ? \"330px\" : \"215px\",\n        }}\n      >\n        <Spinner />\n      </Center>\n    );\n  }\n\n  const myBalance = balanceData!;\n  const hasNotDeposited = myBalance === 0;\n\n  return (\n    <>\n      {hasNotDeposited ? null : (\n        <DashboardBox width=\"100%\" mb={4} height=\"110px\" glow={glow}>\n          <Center expand>\n            <APYWithRefreshMovingStat\n              formatStat={smallUsdFormatter}\n              fetchInterval={40000}\n              loadingPlaceholder=\"$?\"\n              apyInterval={100}\n              fetch={getNumberTVL}\n              queryKey={\"totalValueLocked\"}\n              apy={0.15}\n              statSize=\"3xl\"\n              captionSize=\"xs\"\n              caption={t(\"Total Value Locked\")}\n              crossAxisAlignment=\"center\"\n              captionFirst={false}\n              captionColor={glow ? \"white\" : \"#858585\"}\n            />\n          </Center>\n        </DashboardBox>\n      )}\n\n      <RowOnDesktopColumnOnMobile\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n        width=\"100%\"\n        height={{ md: \"110px\", base: \"auto\" }}\n      >\n        <DashboardBox\n          width={{ md: hasNotDeposited ? \"100%\" : \"50%\", base: \"100%\" }}\n          height={{ md: \"100%\", base: \"110px\" }}\n          mr={{\n            md: hasNotDeposited ? \"0px\" : 4,\n            base: 0,\n          }}\n          glow={hasNotDeposited && glow}\n        >\n          <Center expand>\n            {hasNotDeposited ? (\n              <APYWithRefreshMovingStat\n                formatStat={smallUsdFormatter}\n                fetchInterval={40000}\n                loadingPlaceholder=\"$?\"\n                apyInterval={100}\n                fetch={getNumberTVL}\n                queryKey={\"totalValueLocked\"}\n                apy={0.15}\n                statSize=\"3xl\"\n                captionSize=\"xs\"\n                caption={t(\"Total Value Locked\")}\n                crossAxisAlignment=\"center\"\n                captionFirst={false}\n                captionColor={glow ? \"white\" : \"#858585\"}\n              />\n            ) : (\n              <APYMovingStat\n                formatStat={usdFormatter}\n                startingAmount={myBalance}\n                interval={100}\n                apy={0.1}\n                statSize=\"3xl\"\n                captionSize=\"xs\"\n                caption={t(\"Account Balance\")}\n                crossAxisAlignment=\"center\"\n                captionFirst={false}\n                captionColor={glow ? \"white\" : \"#858585\"}\n              />\n            )}\n          </Center>\n        </DashboardBox>\n\n        {hasNotDeposited ? null : (\n          <DashboardBox\n            mt={{ md: 0, base: 4 }}\n            width={{ md: \"50%\", base: \"100%\" }}\n            height={{ md: \"100%\", base: \"100px\" }}\n          >\n            <Center expand>\n              <InterestEarned />\n            </Center>\n          </DashboardBox>\n        )}\n      </RowOnDesktopColumnOnMobile>\n    </>\n  );\n};\n\nconst PoolCards = () => {\n  return (\n    <RowOnDesktopColumnOnMobile\n      mainAxisAlignment=\"space-between\"\n      crossAxisAlignment=\"center\"\n      width=\"100%\"\n    >\n      {Object.values(Pool)\n        .slice(0, 2)\n        .map((pool: Pool, index: number, array: Pool[]) => {\n          return (\n            <DashboardBox\n              key={pool}\n              width={{ md: \"33%\", base: \"100%\" }}\n              height=\"280px\"\n              mr={{\n                md:\n                  // Don't add right margin on the last child\n                  index === array.length - 1 ? 0 : 4,\n                base: 0,\n              }}\n              mt={4}\n              flexGrow={1}\n            >\n              <PoolDetailCard pool={pool} />\n            </DashboardBox>\n          );\n        })}\n    </RowOnDesktopColumnOnMobile>\n  );\n};\n\nconst PoolDetailCard = ({ pool }: { pool: Pool }) => {\n  const { t } = useTranslation();\n\n  const { rari, isAuthed } = useRari();\n\n  const { poolType, poolName, poolLogo } = usePoolInfo(pool);\n\n  const {\n    isOpen: isDepositModalOpen,\n    onOpen: openDepositModal,\n    onClose: closeDepositModal,\n  } = useDisclosure();\n\n  const authedOpenModal = useAuthedCallback(openDepositModal);\n\n  const { data: balanceData, isLoading: isPoolBalanceLoading } =\n    usePoolBalance(pool);\n\n  const poolAPY = usePoolAPY(pool);\n\n  const noSlippageCurrencies = useNoSlippageCurrencies(pool);\n\n  if (isPoolBalanceLoading) {\n    return (\n      <Center\n        height={{\n          md: isAuthed ? \"235px\" : \"110px\",\n          base: isAuthed ? \"330px\" : \"215px\",\n        }}\n      >\n        <Spinner />\n      </Center>\n    );\n  }\n\n  const myBalance = balanceData!;\n  const formattedBalance = formatBalanceBN(rari, myBalance, pool === Pool.ETH);\n\n  // const rgtAPR = useRGTAPR();\n\n  return (\n    <>\n      {isDepositModalOpen ? (\n        <PoolTypeProvider pool={pool}>\n          <DepositModal\n            isOpen={isDepositModalOpen}\n            onClose={closeDepositModal}\n          />\n        </PoolTypeProvider>\n      ) : null}\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        expand\n        p={4}\n      >\n        <Box width=\"50px\" height=\"50px\" flexShrink={0}>\n          <Image src={poolLogo} />\n        </Box>\n\n        <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\" mt={2}>\n          <Heading fontSize=\"xl\" lineHeight=\"2.5rem\" ml=\"12px\">\n            {poolName}\n          </Heading>\n\n          <SimpleTooltip\n            label={\n              \"Rebalances \" +\n              (noSlippageCurrencies\n                ? noSlippageCurrencies.join(\" + \")\n                : \" ? \") +\n              \" between \" +\n              getSDKPool({ rari, pool: poolType })\n                // Filter out empty pools\n                .allocations.POOLS.filter((el) => !!el)\n                .join(\", \")\n            }\n          >\n            <QuestionIcon ml={2} mb=\"3px\" boxSize=\"12px\" />\n          </SimpleTooltip>\n        </Row>\n\n        <SimpleTooltip label={t(\"Your balance in this pool\")}>\n          <Text mt={4} mb={5} fontSize=\"md\" textAlign=\"center\">\n            {isPoolBalanceLoading ? \"$?\" : formattedBalance}\n          </Text>\n        </SimpleTooltip>\n\n        <Text fontWeight=\"bold\" textAlign=\"center\">\n          {poolAPY ?? \"?\"}% APY\n          {/* +{\" \"}\n          <SimpleTooltip label={t(\"Extra returns from $RGT\")}>\n            <span>\n              ({rgtAPR ?? \"?\"}%{\" \"}\n              <Image display=\"inline\" src={SmallLogo} boxSize=\"20px\" />)\n            </span>\n          </SimpleTooltip> */}\n        </Text>\n\n        <Row\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n          mt=\"auto\"\n        >\n          <Link\n            /* @ts-ignore */\n            as={RouterLink}\n            width=\"100%\"\n            className=\"no-underline\"\n            to={\"/pools/\" + pool.toString()}\n          >\n            <DashboardBox\n              mt={4}\n              width=\"100%\"\n              height=\"45px\"\n              borderRadius=\"7px\"\n              fontSize=\"xl\"\n              fontWeight=\"bold\"\n            >\n              <Center expand>{t(\"Access\")}</Center>\n            </DashboardBox>\n          </Link>\n\n          <DashboardBox\n            mt={4}\n            flexShrink={0}\n            as=\"button\"\n            onClick={authedOpenModal}\n            height=\"45px\"\n            ml={2}\n            width=\"45px\"\n            borderRadius=\"7px\"\n            fontSize=\"xl\"\n            fontWeight=\"bold\"\n          >\n            <Center expand>\n              <Icon as={MdSwapHoriz} boxSize=\"30px\" />\n            </Center>\n          </DashboardBox>\n        </Row>\n      </Column>\n    </>\n  );\n};\n\nconst InterestEarned = () => {\n  const interestEarned = usePoolInterestEarned();\n\n  const { data: yieldPoolBalance } = usePoolBalance(Pool.YIELD);\n\n  const isSufferingDivergenceLoss = (() => {\n    if (interestEarned && yieldPoolBalance) {\n      if (\n        interestEarned.yieldPoolInterestEarned.isZero() &&\n        new BigNumber(yieldPoolBalance.toString()).div(1e18).gt(20)\n      ) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n  })();\n\n  const { t } = useTranslation();\n\n  return (\n    <Column mainAxisAlignment=\"center\" crossAxisAlignment=\"center\">\n      <Heading fontSize=\"3xl\">\n        {interestEarned?.totalFormattedEarnings ?? \"$?\"}\n      </Heading>\n\n      {isSufferingDivergenceLoss ? (\n        <SimpleTooltip\n          label={t(\n            \"You may experience divergence loss when depositing stablecoins into the Yield Pool that are above their peg at the time of deposit. The Yield Pool is composed of various stablecoins which shift in value, causing your balance to fluctuate.\"\n          )}\n        >\n          <Text\n            textTransform=\"uppercase\"\n            letterSpacing=\"wide\"\n            color=\"#858585\"\n            fontSize=\"xs\"\n            textAlign=\"center\"\n          >\n            {t(\"Interest Earned\")}\n\n            <InfoIcon ml=\"5px\" boxSize=\"10px\" mb=\"3px\" />\n          </Text>\n        </SimpleTooltip>\n      ) : (\n        <Text\n          textTransform=\"uppercase\"\n          letterSpacing=\"wide\"\n          color=\"#858585\"\n          fontSize=\"xs\"\n          textAlign=\"center\"\n        >\n          {t(\"Interest Earned\")}\n        </Text>\n      )}\n    </Column>\n  );\n};\n\nexport const NewsAndTwitterLink = ({\n  celebrate = false,\n}: {\n  celebrate?: boolean;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <Column\n      expand\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n    >\n      <Link href=\"https://twitter.com/RariCapital\" isExternal>\n        <Row\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          px={4}\n          py={3}\n        >\n          <Icon as={FaTwitter} boxSize=\"20px\" />\n\n          <Heading ml={2} size=\"sm\">\n            {t(\"Latest Rari News\")}\n          </Heading>\n        </Row>\n      </Link>\n\n      <ModalDivider />\n\n      <Column\n        expand\n        px={4}\n        mainAxisAlignment=\"center\"\n        crossAxisAlignment=\"flex-start\"\n      >\n        <NewsMarquee celebrate={celebrate} />\n      </Column>\n    </Column>\n  );\n};\n\nconst NewsMarquee = memo(({ celebrate = false }: { celebrate?: boolean }) => {\n  const news = [\n    \"Fuse pool creation is now 100% permissionless! Deploy your own isolated lending pool today!\",\n    \"TRIBE liquidity mining rewards are currently available in Fuse pool #8!\",\n  ];\n\n  return (\n    <Box whiteSpace=\"nowrap\" overflow=\"hidden\" width=\"100%\" fontSize=\"sm\">\n      <Marquee delay={1200} childMargin={0} speed={0.015} direction=\"left\">\n        {news.map((text: string) => (\n          <span key={text}>\n            {text}\n            <NewsMarqueeSpacer />\n          </span>\n        ))}\n      </Marquee>\n    </Box>\n  );\n});\n\nconst NewsMarqueeSpacer = () => {\n  return <b> &nbsp;&nbsp;&nbsp;&nbsp;📣 &nbsp;&nbsp;&nbsp;&nbsp; </b>;\n};\n"
  },
  {
    "path": "src/components/pages/Pool2/Pool2Modal/AmountSelect.tsx",
    "content": "import { useState } from \"react\";\nimport { Row, Column } from \"utils/chakraUtils\";\n\nimport {\n  Heading,\n  Box,\n  Button,\n  Text,\n  Image,\n  Input,\n  Link,\n  useToast,\n  IconButton,\n} from \"@chakra-ui/react\";\nimport SmallWhiteCircle from \"../../../../static/small-white-circle.png\";\n\nimport BigNumber from \"bignumber.js\";\n\nimport { useQuery, useQueryClient } from \"react-query\";\n\nimport { HashLoader } from \"react-spinners\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { useRari } from \"../../../../context/RariContext\";\nimport {\n  fetchTokenBalance,\n  useTokenBalance,\n} from \"../../../../hooks/useTokenBalance\";\nimport { BN } from \"../../../../utils/bigUtils\";\n\nimport DashboardBox from \"../../../shared/DashboardBox\";\nimport { ModalDivider } from \"../../../shared/Modal\";\n\nimport { Mode } from \".\";\nimport { SettingsIcon } from \"@chakra-ui/icons\";\n\nimport { LP_TOKEN_CONTRACT } from \"../../../../rari-sdk/governance\";\nimport { handleGenericError } from \"../../../../utils/errorHandling\";\n\ninterface Props {\n  onClose: () => any;\n  mode: Mode;\n  openOptions: () => any;\n}\n\nenum UserAction {\n  NO_ACTION,\n  WAITING_FOR_TRANSACTIONS,\n}\n\nconst AmountSelect = ({ onClose, mode, openOptions }: Props) => {\n  const toast = useToast();\n\n  const queryClient = useQueryClient();\n\n  const [userAction, setUserAction] = useState(UserAction.NO_ACTION);\n\n  const [userEnteredAmount, _setUserEnteredAmount] = useState(\"\");\n\n  const [amount, _setAmount] = useState<BigNumber | null>(\n    () => new BigNumber(0)\n  );\n\n  const { t } = useTranslation();\n\n  const { rari, address } = useRari();\n\n  const { data: balance } = useTokenBalance(LP_TOKEN_CONTRACT);\n\n  const { data: staked } = useQuery(address + \"pool2BalanceBN\", () => {\n    return rari.governance.rgt.sushiSwapDistributions.stakingBalanceOf(address);\n  });\n\n  const updateAmount = (newAmount: string) => {\n    if (newAmount.startsWith(\"-\")) {\n      return;\n    }\n\n    _setUserEnteredAmount(newAmount);\n\n    try {\n      BigNumber.DEBUG = true;\n\n      // Try to set the amount to BigNumber(newAmount):\n      const bigAmount = new BigNumber(newAmount);\n      _setAmount(bigAmount.multipliedBy(10 ** 18));\n    } catch (e) {\n      // If the number was invalid, set the amount to null to disable confirming:\n      _setAmount(null);\n    }\n\n    setUserAction(UserAction.NO_ACTION);\n  };\n\n  const amountIsValid = (() => {\n    if (amount === null || amount.isZero()) {\n      return false;\n    }\n\n    if (!balance || !staked) {\n      return false;\n    }\n\n    if (mode === Mode.DEPOSIT) {\n      return amount.lte(balance.toString());\n    } else {\n      return amount.lte(staked.toString());\n    }\n  })();\n\n  let depositOrWithdrawAlert;\n\n  if (amount === null || amount.isZero()) {\n    if (mode === Mode.DEPOSIT) {\n      depositOrWithdrawAlert = t(\"Enter a valid amount to deposit.\");\n    } else if (mode === Mode.WITHDRAW) {\n      depositOrWithdrawAlert = t(\"Enter a valid amount to withdraw.\");\n    }\n  } else if (!balance) {\n    depositOrWithdrawAlert = t(\"Loading your balance of {{token}}...\", {\n      token: \"ETH-RGT SLP\",\n    });\n  } else if (!amountIsValid) {\n    depositOrWithdrawAlert = t(\"You don't have enough {{token}}.\", {\n      token: \"ETH-RGT SLP\",\n    });\n  } else {\n    depositOrWithdrawAlert = t(\"Click confirm to continue!\");\n  }\n\n  const onConfirm = async () => {\n    try {\n      setUserAction(UserAction.WAITING_FOR_TRANSACTIONS);\n\n      //@ts-ignore\n      const amountBN = rari.web3.utils.toBN(amount!.decimalPlaces(0));\n\n      if (mode === Mode.DEPOSIT) {\n        await rari.governance.rgt.sushiSwapDistributions.deposit(amountBN, {\n          from: address,\n        });\n      } else {\n        await rari.governance.rgt.sushiSwapDistributions.withdraw(amountBN, {\n          from: address,\n        });\n      }\n\n      queryClient.refetchQueries();\n      // Wait 2 seconds for refetch and then close modal.\n      // We do this instead of waiting the refetch because some refetches take a while or error out and we want to close now.\n      await new Promise((resolve) => setTimeout(resolve, 2000));\n      onClose();\n    } catch (e) {\n      handleGenericError(e, toast);\n      setUserAction(UserAction.NO_ACTION);\n    }\n  };\n\n  return userAction === UserAction.WAITING_FOR_TRANSACTIONS ? (\n    <Column expand mainAxisAlignment=\"center\" crossAxisAlignment=\"center\" p={4}>\n      <HashLoader size={70} color={\"#929192\"} loading />\n      <Heading mt=\"30px\" textAlign=\"center\" size=\"md\">\n        {t(\"Check your wallet to submit the transactions\")}\n      </Heading>\n      <Text fontSize=\"sm\" mt=\"15px\" textAlign=\"center\">\n        {mode === Mode.DEPOSIT\n          ? t(\"Do not close this tab until you submit both transactions!\")\n          : t(\"You may close this tab after submitting the transaction.\")}\n      </Text>\n    </Column>\n  ) : (\n    <>\n      <Row\n        width=\"100%\"\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n        p={4}\n      >\n        <Box width=\"40px\" />\n        <Heading fontSize=\"27px\">\n          {mode === Mode.DEPOSIT ? t(\"Deposit\") : t(\"Withdraw\")}\n        </Heading>\n        <IconButton\n          color=\"#FFFFFF\"\n          variant=\"ghost\"\n          aria-label=\"Options\"\n          icon={<SettingsIcon />}\n          _hover={{\n            transform: \"rotate(360deg)\",\n            transition: \"all 0.7s ease-in-out\",\n          }}\n          _active={{}}\n          onClick={openOptions}\n        />\n      </Row>\n\n      <ModalDivider />\n\n      <Column\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n        p={4}\n        height=\"100%\"\n      >\n        <Text fontWeight=\"bold\" fontSize=\"sm\" textAlign=\"center\">\n          <Link\n            href=\"https://www.notion.so/Fees-e4689d7b800f485098548dd9e9d0a69f\"\n            isExternal\n          >\n            {depositOrWithdrawAlert}\n          </Link>\n        </Text>\n\n        <DashboardBox width=\"100%\" height=\"70px\" mt={4}>\n          <Row\n            p={4}\n            mainAxisAlignment=\"space-between\"\n            crossAxisAlignment=\"center\"\n            expand\n          >\n            <AmountInput\n              displayAmount={userEnteredAmount}\n              updateAmount={updateAmount}\n            />\n\n            <TokenNameAndMaxButton updateAmount={updateAmount} mode={mode} />\n          </Row>\n        </DashboardBox>\n\n        <Button\n          mt={4}\n          fontWeight=\"bold\"\n          fontSize=\"2xl\"\n          borderRadius=\"10px\"\n          width=\"100%\"\n          height=\"70px\"\n          bg={\"#929192\"}\n          _hover={{ transform: \"scale(1.02)\" }}\n          _active={{ transform: \"scale(0.95)\" }}\n          color={\"#FFF\"}\n          onClick={onConfirm}\n          isLoading={!balance}\n          isDisabled={!amountIsValid}\n        >\n          {t(\"Confirm\")}\n        </Button>\n      </Column>\n    </>\n  );\n};\n\nexport default AmountSelect;\n\nconst TokenNameAndMaxButton = ({\n  updateAmount,\n  mode,\n}: {\n  updateAmount: (newAmount: string) => any;\n  mode: Mode;\n}) => {\n  const { rari, address } = useRari();\n\n  const [isMaxLoading, setIsMaxLoading] = useState(false);\n\n  const setToMax = async () => {\n    setIsMaxLoading(true);\n    let maxBN: BN;\n\n    if (mode === Mode.DEPOSIT) {\n      const balance = await fetchTokenBalance(\n        LP_TOKEN_CONTRACT,\n        rari.web3,\n        address\n      );\n\n      maxBN = balance;\n    } else {\n      const deposited =\n        await rari.governance.rgt.sushiSwapDistributions.stakingBalanceOf(\n          address\n        );\n\n      maxBN = deposited;\n    }\n\n    if (maxBN.isNeg() || maxBN.isZero()) {\n      updateAmount(\"\");\n    } else {\n      const str = new BigNumber(maxBN.toString())\n        .div(10 ** 18)\n        .toFixed(18)\n        // Remove trailing zeroes\n        .replace(/\\.?0+$/, \"\");\n\n      if (str.startsWith(\"0.000000\")) {\n        updateAmount(\"\");\n      } else {\n        updateAmount(str);\n      }\n    }\n\n    setIsMaxLoading(false);\n  };\n\n  const { t } = useTranslation();\n\n  return (\n    <Row\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"center\"\n      flexShrink={0}\n    >\n      <Row\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        flexShrink={0}\n      >\n        <Box height=\"30px\" width=\"30px\" mr={2} mb=\"2px\">\n          <Image\n            width=\"100%\"\n            height=\"100%\"\n            borderRadius=\"50%\"\n            backgroundImage={`url(${SmallWhiteCircle})`}\n            src={\n              \"https://assets.coingecko.com/coins/images/12900/small/rgt_logo.png?1603340632\"\n            }\n            alt=\"\"\n          />\n        </Box>\n        <Heading fontSize=\"24px\" mr={2}>\n          ETH-RGT\n        </Heading>\n      </Row>\n\n      <Button\n        flexShrink={0}\n        ml={1}\n        height=\"28px\"\n        width=\"58px\"\n        bg=\"transparent\"\n        border=\"2px\"\n        borderRadius=\"8px\"\n        borderColor=\"#272727\"\n        fontSize=\"sm\"\n        fontWeight=\"extrabold\"\n        _hover={{}}\n        _active={{}}\n        onClick={setToMax}\n        isLoading={isMaxLoading}\n      >\n        {t(\"MAX\")}\n      </Button>\n    </Row>\n  );\n};\n\nconst AmountInput = ({\n  displayAmount,\n  updateAmount,\n}: {\n  displayAmount: string;\n  updateAmount: (symbol: string) => any;\n}) => {\n  return (\n    <Input\n      width=\"100%\"\n      type=\"number\"\n      inputMode=\"decimal\"\n      fontSize=\"3xl\"\n      fontWeight=\"bold\"\n      variant=\"unstyled\"\n      _placeholder={{ color: \"#929192\" }}\n      placeholder=\"0.0\"\n      value={displayAmount}\n      color={\"#929192\"}\n      onChange={(event) => updateAmount(event.target.value)}\n      mr={4}\n    />\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Pool2/Pool2Modal/OptionsMenu.tsx",
    "content": "import { Button } from \"@chakra-ui/react\";\n\nimport { Fade } from \"react-awesome-reveal\";\nimport { Column } from \"utils/chakraUtils\";\n\nimport { Mode } from \".\";\nimport { useTranslation } from \"react-i18next\";\nimport { ModalDivider, ModalTitleWithCloseButton } from \"../../../shared/Modal\";\n\nconst OptionsMenu = ({\n  mode,\n  onSetMode,\n  onClose,\n}: {\n  mode: Mode;\n  onClose: () => any;\n  onSetMode: (mode: Mode) => any;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <Fade>\n      <ModalTitleWithCloseButton text={t(\"Options\")} onClose={onClose} />\n      <ModalDivider />\n      <Column\n        mt={4}\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n      >\n        <Button\n          colorScheme=\"red\"\n          variant=\"solid\"\n          onClick={() => {\n            onSetMode(mode === Mode.DEPOSIT ? Mode.WITHDRAW : Mode.DEPOSIT);\n\n            onClose();\n          }}\n        >\n          {mode === Mode.DEPOSIT\n            ? t(\"Want to withdraw?\")\n            : t(\"Want to deposit?\")}\n        </Button>\n      </Column>\n    </Fade>\n  );\n};\n\nexport default OptionsMenu;\n"
  },
  {
    "path": "src/components/pages/Pool2/Pool2Modal/index.tsx",
    "content": "import { useState } from \"react\";\nimport { Modal, ModalOverlay, ModalContent } from \"@chakra-ui/react\";\n\nimport AmountSelect from \"./AmountSelect\";\nimport { MODAL_PROPS } from \"../../../shared/Modal\";\nimport OptionsMenu from \"./OptionsMenu\";\n\ninterface Props {\n  isOpen: boolean;\n  onClose: () => any;\n}\n\nenum CurrentScreen {\n  MAIN,\n  OPTIONS,\n}\n\nexport enum Mode {\n  DEPOSIT,\n  WITHDRAW,\n}\n\nconst DepositModal = (props: Props) => {\n  const [currentScreen, setCurrentScreen] = useState(CurrentScreen.MAIN);\n\n  const [mode, setMode] = useState(Mode.DEPOSIT);\n\n  return (\n    <Modal\n      motionPreset=\"slideInBottom\"\n      isOpen={props.isOpen}\n      onClose={props.onClose}\n      isCentered\n    >\n      <ModalOverlay />\n      <ModalContent {...MODAL_PROPS} height=\"300px\">\n        {currentScreen === CurrentScreen.MAIN ? (\n          <AmountSelect\n            onClose={props.onClose}\n            openOptions={() => setCurrentScreen(CurrentScreen.OPTIONS)}\n            mode={mode}\n          />\n        ) : (\n          <OptionsMenu\n            onClose={() => setCurrentScreen(CurrentScreen.MAIN)}\n            onSetMode={setMode}\n            mode={mode}\n          />\n        )}\n      </ModalContent>\n    </Modal>\n  );\n};\n\nexport default DepositModal;\n"
  },
  {
    "path": "src/components/pages/Pool2/Pool2Page.tsx",
    "content": "import { useState } from \"react\";\nimport {\n  useInterval,\n  useDisclosure,\n  Heading,\n  Link,\n  Spinner,\n  Text,\n  Box,\n} from \"@chakra-ui/react\";\n\nimport { Center, RowOrColumn, Column } from \"utils/chakraUtils\";\nimport { NewsAndTwitterLink } from \"../MultiPoolPortal\";\nimport Pool2Modal from \"./Pool2Modal\";\nimport { ClaimRGTModal } from \"components/shared/ClaimRGTModal\";\nimport DashboardBox from \"components/shared/DashboardBox\";\nimport { Header } from \"components/shared/Header\";\n\n// Hooks\nimport { useTranslation } from \"react-i18next\";\nimport { useRari } from \"context/RariContext\";\nimport { useIsSmallScreen } from \"hooks/useIsSmallScreen\";\nimport { usePool2Balance } from \"hooks/pool2/usePool2Balance\";\nimport { usePool2UnclaimedRGT } from \"hooks/pool2/usePool2UnclaimedRGT\";\nimport { usePool2APR } from \"hooks/pool2/usePool2APR\";\nimport { usePool2TotalStaked } from \"hooks/pool2/usePool2TotalStaked\";\nimport { useHasSushiswapRewardsStarted } from \"hooks/pool2/useSushiswapRewards\";\nimport { useAuthedCallback } from \"hooks/useAuthedCallback\";\n\n// Utils\nimport { smallUsdFormatter } from \"utils/bigUtils\";\nimport Footer from \"components/shared/Footer\";\n\nconst Pool2Page = () => {\n  const { isAuthed } = useRari();\n\n  const { t } = useTranslation();\n\n  const isMobile = useIsSmallScreen();\n\n  return (\n    <>\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        color=\"#FFFFFF\"\n        mx=\"auto\"\n        width={isMobile ? \"100%\" : \"1000px\"}\n        height=\"100%\"\n        px={isMobile ? 4 : 0}\n      >\n        <Header isAuthed={isAuthed} />\n\n        <Column\n          width=\"100%\"\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n        >\n          <DashboardBox height={isMobile ? \"110px\" : \"95px\"} width=\"100%\">\n            <Column\n              expand\n              mainAxisAlignment=\"center\"\n              crossAxisAlignment={isMobile ? \"center\" : \"flex-start\"}\n              textAlign=\"center\"\n              px={4}\n            >\n              <Heading size=\"lg\">{t(\"Sushiswap LP Rewards\")}</Heading>\n\n              {t(\n                \"Earn additional rewards for providing RGT liquidity on Sushiswap!\"\n              )}\n            </Column>\n          </DashboardBox>\n\n          <DashboardBox mt={4} width=\"100%\" height=\"100px\">\n            <NewsAndTwitterLink />\n          </DashboardBox>\n\n          <RowOrColumn\n            mt={4}\n            isRow={!isMobile}\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"flex-start\"\n            width=\"100%\"\n            height={isMobile ? \"auto\" : \"200px\"}\n          >\n            <DashboardBox\n              height={isMobile ? \"auto\" : \"100%\"}\n              width={isMobile ? \"100%\" : \"70%\"}\n              p={4}\n            >\n              <RowOrColumn\n                mainAxisAlignment=\"flex-start\"\n                crossAxisAlignment=\"flex-start\"\n                height=\"100%\"\n                width=\"100%\"\n                isRow={!isMobile}\n              >\n                <Column\n                  mainAxisAlignment=\"flex-start\"\n                  crossAxisAlignment={isMobile ? \"center\" : \"flex-start\"}\n                  width={isMobile ? \"100%\" : \"164px\"}\n                  flexShrink={0}\n                >\n                  <Heading fontSize=\"25px\">{t(\"RGT-ETH Pool\")} </Heading>\n\n                  <Text mt={3} textAlign={isMobile ? \"center\" : \"left\"}>\n                    {t(\n                      \"Provide liquidity to the RGT-ETH pool to acquire LP tokens\"\n                    )}{\" \"}\n                    <Link\n                      isExternal\n                      href=\"https://app.sushi.com/add/ETH/0xD291E7a03283640FDc51b121aC401383A46cC623\"\n                    >\n                      <u>{t(\"here\")}</u>\n                    </Link>{\" \"}\n                    {t(\"and stake them for extra rewards!\")}\n                  </Text>\n                </Column>\n\n                <Column\n                  mt={isMobile ? 4 : 0}\n                  mainAxisAlignment=\"flex-start\"\n                  crossAxisAlignment=\"center\"\n                  width=\"100%\"\n                  height=\"100%\"\n                  ml={isMobile ? 0 : 3}\n                >\n                  <GeneralInfo />\n                </Column>\n\n                <Column\n                  mt={isMobile ? 4 : 0}\n                  mainAxisAlignment=\"flex-start\"\n                  crossAxisAlignment=\"center\"\n                  width=\"100%\"\n                  height=\"100%\"\n                  ml={isMobile ? 0 : 3}\n                >\n                  <YourBalance />\n                </Column>\n              </RowOrColumn>\n            </DashboardBox>\n\n            <Column\n              mt={isMobile ? 4 : 0}\n              pl={isMobile ? 0 : 4}\n              width={isMobile ? \"100%\" : \"30%\"}\n              height={isMobile ? \"auto\" : \"100%\"}\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"flex-start\"\n            >\n              <DashboardBox\n                p={4}\n                width=\"100%\"\n                height={isMobile ? \"auto\" : \"50%\"}\n              >\n                <TotalStaked />\n              </DashboardBox>\n\n              <Box pt={4} width=\"100%\" height={isMobile ? \"auto\" : \"50%\"}>\n                <DashboardBox p={4} height=\"100%\">\n                  <StartAndEnd />\n                </DashboardBox>\n              </Box>\n            </Column>\n          </RowOrColumn>\n        </Column>\n        <Footer />\n      </Column>\n    </>\n  );\n};\n\nexport const TotalStaked = () => {\n  const { t } = useTranslation();\n\n  const totalStaked = usePool2TotalStaked();\n\n  return (\n    <Column expand mainAxisAlignment=\"center\" crossAxisAlignment=\"center\">\n      <Heading mb={1} size=\"sm\">\n        {t(\"Total Staked (USD)\")}\n      </Heading>\n      <Text>{totalStaked ? smallUsdFormatter(totalStaked) : \"?\"}</Text>\n    </Column>\n  );\n};\n\nconst startDate = Date.parse(\"22 Feb 2021 00:10:00 PST\");\n// 3 years = 9.461e+10\nconst endDate = startDate + 9.461e10;\n\nexport const StartAndEnd = () => {\n  const { t } = useTranslation();\n\n  const hasStarted = useHasSushiswapRewardsStarted();\n\n  return (\n    <Column expand mainAxisAlignment=\"center\" crossAxisAlignment=\"center\">\n      <Heading mb={1} size=\"sm\">\n        {hasStarted ? t(\"Bonus Rewards End\") : t(\"Bonus Rewards Begin\")}\n      </Heading>\n      {hasStarted !== undefined ? (\n        <Countdown endDate={hasStarted ? endDate : startDate} />\n      ) : (\n        <Spinner m={2} />\n      )}\n    </Column>\n  );\n};\n\nconst Countdown = ({ endDate }: { endDate: number }) => {\n  const [msLeft, setMsLeft] = useState(endDate - Date.now());\n\n  const seconds = Math.floor((msLeft / 1000) % 60);\n  const minutes = Math.floor((msLeft / 1000 / 60) % 60);\n  const hours = Math.floor((msLeft / (1000 * 60 * 60)) % 24);\n  const days = Math.floor(msLeft / (1000 * 60 * 60 * 24));\n\n  useInterval(() => {\n    setMsLeft(endDate - Date.now());\n  }, 1000);\n\n  return (\n    <Text fontSize=\"sm\">\n      <b>{days}</b> days&nbsp; <b>{hours}</b> hrs&nbsp; <b>{minutes}</b>{\" \"}\n      mins&nbsp; <b>{seconds}</b> sec\n    </Text>\n  );\n};\n\nconst YourBalance = () => {\n  const { t } = useTranslation();\n\n  const balance = usePool2Balance();\n  const earned = usePool2UnclaimedRGT();\n\n  const {\n    isOpen: isClaimRGTModalOpen,\n    onOpen: openClaimRGTModal,\n    onClose: closeClaimRGTModal,\n  } = useDisclosure();\n  const authedOpenModal = useAuthedCallback(openClaimRGTModal);\n\n  const isMobile = useIsSmallScreen();\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"center\"\n      width=\"100%\"\n      height=\"100%\"\n      style={\n        !balance?.hasDeposited ? { opacity: \"0.3\", pointerEvents: \"none\" } : {}\n      }\n    >\n      <ClaimRGTModal\n        isOpen={isClaimRGTModalOpen}\n        onClose={closeClaimRGTModal}\n        defaultMode=\"pool2\"\n      />\n      <Heading fontSize=\"20px\">{t(\"Your Balance\")}</Heading>\n      <Text fontSize=\"sm\" mt={2} width=\"70%\" textAlign=\"center\">\n        {balance?.hasDeposited ? balance.SLP!.toFixed(4) : \"0.0000\"} Staked SLP\n      </Text>\n      <Text mt={1} fontSize=\"xs\" width=\"70%\" textAlign=\"center\">\n        {balance?.hasDeposited ? balance.eth!.toFixed(0) : \"0.0000\"} ETH{\" + \"}\n        {balance?.hasDeposited ? balance.rgt!.toFixed(0) : \"0.0000\"} RGT\n      </Text>\n      <Text mt={2} width=\"70%\" textAlign=\"center\">\n        <b>\n          {earned ? earned.toFixed(2) : \"0.00\"} {t(\"RGT Earned\")}\n        </b>\n      </Text>\n      <DashboardBox\n        mt={isMobile ? 4 : \"auto\"}\n        width=\"70%\"\n        height=\"45px\"\n        borderRadius=\"7px\"\n        fontSize=\"xl\"\n        fontWeight=\"bold\"\n        as=\"button\"\n        onClick={authedOpenModal}\n      >\n        <Center expand>{t(\"Claim RGT\")}</Center>\n      </DashboardBox>\n    </Column>\n  );\n};\n\nconst GeneralInfo = () => {\n  const { t } = useTranslation();\n\n  const apr = usePool2APR();\n  const isMobile = useIsSmallScreen();\n\n  const {\n    isOpen: isDepositModalOpen,\n    onOpen: openDepositModal,\n    onClose: closeDepositModal,\n  } = useDisclosure();\n\n  const authedOpenDepositModal = useAuthedCallback(openDepositModal);\n\n  return (\n    <>\n      <Pool2Modal isOpen={isDepositModalOpen} onClose={closeDepositModal} />\n      <Heading fontSize=\"20px\">{apr ?? \"?\"}% APR</Heading>\n      <Text mt={3} width=\"70%\" textAlign=\"center\">\n        {t(\"Deposit your LP tokens here to earn bonus RGT rewards!\")}\n      </Text>\n      <DashboardBox\n        mt={isMobile ? 4 : \"auto\"}\n        width=\"70%\"\n        height=\"45px\"\n        borderRadius=\"7px\"\n        fontSize=\"xl\"\n        fontWeight=\"bold\"\n        as=\"button\"\n        onClick={authedOpenDepositModal}\n      >\n        <Center expand>{t(\"Deposit\")}</Center>\n      </DashboardBox>\n    </>\n  );\n};\n\nexport default Pool2Page;\n"
  },
  {
    "path": "src/components/pages/PoolPortal.tsx",
    "content": "import { memo, useState } from \"react\";\nimport {\n  Box,\n  Text,\n  Heading,\n  Spinner,\n  Divider,\n  Select,\n  useDisclosure,\n  theme,\n  BoxProps,\n  // Image,\n  Link,\n} from \"@chakra-ui/react\";\nimport { useRari } from \"../../context/RariContext\";\n\n// import SmallRGTLogo from \"../../static/small-logo.png\";\n\nimport DashboardBox, {\n  DASHBOARD_BOX_SPACING,\n  DASHBOARD_BOX_PROPS,\n} from \"../shared/DashboardBox\";\n\nimport Chart from \"react-apexcharts\";\n\nimport FullPageSpinner from \"../shared/FullPageSpinner\";\n\nimport {\n  Column,\n  Row,\n  Center,\n  useLockedViewHeight,\n  useSpacedLayout,\n  RowOnDesktopColumnOnMobile,\n  PercentageSize,\n  ResponsivePixelSize,\n  PixelSize,\n  PercentOnDesktopPixelOnMobileSize,\n} from \"utils/chakraUtils\";\n\nimport {\n  USDSelfReturnChartOptions,\n  ETHSelfReturnChartOptions,\n  USDStrategyAllocationChartOptions,\n  ETHStrategyAllocationChartOptions,\n  DisableChartInteractions,\n} from \"../../utils/chartOptions\";\nimport CaptionedStat from \"../shared/CaptionedStat\";\n\nimport ProgressBar from \"../shared/ProgressBar\";\n\nimport DepositModal from \"./RariDepositModal\";\nimport { useQuery } from \"react-query\";\n\nimport { useTranslation } from \"react-i18next\";\n\nimport { PoolTypeProvider, usePoolType } from \"../../context/PoolContext\";\nimport { usePoolInfo, usePoolInfoFromContext } from \"../../hooks/usePoolInfo\";\nimport { Header, HeaderHeightWithTopPadding } from \"../shared/Header\";\n\nimport { GlowingButton } from \"../shared/GlowingButton\";\n\nimport { usePoolBalance } from \"../../hooks/usePoolBalance\";\nimport {\n  BN,\n  smallStringUsdFormatter,\n  stringUsdFormatter,\n} from \"../../utils/bigUtils\";\n// import { SimpleTooltip } from \"../shared/SimpleTooltip\";\nimport { getSDKPool, Pool } from \"../../utils/poolUtils\";\nimport { usePoolAPY } from \"../../hooks/usePoolAPY\";\nimport { ExternalLinkIcon } from \"@chakra-ui/icons\";\nimport { tokens } from \"../../utils/tokenUtils\";\nimport { fetchRGTAPR } from \"../../utils/fetchPoolAPY\";\nimport { formatBalanceBN } from \"utils/format\";\nimport Footer from \"components/shared/Footer\";\n\nimport { useAuthedCallback } from \"../../hooks/useAuthedCallback\";\n\nconst millisecondsPerDay = 86400000;\nconst blocksPerDay = 6500;\n\nconst currencyCodesByHashes: { [key: string]: string } = {\n  \"0xa5e92f3efb6826155f1f728e162af9d7cda33a574a1153b58f03ea01cc37e568\": \"DAI\",\n  \"0xd6aca1be9729c13d677335161321649cccae6a591554772516700f986f942eaa\": \"USDC\",\n  \"0x8b1a1d9c2b109e527c9134b25b1a1833b16b6594f92daa9f6d9b7a6024bce9d0\": \"USDT\",\n  \"0xa1b8d8f7e538bb573797c963eeeed40d0bcb9f28c56104417d0da1b372ae3051\": \"TUSD\",\n  \"0x54c512ac779647672b8d02e2fe2dc10f79bbf19f719d887221696215fd24e9f1\": \"BUSD\",\n  \"0x87ef9bf44f9ed3d4aeadafb38d9bc9470e7aac44fdcb9f7ffb957b862954cf2c\": \"sUSD\",\n  \"0x33d80a03b5585b94e68b56bdea4f57fd2e459401902cb2f61772e1b630afb4b2\": \"mUSD\",\n};\n\nconst PoolPortal = memo(({ pool }: { pool: Pool }) => {\n  return (\n    <PoolTypeProvider pool={pool}>\n      <PoolPortalContent />\n    </PoolTypeProvider>\n  );\n});\n\nexport default PoolPortal;\n\nconst PoolPortalContent = () => {\n  const { isAuthed, rari } = useRari();\n\n  const { windowHeight } = useLockedViewHeight({\n    min: 750,\n    max: 1900,\n  });\n\n  const {\n    childSizes: [, bodySize],\n  } = useSpacedLayout({\n    parentHeight: windowHeight.asNumber(),\n    spacing: DASHBOARD_BOX_SPACING.asNumber(),\n    childSizes: [\n      HeaderHeightWithTopPadding,\n      new PercentageSize(1),\n      // We have a 0 sized child here because it will now lower the size of the \"100%\" child\n      // by accouting for padding below it, which is 15.\n      new PixelSize(0),\n    ],\n  });\n\n  const { spacing: statsSidebarSpacing, childSizes: statsSidebarChildSizes } =\n    useSpacedLayout({\n      parentHeight: bodySize.asNumber(),\n      spacing: DASHBOARD_BOX_SPACING.asNumber(),\n      childSizes: [\n        new PixelSize(90),\n        new PixelSize(100),\n        new PixelSize(152),\n        new PixelSize(230),\n        new PercentOnDesktopPixelOnMobileSize({\n          percentageSize: 1,\n          pixelSize: 100,\n        }),\n      ],\n    });\n\n  const { spacing: mainSectionSpacing, childSizes: mainSectionChildSizes } =\n    useSpacedLayout({\n      parentHeight: bodySize.asNumber(),\n      spacing: DASHBOARD_BOX_SPACING.asNumber(),\n      childSizes: [\n        new PixelSize(90),\n        new PercentOnDesktopPixelOnMobileSize({\n          percentageSize: 1,\n          pixelSize: 600,\n        }),\n        new PixelSize(180),\n      ],\n    });\n\n  const { poolName, poolCaption, poolType } = usePoolInfoFromContext();\n\n  const { data: poolBalance, isLoading: isPoolBalanceLoading } =\n    usePoolBalance(poolType);\n\n  const {\n    isOpen: isDepositModalOpen,\n    onOpen: openDepositModal,\n    onClose: closeDepositModal,\n  } = useDisclosure();\n\n  const authedOpenModal = useAuthedCallback(openDepositModal);\n\n  // If loading, stop here\n  if (isPoolBalanceLoading) return <FullPageSpinner />;\n\n  const myBalance: BN = poolBalance ?? rari.web3.utils.toBN(0);\n  const hasNotDeposited: boolean = poolBalance?.isZero() ?? true;\n  const formattedBalance = formatBalanceBN(\n    rari,\n    myBalance,\n    poolType === Pool.ETH\n  );\n\n  return (\n    <>\n      <DepositModal isOpen={isDepositModalOpen} onClose={closeDepositModal} />\n\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"flex-start\"\n        color=\"#FFFFFF\"\n      >\n        <Header isPool padding isAuthed={isAuthed} />\n        <RowOnDesktopColumnOnMobile\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n          px={4}\n          height={{ md: bodySize.asPxString(), base: \"auto\" }}\n        >\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n            height={{ md: \"100%\", base: \"auto\" }}\n            width={{ md: \"100%\", base: \"100%\" }}\n          >\n            <DashboardBox\n              width=\"100%\"\n              mb={mainSectionSpacing.asPxString()}\n              height={{\n                md: mainSectionChildSizes[0].asPxString(),\n                base: \"auto\",\n              }}\n              overflowX=\"auto\"\n              whiteSpace=\"nowrap\"\n            >\n              <RowOnDesktopColumnOnMobile\n                expand\n                mainAxisAlignment=\"space-between\"\n                crossAxisAlignment=\"center\"\n                p={4}\n              >\n                <Column\n                  mainAxisAlignment=\"center\"\n                  crossAxisAlignment={{ md: \"flex-start\", base: \"center\" }}\n                  height=\"100%\"\n                  mb={{ md: 0, base: 4 }}\n                >\n                  <Heading fontSize={{ md: 27, base: \"xl\" }} lineHeight={1.25}>\n                    {poolName}\n                  </Heading>\n                  <Text fontSize=\"xs\">{poolCaption}</Text>\n                </Column>\n\n                <DepositButton onClick={authedOpenModal} />\n              </RowOnDesktopColumnOnMobile>\n            </DashboardBox>\n\n            <DashboardBox\n              width=\"100%\"\n              mb={mainSectionSpacing.asPxString()}\n              height={mainSectionChildSizes[1].asPxString()}\n              position=\"relative\"\n            >\n              {hasNotDeposited ? (\n                <DepositButton\n                  zIndex={1}\n                  transform=\"translate(-50%, -50%)\"\n                  position=\"absolute\"\n                  top=\"50%\"\n                  left=\"50%\"\n                  onClick={authedOpenModal}\n                />\n              ) : null}\n\n              <Box opacity={hasNotDeposited ? 0.2 : 1} height=\"100%\">\n                <UserStatsAndChart\n                  hasNotDeposited={hasNotDeposited}\n                  size={mainSectionChildSizes[1].asNumber()}\n                  balance={formattedBalance!}\n                />\n              </Box>\n            </DashboardBox>\n\n            <RowOnDesktopColumnOnMobile\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"center\"\n              height={{\n                md: mainSectionChildSizes[2].asPxString(),\n                base: \"auto\",\n              }}\n              width=\"100%\"\n            >\n              <DashboardBox\n                height={mainSectionChildSizes[2].asPxString()}\n                width={\n                  poolType === Pool.ETH ? \"100%\" : { md: \"50%\", base: \"100%\" }\n                }\n                mb={{ md: 0, base: 4 }}\n                pt={4}\n                px={4}\n              >\n                <RecentTrades />\n              </DashboardBox>\n\n              {poolType !== Pool.ETH ? (\n                <DashboardBox\n                  height={mainSectionChildSizes[2].asPxString()}\n                  width={{ md: \"50%\", base: \"100%\" }}\n                  ml={{\n                    md: 4,\n                    base: 0,\n                  }}\n                  pt={4}\n                  px={4}\n                >\n                  <TokenAllocation />\n                </DashboardBox>\n              ) : null}\n            </RowOnDesktopColumnOnMobile>\n          </Column>\n\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n            flexShrink={0}\n            height={{ md: \"100%\", base: \"auto\" }}\n            width={{ md: \"260px\", base: \"100%\" }}\n            pt={{ md: 0, base: 4 }}\n            pl={{ md: 4, base: 0 }}\n          >\n            <DashboardBox\n              width=\"100%\"\n              mb={statsSidebarSpacing.asPxString()}\n              height={statsSidebarChildSizes[0].asPxString()}\n              bg=\"#FFFFFF\"\n              color=\"#000000\"\n            >\n              <CurrentAPY />\n            </DashboardBox>\n\n            <DashboardBox\n              width=\"100%\"\n              mb={statsSidebarSpacing.asPxString()}\n              height={statsSidebarChildSizes[1].asPxString()}\n              p={4}\n            >\n              <APYStats />\n            </DashboardBox>\n\n            <DashboardBox\n              width=\"100%\"\n              mb={statsSidebarSpacing.asPxString()}\n              height={statsSidebarChildSizes[2].asPxString()}\n              pt={4}\n              px={4}\n            >\n              <StrategyAllocation />\n            </DashboardBox>\n\n            <DashboardBox\n              width=\"100%\"\n              height={statsSidebarChildSizes[3].asPxString()}\n              mb={statsSidebarSpacing.asPxString()}\n              pt={4}\n              px={4}\n            >\n              <MonthlyReturns />\n            </DashboardBox>\n\n            <DashboardBox\n              width=\"100%\"\n              height={statsSidebarChildSizes[4].asPxString()}\n            >\n              <TransactionHistory />\n            </DashboardBox>\n          </Column>\n        </RowOnDesktopColumnOnMobile>\n        <Footer />\n      </Column>\n    </>\n  );\n};\n\nconst UserStatsAndChart = ({\n  size,\n  balance,\n  hasNotDeposited,\n}: {\n  size: number;\n  balance: string;\n  hasNotDeposited: boolean;\n}) => {\n  const { address, rari } = useRari();\n\n  const { poolType, poolName } = usePoolInfoFromContext();\n\n  const [timeRange, setTimeRange] = useState(\"max\");\n\n  const {\n    childSizes: [topPadding, statsSize, chartSize],\n  } = useSpacedLayout({\n    parentHeight: size,\n    spacing: 0,\n    childSizes: [\n      // Add this to account for 5px top padding\n      new PixelSize(5),\n      new ResponsivePixelSize({ desktop: 75, mobile: 230 }),\n      new PercentageSize(1),\n      // Add this to account for 5px bottom padding\n      new PixelSize(5),\n    ],\n  });\n\n  const { data: interestEarned, isLoading: isInterestEarnedLoading } = useQuery(\n    address + \" \" + poolType + \" interestAccrued \" + timeRange,\n    async () => {\n      if (hasNotDeposited) {\n        return \"0\";\n      }\n\n      const startingBlock =\n        timeRange === \"month\"\n          ? Date.now() - millisecondsPerDay * 30\n          : timeRange === \"year\"\n          ? Date.now() - millisecondsPerDay * 365\n          : timeRange === \"week\"\n          ? Date.now() - millisecondsPerDay * 7\n          : 0;\n\n      const interestRaw = await getSDKPool({\n        rari,\n        pool: poolType,\n      }).balances.interestAccruedBy(address, Math.floor(startingBlock / 1000));\n\n      const formattedInterest = stringUsdFormatter(\n        rari.web3.utils.fromWei(interestRaw)\n      );\n\n      return poolType === Pool.ETH\n        ? formattedInterest.replace(\"$\", \"\") + \" ETH\"\n        : formattedInterest;\n    }\n  );\n\n  const { data: chartData, isLoading: isChartDataLoading } = useQuery(\n    address + \" \" + poolType + \" \" + timeRange + \" balanceHistory\",\n    async () => {\n      if (hasNotDeposited) {\n        return [];\n      }\n\n      const latestBlock = await rari.web3.eth.getBlockNumber();\n\n      const blockStart =\n        timeRange === \"month\"\n          ? latestBlock - blocksPerDay * 30\n          : timeRange === \"year\"\n          ? latestBlock - blocksPerDay * 365\n          : timeRange === \"week\"\n          ? latestBlock - blocksPerDay * 7\n          : 0;\n\n      const rawData = await getSDKPool({\n        rari,\n        pool: poolType,\n      }).history.getBalanceHistoryOf(address, blockStart);\n\n      return rawData;\n    }\n  );\n\n  const poolAPY = usePoolAPY(poolType);\n\n  const { t } = useTranslation();\n\n  const chartOptions =\n    poolType === Pool.ETH\n      ? ETHSelfReturnChartOptions\n      : USDSelfReturnChartOptions;\n\n  return (\n    <>\n      <RowOnDesktopColumnOnMobile\n        mainAxisAlignment={{ md: \"space-between\", base: \"space-around\" }}\n        crossAxisAlignment=\"center\"\n        px={4}\n        mt={{ md: topPadding.asPxString(), base: 0 }}\n        height={statsSize.asPxString()}\n        width=\"100%\"\n      >\n        {hasNotDeposited ? (\n          <CaptionedStat\n            crossAxisAlignment={{ md: \"flex-start\", base: \"center\" }}\n            caption={t(\"Currently earning\")}\n            captionSize=\"xs\"\n            stat={(poolAPY ?? \"?\") + \"% APY\"}\n            statSize=\"4xl\"\n          />\n        ) : (\n          <>\n            <CaptionedStat\n              crossAxisAlignment={{ md: \"flex-start\", base: \"center\" }}\n              caption={t(\"Account Balance\")}\n              captionSize=\"xs\"\n              stat={balance}\n              statSize=\"3xl\"\n            />\n\n            <CaptionedStat\n              crossAxisAlignment={{ md: \"flex-start\", base: \"center\" }}\n              caption={t(\"Interest Earned\")}\n              captionSize=\"xs\"\n              stat={isInterestEarnedLoading ? \"$?\" : interestEarned!}\n              statSize=\"3xl\"\n            />\n          </>\n        )}\n\n        <Select\n          {...DASHBOARD_BOX_PROPS}\n          borderRadius=\"7px\"\n          fontWeight=\"bold\"\n          width={{ md: \"130px\", base: \"100%\" }}\n          _focus={{ outline: \"none\" }}\n          isDisabled={hasNotDeposited}\n          value={timeRange}\n          onChange={(event) => {\n            setTimeRange(event.target.value);\n          }}\n        >\n          <option className=\"black-bg-option\" value=\"week\">\n            {t(\"Week\")}\n          </option>\n          <option className=\"black-bg-option\" value=\"month\">\n            {t(\"Month\")}\n          </option>\n          <option className=\"black-bg-option\" value=\"year\">\n            {t(\"Year\")}\n          </option>\n          <option className=\"black-bg-option\" value=\"max\">\n            {t(\"Max\")}\n          </option>\n        </Select>\n      </RowOnDesktopColumnOnMobile>\n\n      <Box height={chartSize.asPxString()} color=\"#000000\" overflow=\"hidden\">\n        {isChartDataLoading && !hasNotDeposited ? (\n          <Center expand>\n            <Spinner color=\"#FFF\" />\n          </Center>\n        ) : (\n          <Chart\n            options={\n              hasNotDeposited\n                ? { ...chartOptions, ...DisableChartInteractions }\n                : chartOptions\n            }\n            type=\"line\"\n            width=\"100%\"\n            height=\"100%\"\n            series={[\n              {\n                name: poolName,\n                data: hasNotDeposited\n                  ? [\n                      { x: \"10/1/20\", y: 1000 },\n                      { x: \"10/2/20\", y: 1001 },\n                      { x: \"10/3/20\", y: 1003 },\n                      { x: \"10/4/20\", y: 1005 },\n                      { x: \"10/5/20\", y: 1006 },\n                      { x: \"10/6/20\", y: 1007 },\n                      { x: \"10/7/20\", y: 1010 },\n                      { x: \"10/8/20\", y: 1012 },\n                      { x: \"10/9/20\", y: 1014 },\n                      { x: \"10/10/20\", y: 1016 },\n                      { x: \"10/11/20\", y: 1018 },\n                    ]\n                  : (chartData ?? []).map((point: any) => {\n                      return {\n                        x: new Date(point.timestamp * 1000).toLocaleDateString(\n                          \"en-US\"\n                        ),\n                        y: parseFloat(point.balance) / 1e18,\n                      };\n                    }),\n              },\n            ]}\n          />\n        )}\n      </Box>\n    </>\n  );\n};\n\nconst CurrentAPY = () => {\n  const { t } = useTranslation();\n\n  const poolType = usePoolType();\n\n  const poolAPY = usePoolAPY(poolType);\n\n  return (\n    <Row expand mainAxisAlignment=\"center\" crossAxisAlignment=\"center\">\n      <Heading\n        mt=\"5px\"\n        fontFamily={`'Baloo 2', ${theme.fonts.heading}`}\n        fontSize=\"54px\"\n        fontWeight=\"extrabold\"\n      >\n        {poolAPY ? (\n          (poolAPY.startsWith(\"0.\") ? poolAPY : poolAPY.slice(0, -1)) + \"%\"\n        ) : (\n          <Spinner size=\"lg\" mr={4} />\n        )}\n      </Heading>\n      <Text ml={3} width=\"65px\" fontSize=\"sm\" textTransform=\"uppercase\">\n        {t(\"Current APY\")}\n      </Text>\n    </Row>\n  );\n};\n\nconst APYStats = () => {\n  const { t } = useTranslation();\n\n  const pool = usePoolType();\n\n  const { rari } = useRari();\n\n  const {\n    data: apys,\n    isLoading: areAPYsLoading,\n    isError,\n  } = useQuery(pool + \" monthly and weekly apys\", async () => {\n    const [monthRaw, weekRaw, rgtAPR]: [BN, BN, string] = await Promise.all([\n      getSDKPool({\n        rari,\n        pool,\n      }).apy.getApyOverTime(\n        Math.floor((Date.now() - millisecondsPerDay * 30) / 1000)\n      ),\n      getSDKPool({\n        rari,\n        pool,\n      }).apy.getApyOverTime(\n        Math.floor((Date.now() - millisecondsPerDay * 7) / 1000)\n      ),\n      fetchRGTAPR(rari),\n    ]);\n\n    const month = parseFloat(\n      rari.web3.utils.fromWei(monthRaw.mul(rari.web3.utils.toBN(100)))\n    ).toFixed(1);\n\n    const week = parseFloat(\n      rari.web3.utils.fromWei(weekRaw.mul(rari.web3.utils.toBN(100)))\n    ).toFixed(1);\n\n    return { month, week, rgtAPR };\n  });\n\n  return (\n    <Column\n      expand\n      mainAxisAlignment=\"space-between\"\n      crossAxisAlignment=\"flex-start\"\n    >\n      <Heading lineHeight={1} size=\"xs\">\n        {t(\"APY Based On Returns From\")}:\n      </Heading>\n\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"flex-start\"\n        width=\"100%\"\n      >\n        <Row\n          mainAxisAlignment=\"space-between\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n        >\n          <Text fontSize=\"sm\">\n            {t(\"This Month\")}:{\" \"}\n            <b>{isError ? \"🚫\" : areAPYsLoading ? \"?\" : apys!.month}%</b>\n          </Text>\n\n          {/* <Text fontWeight=\"bold\" textAlign=\"center\">\n            <SimpleTooltip label={t(\"Extra yield from $RGT\")}>\n              <span>\n                + ({areAPYsLoading ? \"?\" : apys!.rgtAPR}%{\" \"}\n                <Image display=\"inline\" src={SmallRGTLogo} boxSize=\"20px\" />)\n              </span>\n            </SimpleTooltip>\n          </Text> */}\n        </Row>\n        <Row\n          mainAxisAlignment=\"space-between\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n        >\n          <Text fontSize=\"sm\">\n            {t(\"This Week\")}:{\" \"}\n            <b>{isError ? \"🚫\" : areAPYsLoading ? \"?\" : apys!.week}%</b>\n          </Text>\n\n          {/* <Text fontWeight=\"bold\" textAlign=\"center\">\n            <SimpleTooltip label={t(\"Extra yield from $RGT\")}>\n              <span>\n                + ({areAPYsLoading ? \"?\" : apys!.rgtAPR}%{\" \"}\n                <Image display=\"inline\" src={SmallRGTLogo} boxSize=\"20px\" />)\n              </span>\n            </SimpleTooltip>\n          </Text> */}\n        </Row>\n      </Column>\n    </Column>\n  );\n};\n\nconst StrategyAllocation = () => {\n  const { t } = useTranslation();\n\n  const { rari } = useRari();\n\n  const poolType = usePoolType();\n\n  const { data: allocations, isLoading: isAllocationsLoading } = useQuery(\n    poolType + \"allocations\",\n    async () => {\n      const rawAllocations: { [key: string]: BN } = await getSDKPool({\n        rari,\n        pool: poolType,\n      }).allocations.getRawPoolAllocations();\n\n      let allocations: { [key: string]: number } = {};\n\n      for (const [token, amount] of Object.entries(rawAllocations)) {\n        const parsedAmount = parseFloat(rari.web3.utils.fromWei(amount));\n\n        if (parsedAmount < 5) {\n          continue;\n        }\n\n        if (token === \"_cash\") {\n          allocations[\"Not Deposited\"] = parsedAmount;\n        } else {\n          allocations[token] = parsedAmount;\n        }\n      }\n\n      const keys = Object.keys(allocations);\n\n      const values = Object.values(allocations);\n\n      return [keys, values] as const;\n    }\n  );\n\n  const chartOptions =\n    poolType === Pool.ETH\n      ? ETHStrategyAllocationChartOptions\n      : USDStrategyAllocationChartOptions;\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment={{\n        md: \"flex-start\",\n        base: \"center\",\n      }}\n      expand\n    >\n      <Heading lineHeight={1} size=\"sm\" mb={1}>\n        {t(\"Strategy Allocation\")}\n      </Heading>\n\n      {isAllocationsLoading ? (\n        <Center expand>\n          <Spinner />\n        </Center>\n      ) : (\n        <Chart\n          options={{\n            ...chartOptions,\n            labels: allocations![0],\n          }}\n          type=\"pie\"\n          width=\"100%\"\n          height=\"110px\"\n          series={allocations![1]}\n        />\n      )}\n    </Column>\n  );\n};\n\nconst MonthlyReturns = () => {\n  const ethPoolAPY = usePoolAPY(Pool.ETH);\n  const stablePoolAPY = usePoolAPY(Pool.USDC);\n  const daiPoolAPY = usePoolAPY(Pool.DAI);\n  const yieldPoolAPY = usePoolAPY(Pool.YIELD);\n\n  const { poolName: ethPoolName } = usePoolInfo(Pool.ETH);\n  const { poolName: stablePoolName } = usePoolInfo(Pool.USDC);\n  const { poolName: daiPoolName } = usePoolInfo(Pool.DAI);\n  const { poolName: yieldPoolName } = usePoolInfo(Pool.YIELD);\n\n  const returns =\n    ethPoolAPY && stablePoolAPY && yieldPoolAPY && daiPoolAPY\n      ? {\n          [ethPoolName]: parseFloat(ethPoolAPY!),\n          [stablePoolName]: parseFloat(stablePoolAPY!),\n          [yieldPoolName]: parseFloat(yieldPoolAPY!),\n          [daiPoolName]: parseFloat(daiPoolAPY!),\n        }\n      : null;\n\n  const sortedEntries = returns\n    ? Object.entries(returns)\n        // Sort descendingly by highest APY\n        .sort((a, b) => b[1] - a[1])\n    : null;\n\n  const { t } = useTranslation();\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      expand\n      overflowY=\"hidden\"\n    >\n      <Heading size=\"sm\" lineHeight={1} mb={3}>\n        {t(\"Compare Returns\")}\n      </Heading>\n\n      {sortedEntries ? (\n        sortedEntries.map(([key, value]) => {\n          const highestAPY = sortedEntries[0][1];\n          return (\n            <Column\n              key={key}\n              width=\"100%\"\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"flex-end\"\n              mb={3}\n            >\n              <Row\n                mainAxisAlignment=\"space-between\"\n                crossAxisAlignment=\"center\"\n                width=\"100%\"\n                mb={1}\n              >\n                <Text color=\"#CACACA\" fontSize={12}>\n                  {key}\n                </Text>\n                <Text color=\"#CACACA\" fontSize={12}>\n                  {value ?? \"?\"}%\n                </Text>\n              </Row>\n\n              <ProgressBar\n                percentageFilled={\n                  // Fill it relative to the highest APY\n                  value / highestAPY\n                }\n              />\n            </Column>\n          );\n        })\n      ) : (\n        <Center expand>\n          <Spinner />\n        </Center>\n      )}\n    </Column>\n  );\n};\n\nconst TokenAllocation = () => {\n  const { rari } = useRari();\n  const poolType = usePoolType();\n\n  const { data: allocations } = useQuery(\n    poolType + \" currencyAllocations\",\n    async () => {\n      const currencyAllocations: {\n        [key: string]: BN;\n      } = await getSDKPool({\n        rari,\n        pool: poolType,\n      }).allocations.getRawCurrencyAllocations();\n\n      let dollarAmountAllocations: { [key: string]: number } = {};\n\n      Object.keys(currencyAllocations).forEach((symbol) => {\n        dollarAmountAllocations[symbol] =\n          parseFloat(currencyAllocations[symbol].toString()) /\n          10 ** tokens[symbol].decimals;\n      });\n\n      return dollarAmountAllocations;\n    }\n  );\n\n  const sortedEntries = allocations\n    ? Object.entries(allocations)\n        // Sort descendingly by the largest\n        .sort((a, b) => b[1] - a[1])\n    : null;\n\n  const maxAmount = (() => {\n    if (sortedEntries) {\n      return sortedEntries.reduce((a, b) => {\n        return a + b[1];\n      }, 0);\n    } else {\n      return null;\n    }\n  })();\n\n  const { t } = useTranslation();\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      expand\n      overflowY=\"scroll\"\n    >\n      <Heading size=\"md\" lineHeight={1}>\n        {t(\"Token Allocation\")}\n      </Heading>\n\n      {sortedEntries && maxAmount ? (\n        sortedEntries.slice(0, 4).map(([symbol, amount]) => {\n          const percentageOfMax = amount / maxAmount;\n\n          return (\n            <Column\n              key={symbol}\n              width=\"100%\"\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"flex-end\"\n              mb=\"10px\"\n            >\n              <Text color=\"#CACACA\" fontSize={10}>\n                {symbol}\n              </Text>\n              <ProgressBar percentageFilled={percentageOfMax} />\n            </Column>\n          );\n        })\n      ) : (\n        <Center expand>\n          <Spinner />\n        </Center>\n      )}\n    </Column>\n  );\n};\n\nconst RecentTrades = () => {\n  const { rari } = useRari();\n\n  const poolType = usePoolType();\n\n  const { data: allocationHistory } = useQuery(\n    poolType + \" allocationHistory\",\n    async () => {\n      const currentBlock = await rari.web3.eth.getBlockNumber();\n\n      const history: any[] = await getSDKPool({\n        rari,\n        pool: poolType,\n      }).history.getPoolAllocationHistory(0, currentBlock);\n\n      return history\n        .filter((event) => {\n          return event.returnValues.action === \"0\";\n        })\n        .slice(-40)\n        .reverse()\n        .map((event) => {\n          const token =\n            poolType === Pool.ETH\n              ? \"ETH\"\n              : currencyCodesByHashes[\n                  event.returnValues.currencyCode as string\n                ];\n\n          const pool = getSDKPool({ rari, pool: poolType }).allocations.POOLS[\n            event.returnValues.pool\n          ];\n\n          const amount = smallStringUsdFormatter(\n            (\n              parseFloat(event.returnValues.amount) /\n              10 ** tokens[token].decimals\n            ).toString()\n          );\n\n          return {\n            token,\n            amount: poolType === Pool.ETH ? amount.replace(\"$\", \"\") : amount,\n            pool,\n            blockNumber: event.blockNumber,\n            hash: event.transactionHash,\n            logIndex: event.logIndex,\n          };\n        });\n    }\n  );\n\n  const { t } = useTranslation();\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"flex-start\"\n      expand\n      overflowY=\"auto\"\n    >\n      <Heading size=\"md\" lineHeight={1} mb={2}>\n        {t(\"Recent Trades\")}\n      </Heading>\n\n      {allocationHistory ? (\n        allocationHistory!.map((event, index) => (\n          <Box key={event!.hash + event!.logIndex} width=\"100%\">\n            <Text fontSize=\"sm\" color=\"#aba6a6\">\n              <Link\n                isExternal\n                href={`https://www.etherscan.io/tx/${event!.hash}`}\n              >\n                Block #{event!.blockNumber}:\n              </Link>\n              <b> {t(\"Moved\")} </b>\n              {event!.amount} <b>{event!.token}</b> to\n              <b> {event!.pool}</b>\n            </Text>\n            {index !== allocationHistory!.length - 1 ? (\n              <Divider borderColor=\"#616161\" my={1} />\n            ) : (\n              <Box height=\"10px\" />\n            )}\n          </Box>\n        ))\n      ) : (\n        <Center expand>\n          <Spinner />\n        </Center>\n      )}\n    </Column>\n  );\n};\n\nconst TransactionHistory = () => {\n  const { t } = useTranslation();\n\n  const poolType = usePoolType();\n\n  const { rari, address } = useRari();\n\n  const poolAddress: string = getSDKPool({ rari, pool: poolType }).contracts //@ts-ignore\n    .RariFundToken.options.address;\n\n  return (\n    <Link\n      href={`https://etherscan.io/token/${poolAddress}?a=${address}`}\n      isExternal\n    >\n      <Column\n        expand\n        mainAxisAlignment=\"center\"\n        crossAxisAlignment=\"center\"\n        textAlign=\"center\"\n        fontWeight=\"bold\"\n        fontSize=\"md\"\n      >\n        <ExternalLinkIcon boxSize=\"18px\" mb=\"6px\" />\n        {t(\"View Transaction History\")}\n      </Column>\n    </Link>\n  );\n};\n\nconst DepositButton = (\n  props: BoxProps & {\n    onClick: () => any;\n  }\n) => {\n  const { t } = useTranslation();\n\n  return (\n    <GlowingButton width=\"170px\" height=\"50px\" {...props}>\n      {t(\"Withdraw\")}\n    </GlowingButton>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/RariDepositModal/AmountSelect.tsx",
    "content": "import { useState } from \"react\";\nimport { Row, Column, Center } from \"utils/chakraUtils\";\nimport SmallWhiteCircle from \"../../../static/small-white-circle.png\";\n\nimport { ChevronDownIcon, SettingsIcon } from \"@chakra-ui/icons\";\nimport {\n  Heading,\n  Box,\n  Button,\n  Text,\n  Image,\n  IconButton,\n  Input,\n  Link,\n  useToast,\n} from \"@chakra-ui/react\";\nimport DashboardBox from \"../../shared/DashboardBox\";\nimport { tokens } from \"../../../utils/tokenUtils\";\n\nimport {\n  useTokenBalance,\n  fetchTokenBalance,\n} from \"../../../hooks/useTokenBalance\";\n\nimport { Mode } from \".\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { ModalDivider } from \"../../shared/Modal\";\nimport { useRari } from \"../../../context/RariContext\";\nimport { usePoolType } from \"../../../context/PoolContext\";\nimport { BN, smallStringUsdFormatter } from \"../../../utils/bigUtils\";\n\nimport BigNumber from \"bignumber.js\";\n\nimport { useQueryClient } from \"react-query\";\n\nimport {\n  getSDKPool,\n  Pool,\n  poolHasDivergenceRisk,\n} from \"../../../utils/poolUtils\";\nimport {\n  fetchMaxWithdraw,\n  useMaxWithdraw,\n} from \"../../../hooks/useMaxWithdraw\";\nimport { AttentionSeeker } from \"react-awesome-reveal\";\n\nimport { HashLoader } from \"react-spinners\";\nimport { handleGenericError } from \"../../../utils/errorHandling\";\n\ninterface Props {\n  selectedToken: string;\n  openCoinSelect: () => any;\n  openOptions: () => any;\n  onClose: () => any;\n  mode: Mode;\n}\n\nenum UserAction {\n  NO_ACTION,\n  REQUESTED_QUOTE,\n  VIEWING_QUOTE,\n  WAITING_FOR_TRANSACTIONS,\n}\n\nconst AmountSelect = ({\n  selectedToken,\n  openCoinSelect,\n  mode,\n  openOptions,\n  onClose,\n}: Props) => {\n  const token = tokens[selectedToken];\n\n  const poolType = usePoolType();\n\n  const { rari, address } = useRari();\n\n  const {\n    data: selectedTokenBalance,\n    isLoading: isSelectedTokenBalanceLoading,\n  } = useTokenBalance(token.address);\n\n  const [userAction, setUserAction] = useState(UserAction.NO_ACTION);\n\n  const [quoteAmount, setQuoteAmount] = useState<null | BN>(null);\n\n  const [userEnteredAmount, _setUserEnteredAmount] = useState(\"\");\n\n  const [amount, _setAmount] = useState<BigNumber | null>(\n    () => new BigNumber(0)\n  );\n\n  const updateAmount = (newAmount: string) => {\n    if (newAmount.startsWith(\"-\")) {\n      return;\n    }\n\n    _setUserEnteredAmount(newAmount);\n\n    try {\n      BigNumber.DEBUG = true;\n\n      // Try to set the amount to BigNumber(newAmount):\n      const bigAmount = new BigNumber(newAmount);\n      _setAmount(bigAmount.multipliedBy(10 ** token.decimals));\n    } catch (e) {\n      console.log(e);\n\n      // If the number was invalid, set the amount to null to disable confirming:\n      _setAmount(null);\n    }\n\n    setUserAction(UserAction.NO_ACTION);\n  };\n\n  const { max, isMaxLoading } = useMaxWithdraw(token.symbol);\n\n  const amountIsValid = (() => {\n    if (amount === null || amount.isZero()) {\n      return false;\n    }\n\n    if (mode === Mode.DEPOSIT) {\n      if (isSelectedTokenBalanceLoading) {\n        return false;\n      }\n\n      return amount.lte(selectedTokenBalance!.toString());\n    } else {\n      if (isMaxLoading) {\n        return false;\n      }\n\n      return amount.lte(max!.toString());\n    }\n  })();\n\n  const { t } = useTranslation();\n\n  let depositOrWithdrawAlert;\n\n  if (amount === null) {\n    depositOrWithdrawAlert =\n      mode === Mode.DEPOSIT\n        ? t(\"Enter a valid amount to deposit.\")\n        : t(\"Enter a valid amount to withdraw.\");\n  } else if (amount.isZero()) {\n    if (poolType === Pool.ETH) {\n      depositOrWithdrawAlert =\n        mode === Mode.DEPOSIT\n          ? t(\"Enter a valid amount to deposit.\")\n          : t(\"Enter a valid amount to withdraw.\");\n    } else {\n      depositOrWithdrawAlert =\n        mode === Mode.DEPOSIT\n          ? t(\"Choose which token you want to deposit.\")\n          : t(\"Choose which token you want to withdraw.\");\n    }\n  } else if (isSelectedTokenBalanceLoading) {\n    depositOrWithdrawAlert = t(\"Loading your balance of {{token}}...\", {\n      token: selectedToken,\n    });\n  } else if (!amountIsValid) {\n    depositOrWithdrawAlert =\n      mode === Mode.DEPOSIT\n        ? t(\"You don't have enough {{token}}.\", {\n            token: selectedToken,\n          })\n        : t(\"You cannot withdraw this much {{token}}.\", {\n            token: selectedToken,\n          });\n  } else {\n    if (poolType === Pool.YIELD) {\n      depositOrWithdrawAlert = t(\n        \"This pool has withdrawal & interest fees. Click to learn more.\"\n      );\n    } else {\n      if (mode === Mode.DEPOSIT) {\n        depositOrWithdrawAlert = t(\n          \"This pool has performance fees. Click to learn more.\"\n        );\n      } else {\n        depositOrWithdrawAlert = t(\"Click review + confirm to withdraw!\");\n      }\n    }\n  }\n\n  const toast = useToast();\n\n  const queryClient = useQueryClient();\n\n  const onConfirm = async () => {\n    try {\n      const pool = getSDKPool({ rari, pool: poolType });\n\n      //@ts-ignore\n      const amountBN = rari.web3.utils.toBN(amount!.decimalPlaces(0));\n\n      // If clicking for the first time:\n      if (userAction === UserAction.NO_ACTION) {\n        setUserAction(UserAction.REQUESTED_QUOTE);\n\n        let quote: BN;\n        let slippage: BN;\n\n        if (mode === Mode.DEPOSIT) {\n          const [amountToBeAdded, , _slippage] =\n            (await pool.deposits.validateDeposit(\n              token.symbol,\n              amountBN,\n              address,\n              true\n            )) as BN[];\n\n          quote = amountToBeAdded;\n          slippage = _slippage;\n        } else {\n          const [amountToBeRemoved, , _slippage] =\n            (await pool.withdrawals.validateWithdrawal(\n              token.symbol,\n              amountBN,\n              address,\n              true\n            )) as BN[];\n\n          quote = amountToBeRemoved;\n          slippage = _slippage;\n        }\n\n        if (slippage) {\n          const slippagePercent = (parseInt(slippage.toString()) / 1e18) * 100;\n          const formattedSlippage = slippagePercent.toFixed(2) + \"%\";\n\n          console.log(\"Slippage of \" + formattedSlippage);\n\n          // If slippage is >4% and user does not want to continue:\n          if (\n            slippagePercent > 4 &&\n            !window.confirm(\n              t(\n                \"High slippage of {{formattedSlippage}} for {{token}}, do you still wish to continue with this transaction?\",\n                { formattedSlippage, token: token.symbol }\n              )\n            )\n          ) {\n            setUserAction(UserAction.NO_ACTION);\n            return;\n          }\n        }\n\n        setQuoteAmount(quote);\n\n        setUserAction(UserAction.VIEWING_QUOTE);\n\n        return;\n      }\n\n      // They must have already seen the quote as the button to trigger this function is disabled while it's loading:\n      // This means they are now ready to start sending transactions:\n\n      setUserAction(UserAction.WAITING_FOR_TRANSACTIONS);\n\n      if (mode === Mode.DEPOSIT) {\n        // (Third item in array is approvalReceipt)\n        const [, , , depositReceipt] = await pool.deposits.deposit(\n          token.symbol,\n          amountBN,\n          quoteAmount!,\n          {\n            from: address,\n          }\n        );\n\n        if (!depositReceipt) {\n          throw new Error(\n            t(\n              \"Prices and/or slippage have changed. Please reload the page and try again. If the problem persists, please contact us.\"\n            )\n          );\n        }\n      } else {\n        // (Third item in array is withdrawReceipt)\n        await pool.withdrawals.withdraw(token.symbol, amountBN, quoteAmount!, {\n          from: address,\n        });\n      }\n\n      queryClient.refetchQueries();\n      // Wait 2 seconds for refetch and then close modal.\n      // We do this instead of waiting the refetch because some refetches take a while or error out and we want to close now.\n      await new Promise((resolve) => setTimeout(resolve, 2000));\n\n      onClose();\n    } catch (e) {\n      handleGenericError(e, toast);\n      setUserAction(UserAction.NO_ACTION);\n    }\n  };\n\n  return userAction === UserAction.WAITING_FOR_TRANSACTIONS ? (\n    <Column expand mainAxisAlignment=\"center\" crossAxisAlignment=\"center\" p={4}>\n      <HashLoader size={70} color={token.color} loading />\n      <Heading mt=\"30px\" textAlign=\"center\" size=\"md\">\n        {mode === Mode.DEPOSIT\n          ? t(\"Check your wallet to submit the transactions\")\n          : t(\"Check your wallet to submit the transaction\")}\n      </Heading>\n      <Text fontSize=\"sm\" mt=\"15px\" textAlign=\"center\">\n        {mode === Mode.DEPOSIT\n          ? t(\"Do not close this tab until you submit both transactions!\")\n          : t(\"You may close this tab after submitting the transaction.\")}\n      </Text>\n      <Text fontSize=\"xs\" mt=\"5px\" textAlign=\"center\">\n        {t(\n          \"Do not increase the price of gas more than 1.5x the prefilled amount!\"\n        )}\n      </Text>\n    </Column>\n  ) : (\n    <>\n      <Row\n        width=\"100%\"\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n        p={4}\n      >\n        <Box width=\"40px\" />\n        <Heading fontSize=\"27px\">\n          {mode === Mode.DEPOSIT ? t(\"Deposit\") : t(\"Withdraw\")}\n        </Heading>\n        <IconButton\n          color=\"#FFFFFF\"\n          variant=\"ghost\"\n          aria-label=\"Options\"\n          icon={<SettingsIcon />}\n          _hover={{\n            transform: \"rotate(360deg)\",\n            transition: \"all 0.7s ease-in-out\",\n          }}\n          _active={{}}\n          onClick={openOptions}\n        />\n      </Row>\n      <ModalDivider />\n      <Column\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n        p={4}\n        height=\"100%\"\n      >\n        <Text fontWeight=\"bold\" fontSize=\"13px\" textAlign=\"center\">\n          <Link\n            href=\"https://www.notion.so/Fees-e4689d7b800f485098548dd9e9d0a69f\"\n            isExternal\n          >\n            {depositOrWithdrawAlert}\n          </Link>\n        </Text>\n        <DashboardBox width=\"100%\" height=\"70px\">\n          <Row\n            p={4}\n            mainAxisAlignment=\"space-between\"\n            crossAxisAlignment=\"center\"\n            expand\n          >\n            <AmountInput\n              selectedToken={selectedToken}\n              displayAmount={userEnteredAmount}\n              updateAmount={updateAmount}\n            />\n\n            <TokenNameAndMaxButton\n              openCoinSelect={openCoinSelect}\n              selectedToken={selectedToken}\n              updateAmount={updateAmount}\n              mode={mode}\n            />\n          </Row>\n        </DashboardBox>\n\n        <Button\n          fontWeight=\"bold\"\n          fontSize=\"2xl\"\n          borderRadius=\"10px\"\n          width=\"100%\"\n          height=\"70px\"\n          bg={token.color}\n          _hover={{ transform: \"scale(1.02)\" }}\n          _active={{ transform: \"scale(0.95)\" }}\n          color={token.overlayTextColor}\n          isLoading={\n            isSelectedTokenBalanceLoading ||\n            userAction === UserAction.REQUESTED_QUOTE\n          }\n          onClick={onConfirm}\n          isDisabled={!amountIsValid}\n        >\n          {userAction === UserAction.VIEWING_QUOTE ? t(\"Confirm\") : t(\"Review\")}\n        </Button>\n\n        {poolHasDivergenceRisk(poolType) ? (\n          <Link\n            href=\"https://www.notion.so/Capital-Allocation-Risks-f4bccf324a594f46b849e6358e0a2464#631d223f598b42e28f9758541c1b1525\"\n            isExternal\n          >\n            <Text fontSize=\"xs\" textAlign=\"center\">\n              {t(\n                \"You may experience divergence loss in this pool. Click for more info.\"\n              )}\n            </Text>\n          </Link>\n        ) : null}\n      </Column>\n      {userAction === UserAction.VIEWING_QUOTE ? (\n        <ApprovalNotch color={token.color} mode={mode} amount={quoteAmount!} />\n      ) : null}\n    </>\n  );\n};\n\nexport default AmountSelect;\n\nconst TokenNameAndMaxButton = ({\n  openCoinSelect,\n  selectedToken,\n  updateAmount,\n  mode,\n}: {\n  selectedToken: string;\n  openCoinSelect: () => any;\n  updateAmount: (newAmount: string) => any;\n  mode: Mode;\n}) => {\n  const token = tokens[selectedToken];\n\n  const { rari, address } = useRari();\n\n  const poolType = usePoolType();\n\n  const [isMaxLoading, setIsMaxLoading] = useState(false);\n\n  const setToMax = async () => {\n    setIsMaxLoading(true);\n    let maxBN: BN;\n\n    if (mode === Mode.DEPOSIT) {\n      const balance = await fetchTokenBalance(\n        token.address,\n        rari.web3,\n        address\n      );\n\n      if (token.symbol === \"ETH\") {\n        // Subtract gas from ETH max\n\n        // Ex: 100 (in GWEI)\n        const { standard } = await fetch(\"https://gasprice.poa.network\").then(\n          (res) => res.json()\n        );\n\n        const gasPrice = rari.web3.utils.toBN(\n          // @ts-ignore For some reason it's returning a string not a BN\n          rari.web3.utils.toWei(standard.toString(), \"gwei\")\n        );\n\n        const gasWEI = rari.web3.utils.toBN(500000).mul(gasPrice);\n\n        // Subtract the ETH that is needed for gas.\n        maxBN = balance.sub(gasWEI);\n      } else {\n        maxBN = balance;\n      }\n    } else {\n      const max = await fetchMaxWithdraw({\n        rari,\n        address,\n        poolType,\n        symbol: token.symbol,\n      });\n\n      maxBN = max;\n    }\n\n    if (maxBN.isNeg() || maxBN.isZero()) {\n      updateAmount(\"\");\n    } else {\n      const str = new BigNumber(maxBN.toString())\n        .div(10 ** token.decimals)\n        .toFixed(18)\n        // Remove trailing zeroes\n        .replace(/\\.?0+$/, \"\");\n\n      if (str.startsWith(\"0.000000\")) {\n        updateAmount(\"\");\n      } else {\n        updateAmount(str);\n      }\n    }\n\n    setIsMaxLoading(false);\n  };\n\n  const { t } = useTranslation();\n\n  return (\n    <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n      <Row\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        as=\"button\"\n        onClick={openCoinSelect}\n      >\n        <Box height=\"25px\" width=\"25px\" mr={2}>\n          <Image\n            width=\"100%\"\n            height=\"100%\"\n            borderRadius=\"50%\"\n            backgroundImage={`url(${SmallWhiteCircle})`}\n            src={token.logoURL}\n            alt=\"\"\n          />\n        </Box>\n        <Heading fontSize=\"24px\">{selectedToken}</Heading>\n        <ChevronDownIcon boxSize=\"32px\" />\n      </Row>\n\n      <Button\n        ml={1}\n        height=\"28px\"\n        width=\"58px\"\n        bg=\"transparent\"\n        border=\"2px\"\n        borderRadius=\"8px\"\n        borderColor=\"#272727\"\n        fontSize=\"sm\"\n        fontWeight=\"extrabold\"\n        _hover={{}}\n        _active={{}}\n        onClick={setToMax}\n        isLoading={isMaxLoading}\n      >\n        {t(\"MAX\")}\n      </Button>\n    </Row>\n  );\n};\n\nconst AmountInput = ({\n  displayAmount,\n  updateAmount,\n  selectedToken,\n}: {\n  displayAmount: string;\n  updateAmount: (symbol: string) => any;\n  selectedToken: string;\n}) => {\n  const token = tokens[selectedToken];\n\n  return (\n    <Input\n      type=\"number\"\n      inputMode=\"decimal\"\n      fontSize=\"3xl\"\n      fontWeight=\"bold\"\n      variant=\"unstyled\"\n      _placeholder={{ color: token.color }}\n      placeholder=\"0.0\"\n      value={displayAmount}\n      color={token.color}\n      onChange={(event) => updateAmount(event.target.value)}\n      mr={4}\n    />\n  );\n};\n\nconst ApprovalNotch = ({\n  color,\n  mode,\n  amount,\n}: {\n  amount: BN;\n  mode: Mode;\n  color: string;\n}) => {\n  const { t } = useTranslation();\n\n  const poolType = usePoolType();\n\n  const { rari } = useRari();\n\n  const formattedAmount = (() => {\n    const usdFormatted = smallStringUsdFormatter(\n      rari.web3.utils.fromWei(amount)\n    );\n\n    return poolType === Pool.ETH\n      ? usdFormatted.replace(\"$\", \"\") + \" ETH\"\n      : usdFormatted;\n  })();\n\n  return (\n    <AttentionSeeker effect=\"headShake\" triggerOnce>\n      <Box\n        borderRadius=\"0 0 10px 10px\"\n        borderWidth=\"0 1px 1px 1px\"\n        borderColor=\"#272727\"\n        bg=\"#121212\"\n        width={{ md: \"auto\", base: \"90%\" }}\n        height={{ md: \"30px\", base: \"60px\" }}\n        color={color}\n        position=\"absolute\"\n        mx=\"auto\"\n        px={4}\n        left=\"50%\"\n        transform=\"translateX(-50%)\"\n        bottom={{ md: \"-30px\", base: \"-60px\" }}\n        whiteSpace={{ md: \"nowrap\", base: \"inherit\" }}\n      >\n        <Center expand>\n          <Text fontSize=\"xs\" pb=\"5px\" textAlign=\"center\" className=\"blinking\">\n            {mode === Mode.DEPOSIT\n              ? t(\"You will deposit {{amount}}. Click confirm to approve.\", {\n                  amount: formattedAmount,\n                })\n              : poolType === Pool.YIELD\n              ? t(\n                  \"You will withdraw {{amount}} before fees. Click confirm to approve.\",\n                  { amount: formattedAmount }\n                )\n              : t(\"You will withdraw {{amount}}. Click confirm to approve.\", {\n                  amount: formattedAmount,\n                })}\n          </Text>\n        </Center>\n      </Box>\n    </AttentionSeeker>\n  );\n};\n"
  },
  {
    "path": "src/components/pages/RariDepositModal/OptionsMenu.tsx",
    "content": "import { Button } from \"@chakra-ui/react\";\n\nimport { Fade } from \"react-awesome-reveal\";\nimport { Column } from \"utils/chakraUtils\";\n\nimport { Mode } from \".\";\nimport { useTranslation } from \"react-i18next\";\nimport { ModalDivider, ModalTitleWithCloseButton } from \"../../shared/Modal\";\n\nconst OptionsMenu = ({\n  mode,\n  onSetMode,\n  onClose,\n}: {\n  mode: Mode;\n  onClose: () => any;\n  onSetMode: (mode: Mode) => any;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <Fade>\n      <ModalTitleWithCloseButton text={t(\"Options\")} onClose={onClose} />\n      <ModalDivider />\n      <Column\n        mt={4}\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n      >\n        <Button\n          colorScheme=\"red\"\n          variant=\"solid\"\n          onClick={() => {\n            onSetMode(mode === Mode.DEPOSIT ? Mode.WITHDRAW : Mode.DEPOSIT);\n\n            onClose();\n          }}\n        >\n          {mode === Mode.DEPOSIT\n            ? t(\"Want to withdraw?\")\n            : t(\"Want to deposit?\")}\n        </Button>\n      </Column>\n    </Fade>\n  );\n};\n\nexport default OptionsMenu;\n"
  },
  {
    "path": "src/components/pages/RariDepositModal/TokenSelect.tsx",
    "content": "import { memo, useState, CSSProperties, useCallback, useMemo } from \"react\";\nimport {\n  Input,\n  Image,\n  InputGroup,\n  InputLeftElement,\n  Heading,\n  Text,\n  Box,\n} from \"@chakra-ui/react\";\nimport { tokens } from \"../../../utils/tokenUtils\";\nimport { Fade } from \"react-awesome-reveal\";\nimport { Row, Column } from \"utils/chakraUtils\";\nimport { useTokenBalance } from \"../../../hooks/useTokenBalance\";\n\nimport BigWhiteCircle from \"../../../static/big-white-circle.png\";\nimport {\n  FixedSizeList as List,\n  areEqual,\n  ListItemKeySelector,\n} from \"react-window\";\nimport AutoSizer from \"react-virtualized-auto-sizer\";\nimport { useTranslation } from \"react-i18next\";\nimport { ModalDivider, ModalTitleWithCloseButton } from \"../../shared/Modal\";\nimport { usdFormatter } from \"../../../utils/bigUtils\";\nimport { usePoolType } from \"../../../context/PoolContext\";\n\nimport { Mode } from \".\";\nimport { Pool, poolHasDivergenceRisk } from \"../../../utils/poolUtils\";\nimport { SearchIcon } from \"@chakra-ui/icons\";\nimport { useNoSlippageCurrencies } from \"../../../hooks/useNoSlippageCurrencies\";\n\nconst TokenSelect = ({\n  onSelectToken: _onSelectToken,\n  onClose,\n  mode,\n}: {\n  mode: Mode;\n  onClose: () => any;\n  onSelectToken: (symbol: string) => any;\n}) => {\n  const [searchNeedle, setSearchNeedle] = useState(\"\");\n\n  const poolType = usePoolType();\n\n  const noSlippageCurrencies = useNoSlippageCurrencies(poolType);\n\n  const tokenKeys = (() => {\n    if (poolType === Pool.ETH) {\n      return [\"ETH\"];\n    }\n\n    return searchNeedle === \"\"\n      ? Object.keys(tokens).sort((a, b) => {\n          // First items shown last, last items shown at the top!\n          const priorityCurrencies = [\n            \"sUSD\",\n            \"WETH\",\n            \"ETH\",\n            \"DAI\",\n            \"mUSD\",\n            \"USDT\",\n            \"USDC\",\n          ];\n\n          if (priorityCurrencies.indexOf(a) < priorityCurrencies.indexOf(b)) {\n            return 1;\n          }\n          if (priorityCurrencies.indexOf(a) > priorityCurrencies.indexOf(b)) {\n            return -1;\n          }\n\n          return 0;\n        })\n      : Object.keys(tokens).filter((symbol) =>\n          symbol.toLowerCase().startsWith(searchNeedle.toLowerCase())\n        );\n  })();\n\n  const { t } = useTranslation();\n\n  return (\n    <Fade>\n      <ModalTitleWithCloseButton text={t(\"Select A Token\")} onClose={onClose} />\n      <ModalDivider />\n      <Box px={4}>\n        <InputGroup mb={2}>\n          <InputLeftElement\n            ml={-1}\n            children={<SearchIcon color=\"gray.300\" />}\n          />\n          <Input\n            variant=\"flushed\"\n            roundedLeft=\"0\"\n            placeholder={t(\"Try searching for 'USDC'\")}\n            focusBorderColor=\"#FFFFFF\"\n            value={searchNeedle}\n            onChange={(event) => setSearchNeedle(event.target.value)}\n          />\n        </InputGroup>\n      </Box>\n\n      <Box px={4}>\n        No Slippage:{\" \"}\n        <b>\n          {!noSlippageCurrencies\n            ? \" Loading...\"\n            : noSlippageCurrencies.map((token: string, index: number) => {\n                return (\n                  token +\n                  (index === (noSlippageCurrencies as string[]).length - 1\n                    ? \"\"\n                    : \", \")\n                );\n              })}\n        </b>\n      </Box>\n\n      <Box\n        pt={2}\n        px={4}\n        width=\"100%\"\n        height={{\n          md: poolHasDivergenceRisk(poolType) ? \"182px\" : \"157px\",\n          base: poolHasDivergenceRisk(poolType) ? \"210px\" : \"170px\",\n        }}\n      >\n        <TokenList\n          mode={mode}\n          tokenKeys={tokenKeys}\n          onClick={(symbol) => {\n            _onSelectToken(symbol);\n            onClose();\n          }}\n        />\n      </Box>\n    </Fade>\n  );\n};\n\nexport default TokenSelect;\n\nconst TokenRow = memo(\n  ({\n    data: { tokenKeys, onClick, mode },\n    index,\n    style,\n  }: {\n    data: {\n      tokenKeys: string[];\n      onClick: (symbol: string) => any;\n      mode: Mode;\n    };\n    index: number;\n    style: CSSProperties;\n  }) => {\n    const token = tokens[tokenKeys[index]];\n\n    const { data: balance, isLoading: isBalanceLoading } = useTokenBalance(\n      token.address\n    );\n\n    return (\n      <div style={style}>\n        <Row\n          flexShrink={0}\n          as=\"button\"\n          onClick={() => onClick(token.symbol)}\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n        >\n          <Box height=\"45px\" width=\"45px\" borderRadius=\"50%\" mr={2}>\n            <Image\n              width=\"100%\"\n              height=\"100%\"\n              borderRadius=\"50%\"\n              backgroundImage={`url(${BigWhiteCircle})`}\n              src={token.logoURL}\n              alt=\"\"\n            />\n          </Box>\n          <Column\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"flex-start\"\n          >\n            <Heading fontSize=\"20px\" lineHeight=\"1.25rem\" color={token.color}>\n              {token.symbol}\n            </Heading>\n            <Text fontWeight=\"thin\" fontSize=\"15px\">\n              {mode === Mode.DEPOSIT\n                ? isBalanceLoading\n                  ? \"?\"\n                  : usdFormatter(\n                      parseFloat(balance!.toString()) / 10 ** token.decimals\n                    ).replace(\"$\", \"\")\n                : null}\n            </Text>\n          </Column>\n        </Row>\n      </div>\n    );\n  },\n  areEqual\n);\n\nconst TokenList = memo(\n  ({\n    tokenKeys,\n    onClick,\n    mode,\n  }: {\n    tokenKeys: string[];\n    onClick: (symbol: string) => any;\n    mode: Mode;\n  }) => {\n    const itemData = useMemo(\n      () => ({\n        tokenKeys,\n        onClick,\n        mode,\n      }),\n      [tokenKeys, onClick, mode]\n    );\n\n    const getItemKey = useCallback<ListItemKeySelector>(\n      (index, data) => data.tokenKeys[index],\n      []\n    );\n\n    return (\n      <AutoSizer>\n        {({ height, width }) => {\n          return (\n            <List\n              height={height}\n              width={width}\n              itemCount={tokenKeys.length}\n              itemKey={getItemKey}\n              itemSize={55}\n              itemData={itemData}\n              overscanCount={3}\n            >\n              {TokenRow}\n            </List>\n          );\n        }}\n      </AutoSizer>\n    );\n  }\n);\n"
  },
  {
    "path": "src/components/pages/RariDepositModal/index.tsx",
    "content": "import { useState, useEffect } from \"react\";\nimport { Modal, ModalOverlay, ModalContent } from \"@chakra-ui/react\";\n\nimport TokenSelect from \"./TokenSelect\";\nimport AmountSelect from \"./AmountSelect\";\nimport OptionsMenu from \"./OptionsMenu\";\nimport { MODAL_PROPS } from \"../../shared/Modal\";\nimport { usePoolType } from \"../../../context/PoolContext\";\nimport { Pool, poolHasDivergenceRisk } from \"../../../utils/poolUtils\";\n\nenum CurrentScreen {\n  MAIN,\n  COIN_SELECT,\n  OPTIONS,\n}\n\nexport enum Mode {\n  DEPOSIT,\n  WITHDRAW,\n}\n\ninterface Props {\n  isOpen: boolean;\n\n  onClose: () => any;\n}\n\nconst DepositModal = (props: Props) => {\n  const [mode, setMode] = useState(Mode.WITHDRAW);\n\n  const [currentScreen, setCurrentScreen] = useState(CurrentScreen.MAIN);\n\n  useEffect(() => {\n    // When the modal closes return to the main screen.\n    if (!props.isOpen) {\n      setCurrentScreen(CurrentScreen.MAIN);\n    }\n  }, [props.isOpen]);\n\n  const poolType = usePoolType();\n\n  const [selectedToken, setSelectedToken] = useState(() => {\n    if (poolType === Pool.ETH) {\n      return \"ETH\";\n    } else {\n      return \"USDC\";\n    }\n  });\n\n  return (\n    <Modal\n      motionPreset=\"slideInBottom\"\n      isOpen={props.isOpen}\n      onClose={props.onClose}\n      isCentered\n    >\n      <ModalOverlay />\n      <ModalContent\n        {...MODAL_PROPS}\n        height={{\n          md: poolHasDivergenceRisk(poolType) ? \"320px\" : \"295px\",\n          base: poolHasDivergenceRisk(poolType) ? \"350px\" : \"310px\",\n        }}\n      >\n        {currentScreen === CurrentScreen.MAIN ? (\n          <AmountSelect\n            onClose={props.onClose}\n            openCoinSelect={() => setCurrentScreen(CurrentScreen.COIN_SELECT)}\n            openOptions={() => setCurrentScreen(CurrentScreen.OPTIONS)}\n            selectedToken={selectedToken}\n            mode={mode}\n          />\n        ) : currentScreen === CurrentScreen.COIN_SELECT ? (\n          <TokenSelect\n            onClose={() => setCurrentScreen(CurrentScreen.MAIN)}\n            onSelectToken={setSelectedToken}\n            mode={mode}\n          />\n        ) : (\n          <OptionsMenu\n            onClose={() => setCurrentScreen(CurrentScreen.MAIN)}\n            onSetMode={setMode}\n            mode={mode}\n          />\n        )}\n      </ModalContent>\n    </Modal>\n  );\n};\n\nexport default DepositModal;\n"
  },
  {
    "path": "src/components/pages/Stats/StatsEarnSection.tsx",
    "content": "import { useMemo } from \"react\";\nimport {\n  Table,\n  Text,\n  Thead,\n  Tbody,\n  Tr,\n  Th,\n  Td,\n  Spinner,\n} from \"@chakra-ui/react\";\nimport { motion } from \"framer-motion\";\n\nimport { useAggregatePoolInfos } from \"hooks/usePoolInfo\";\nimport { smallUsdFormatter } from \"utils/bigUtils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Earn = () => {\n  const { totals, aggregatePoolsInfo } = useAggregatePoolInfos();\n\n  const { t } = useTranslation();\n\n  const hasDeposits = useMemo(() => totals.balance > 0, [totals.balance]);\n\n  return (\n    <motion.div\n      key=\"earn\"\n      style={{ width: \"100%\" }}\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n    >\n      <Table variant=\"simple\">\n        <Thead color=\"white\">\n          <Tr>\n            <Th color=\"white\">{t(\"Pool\")}</Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"APY\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Deposits\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Interest\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Growth\")}\n            </Th>\n          </Tr>\n        </Thead>\n        <Tbody>\n          {aggregatePoolsInfo?.map((aggPoolInfo) => {\n            if (aggPoolInfo?.poolBalance && !aggPoolInfo.poolBalance.isZero()) {\n              return (\n                <Tr key={aggPoolInfo.poolInfo.title}>\n                  <Td>{aggPoolInfo.poolInfo.title}</Td>\n                  <Td textAlign=\"right\">\n                    {aggPoolInfo.poolAPY ?? <Spinner />}%\n                  </Td>\n                  <Td textAlign=\"right\">\n                    {aggPoolInfo.formattedPoolBalance ?? <Spinner />}\n                  </Td>\n                  <Td textAlign=\"right\">\n                    {aggPoolInfo.formattedPoolInterestEarned ?? <Spinner />}\n                  </Td>\n                  <Td textAlign=\"right\">\n                    {aggPoolInfo.formattedPoolGrowth ?? <Spinner />}%\n                  </Td>\n                </Tr>\n              );\n            } else return null;\n          })}\n          {/* Todo (sharad) - implement totals for apy and growth */}\n          <Tr fontWeight={hasDeposits ? \"bold\" : \"normal\"}>\n            <Td>\n              <Text>{t(\"Total\")}</Text>\n            </Td>\n            <Td textAlign=\"right\"></Td>\n            <Td textAlign=\"right\">\n              <Text>{smallUsdFormatter(totals?.balance)}</Text>\n            </Td>\n            <Td textAlign=\"right\">\n              <Text>{totals?.interestEarned}</Text>\n            </Td>\n            <Td textAlign=\"right\"></Td>\n          </Tr>\n        </Tbody>\n      </Table>\n    </motion.div>\n  );\n};\n\nexport default Earn;\n"
  },
  {
    "path": "src/components/pages/Stats/StatsFuseSection.tsx",
    "content": "import { useMemo } from \"react\";\nimport {\n  Avatar,\n  Box,\n  Text,\n  Table,\n  Thead,\n  Tbody,\n  Tr,\n  Th,\n  Td,\n} from \"@chakra-ui/react\";\nimport { Row, Column } from \"utils/chakraUtils\";\nimport { motion } from \"framer-motion\";\n\n// Hooks\nimport { useFusePools } from \"hooks/fuse/useFusePools\";\nimport { useFusePoolsData } from \"hooks/useFusePoolData\";\nimport { useBorrowLimits } from \"hooks/useBorrowLimit\";\nimport { useAssetsMapWithTokenData } from \"hooks/useAssetsMap\";\n\nimport { FusePoolData, USDPricedFuseAsset } from \"utils/fetchFusePoolData\";\nimport { TokenData } from \"hooks/useTokenData\";\nimport { TokensDataHash } from \"utils/tokenUtils\";\nimport { convertMantissaToAPY } from \"utils/apyUtils\";\nimport { shortUsdFormatter, smallUsdFormatter } from \"utils/bigUtils\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\n\nimport { useTranslation } from \"react-i18next\";\n\nexport enum AssetContainerType {\n  SUPPLY,\n  BORROW,\n  RATES,\n}\n\nconst Fuse = () => {\n  // Todo - write useFusePoolsData\n  const { filteredPools } = useFusePools(\"my-pools\");\n\n  const { t } = useTranslation();\n\n  const poolIds: number[] = filteredPools?.map(({ id }) => id) ?? [];\n\n  const fusePoolsData: FusePoolData[] | null = useFusePoolsData(poolIds);\n\n  const assetsArray: USDPricedFuseAsset[][] | null =\n    fusePoolsData?.map((pool) => pool?.assets) ?? null;\n  const maxBorrows = useBorrowLimits(assetsArray);\n\n  const { tokensDataMap }: { tokensDataMap: TokensDataHash } =\n    useAssetsMapWithTokenData(assetsArray);\n\n  const totalBorrowBalanceUSD =\n    fusePoolsData?.reduce((a, b) => {\n      return a + b.totalBorrowBalanceUSD;\n    }, 0) ?? 0;\n\n  const totalSupplyBalanceUSD =\n    fusePoolsData?.reduce((a, b) => {\n      return a + b.totalSupplyBalanceUSD;\n    }, 0) ?? 0;\n\n  const hasDeposits = useMemo(\n    () => totalSupplyBalanceUSD > 0,\n    [totalSupplyBalanceUSD]\n  );\n\n  return (\n    <motion.div\n      key=\"fuse\"\n      style={{ width: \"100%\" }}\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n    >\n      <Table variant=\"simple\">\n        <Thead color=\"white\">\n          <Tr>\n            <Th textAlign=\"center\" color=\"white\">\n              {t(\"Pool\")}\n            </Th>\n            <Th textAlign=\"right\" color=\"white\">\n              {t(\"Borrow Limit\")}\n            </Th>\n            <Th textAlign=\"right\" color=\"white\">\n              {t(\"Deposits\")}\n            </Th>\n            <Th textAlign=\"right\" color=\"white\">\n              {t(\"Borrows\")}\n            </Th>\n            <Th textAlign=\"right\" color=\"white\">\n              {`${t(\"Lend APY\")} / ${t(\"Borrow APY\")}`}\n            </Th>\n          </Tr>\n        </Thead>\n        <Tbody>\n          {filteredPools?.map((filteredPool, index) => {\n            const fusePoolData = fusePoolsData?.[index];\n            const maxBorrow = maxBorrows?.[index];\n\n            const ratio =\n              fusePoolData?.totalBorrowBalanceUSD && maxBorrow\n                ? (fusePoolData.totalBorrowBalanceUSD / maxBorrow) * 100\n                : 0;\n\n            const isAtRiskOfLiquidation = ratio && ratio > 95;\n\n            return (\n              <Tr key={filteredPool.id}>\n                <Td textAlign=\"center\" fontSize=\"large\">\n                  {filteredPool.id}\n                </Td>\n                {/* Borrow limit */}\n                <Td\n                  textAlign=\"right\"\n                  textStyle=\"bold\"\n                  color={isAtRiskOfLiquidation ? \"red\" : \"#FFF\"}\n                  fontSize=\"large\"\n                  fontWeight=\"bold\"\n                >\n                  {!!ratio ? `${ratio.toFixed(1)}%` : \"0%\"}\n                </Td>\n                {/* Deposits By Asset */}\n                {/* Lend Balance */}\n                <Td textAlign=\"right\">\n                  {fusePoolData?.assets.map(\n                    (asset: USDPricedFuseAsset) =>\n                      asset.supplyBalanceUSD > 0 && (\n                        <Box mt={2}>\n                          <AssetContainer\n                            asset={asset}\n                            tokenData={tokensDataMap[asset.underlyingToken]}\n                          />\n                        </Box>\n                      )\n                  )}\n                </Td>\n                {/* Borrow Balance */}\n                <Td textAlign=\"right\">\n                  {fusePoolData?.assets.map(\n                    (asset: USDPricedFuseAsset) =>\n                      asset.borrowBalanceUSD > 0 && (\n                        <Box mt={2}>\n                          <AssetContainer\n                            asset={asset}\n                            type={AssetContainerType.BORROW}\n                            tokenData={tokensDataMap[asset.underlyingToken]}\n                          />\n                        </Box>\n                      )\n                  )}\n                </Td>\n                {/* Lend Borrow rates */}\n                <Td textAlign=\"right\">\n                  {fusePoolData?.assets.map(\n                    (asset: USDPricedFuseAsset) =>\n                      (asset.supplyBalanceUSD > 0 ||\n                        asset.borrowBalanceUSD > 0) && (\n                        <Box mt={4}>\n                          <AssetContainer\n                            asset={asset}\n                            type={AssetContainerType.RATES}\n                            tokenData={tokensDataMap[asset.underlyingToken]}\n                          />\n                        </Box>\n                      )\n                  )}\n                </Td>\n              </Tr>\n            );\n          })}\n          {/* Totals */}\n          <Tr fontWeight={hasDeposits ? \"bold\" : \"normal\"}>\n            <Td>\n              <Text>Total</Text>\n            </Td>\n\n            <Td textAlign=\"right\"></Td>\n\n            <Td textAlign=\"right\">\n              <Text>{smallUsdFormatter(totalSupplyBalanceUSD)}</Text>\n            </Td>\n\n            <Td textAlign=\"right\">\n              <Text>-{smallUsdFormatter(totalBorrowBalanceUSD)}</Text>\n            </Td>\n\n            <Td textAlign=\"right\"></Td>\n          </Tr>\n        </Tbody>\n      </Table>\n    </motion.div>\n  );\n};\n\nconst AssetContainer = ({\n  asset,\n  type = AssetContainerType.SUPPLY,\n  tokenData,\n}: {\n  asset: USDPricedFuseAsset;\n  type?: AssetContainerType;\n  tokenData: TokenData;\n}) => {\n  const supplyAmount = asset.supplyBalance / 10 ** asset.underlyingDecimals;\n  const borrowAmount = asset.borrowBalance / 10 ** asset.underlyingDecimals;\n  const formattedSupplyAmount =\n    supplyAmount.toFixed(2) + ` ${asset.underlyingSymbol}`;\n  const formattedBorrowAmount =\n    borrowAmount.toFixed(2) + ` ${asset.underlyingSymbol}`;\n  const supplyBalanceUSD = shortUsdFormatter(asset.supplyBalanceUSD);\n  const borrowBalanceUSD = shortUsdFormatter(asset.borrowBalanceUSD);\n\n  const borrowRate = convertMantissaToAPY(\n    asset.borrowRatePerBlock,\n    365\n  ).toFixed(2);\n  const supplyRate = convertMantissaToAPY(\n    asset.supplyRatePerBlock,\n    365\n  ).toFixed(2);\n\n  return (\n    <>\n      <Column\n        mainAxisAlignment={\n          type === AssetContainerType.RATES ? \"space-around\" : \"center\"\n        }\n        crossAxisAlignment=\"flex-end\"\n      >\n        {/* Icon and Units */}\n        <Row\n          mainAxisAlignment=\"flex-end\"\n          crossAxisAlignment=\"center\"\n          width=\"90%\"\n        >\n          <Avatar\n            bg=\"#FFF\"\n            boxSize=\"30px\"\n            name={tokenData?.symbol ?? \"Loading...\"}\n            my=\"auto\"\n            mr=\"auto\"\n            src={\n              tokenData?.logoURL ??\n              \"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"\n            }\n          />\n          {/* Lend/borrow Supply */}\n          {type !== AssetContainerType.RATES && (\n            <>\n              <SimpleTooltip\n                label={`${\n                  type === AssetContainerType.BORROW\n                    ? borrowAmount\n                    : supplyAmount\n                } ${asset.underlyingSymbol}`}\n              >\n                <Text p={1} fontSize=\"lg\" textAlign=\"right\">\n                  {type === AssetContainerType.BORROW\n                    ? formattedBorrowAmount\n                    : formattedSupplyAmount}\n                </Text>\n              </SimpleTooltip>\n            </>\n          )}\n          {/* Lend/borrow rates */}\n          {type === AssetContainerType.RATES && (\n            <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n              <Text p={1} fontSize=\"lg\">\n                {supplyRate}%\n              </Text>\n              <Text p={1} fontSize=\"2xl\">\n                /\n              </Text>\n              <Text p={1} fontSize=\"lg\">\n                {borrowRate}%\n              </Text>\n            </Row>\n          )}\n        </Row>\n        {/* USD Denomination */}\n        <Row\n          mainAxisAlignment=\"flex-end\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n        >\n          {type !== AssetContainerType.RATES && (\n            <Text p={1} fontSize=\"sm\" color=\"grey\">\n              {type === AssetContainerType.BORROW\n                ? borrowBalanceUSD\n                : supplyBalanceUSD}\n            </Text>\n          )}\n          {type === AssetContainerType.RATES && (\n            <Text p={1} fontSize=\"sm\" color=\"black\" visibility=\"hidden\">\n              Shhh\n            </Text>\n          )}\n        </Row>\n      </Column>\n    </>\n  );\n};\n\nexport default Fuse;\n"
  },
  {
    "path": "src/components/pages/Stats/StatsPage.tsx",
    "content": "import { useMemo, useState } from \"react\";\n\n// Components\nimport { Box, Heading } from \"@chakra-ui/react\";\nimport { QuestionOutlineIcon } from \"@chakra-ui/icons\";\nimport { Column, Row } from \"utils/chakraUtils\";\nimport { motion } from \"framer-motion\";\n\nimport { Header } from \"components/shared/Header\";\nimport SubNav from \"./StatsSubNav\";\n\nimport StatsTotalSection from \"./Totals/StatsTotalSection\";\nimport StatsFuseSection from \"./StatsFuseSection\";\nimport StatsPool2Section from \"./StatsPool2Section\";\nimport StatsEarnSection from \"./StatsEarnSection\";\nimport StatsTranchesSection from \"./StatsTranchesSection\";\nimport Footer from \"components/shared/Footer\";\n\n// Context\nimport { useRari } from \"context/RariContext\";\n\n// Hooks\nimport { useTranslation } from \"react-i18next\";\nimport { useIsSmallScreen } from \"hooks/useIsSmallScreen\";\nimport { smallUsdFormatter } from \"utils/bigUtils\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\nimport { SaffronProvider } from \"../Tranches/SaffronContext\";\n\nexport enum StatsSubNav {\n  TOTAL = \"TOTAL\",\n  FUSE = \"FUSE\",\n  EARN = \"EARN\",\n  POOL2 = \"POOL2\",\n  TRANCHES = \"TRANCHES\",\n}\n\nconst StatsPage = () => {\n  const { isAuthed } = useRari();\n  const { t } = useTranslation();\n  const isMobile = useIsSmallScreen();\n  const [subNav, setSubNav] = useState(StatsSubNav.TOTAL);\n\n  const [netDeposits, setNetDeposits] = useState(0);\n  const [netDebt, setNetDebt] = useState(0);\n\n  const netBalance = useMemo(() => {\n    return netDeposits - netDebt;\n  }, [netDeposits, netDebt]);\n\n  return (\n    <SaffronProvider>\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        color=\"#FFFFFF\"\n        mx=\"auto\"\n        width={isMobile ? \"100%\" : \"1000px\"}\n        height=\"100%\"\n        px={isMobile ? 4 : 0}\n      >\n        <Header isAuthed={isAuthed} />\n\n        <Column\n          width=\"100%\"\n          mainAxisAlignment=\"center\"\n          crossAxisAlignment=\"flex-start\"\n          mt=\"3rem\"\n          p={15}\n        >\n          <Row\n            mb={2}\n            pr={2}\n            py={1}\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n          >\n            <Heading size=\"lg\">{t(\"Net Balance\")}:</Heading>\n            <motion.div\n              initial={{ opacity: 0, y: -40 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: 40 }}\n            >\n              <Heading ml={2} size=\"lg\">\n                {smallUsdFormatter(netBalance) ?? smallUsdFormatter(0)}\n              </Heading>\n            </motion.div>\n            <SimpleTooltip\n              label={`${smallUsdFormatter(netDeposits)} ${t(\n                \"Deposits\"\n              )} - ${smallUsdFormatter(netDebt)} ${t(\"Debt\")}`}\n              placement=\"right\"\n            >\n              <Box\n                mainAxisAlignment=\"center\"\n                crossAxisAlignment=\"center\"\n                ml={4}\n                my=\"auto\"\n                _hover={{ color: \"gray\", cursor: \"auto\" }}\n                display=\"flex\"\n                justifyContent=\"center\"\n                alignItems=\"center\"\n              >\n                <QuestionOutlineIcon color=\"currentColor\" />\n              </Box>\n            </SimpleTooltip>\n          </Row>\n\n          <SubNav isMobile={isMobile} subNav={subNav} setSubNav={setSubNav} />\n          <Box width=\"100%\">\n            {subNav === StatsSubNav.TOTAL && (\n              <StatsTotalSection\n                setNetDebt={setNetDebt}\n                setNetDeposits={setNetDeposits}\n              />\n            )}\n            {subNav === StatsSubNav.FUSE && <StatsFuseSection />}\n            {subNav === StatsSubNav.POOL2 && <StatsPool2Section />}\n            {subNav === StatsSubNav.EARN && <StatsEarnSection />}\n            {subNav === StatsSubNav.TRANCHES && <StatsTranchesSection />}\n          </Box>\n        </Column>\n        <Footer />\n      </Column>\n    </SaffronProvider>\n  );\n};\n\nexport default StatsPage;\n"
  },
  {
    "path": "src/components/pages/Stats/StatsPool2Section.tsx",
    "content": "import { useMemo } from \"react\";\nimport {\n  Box,\n  Table,\n  Text,\n  Thead,\n  Tbody,\n  Tr,\n  Th,\n  Td,\n  Avatar,\n} from \"@chakra-ui/react\";\nimport { motion } from \"framer-motion\";\nimport { QuestionOutlineIcon } from \"@chakra-ui/icons\";\n\n// Hooks\nimport { usePool2APR } from \"hooks/pool2/usePool2APR\";\nimport { usePool2UnclaimedRGT } from \"hooks/pool2/usePool2UnclaimedRGT\";\nimport { usePool2Balance } from \"hooks/pool2/usePool2Balance\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\nimport { Row } from \"utils/chakraUtils\";\nimport { smallUsdFormatter } from \"utils/bigUtils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Earn = () => {\n  const { t } = useTranslation();\n\n  const apr = usePool2APR();\n  const earned = usePool2UnclaimedRGT();\n  const balance = usePool2Balance();\n\n  const balanceSLP = balance?.hasDeposited ? balance.SLP!.toFixed(4) : \"0.0000\";\n  const balanceETH = balance?.hasDeposited ? balance.eth!.toFixed(2) : \"0.0000\";\n  const balanceRGT = balance?.hasDeposited ? balance.rgt!.toFixed(2) : \"0.0000\";\n  const balanceUSD = balance?.hasDeposited\n    ? smallUsdFormatter(balance.balanceUSD)\n    : \"$0\";\n\n  const hasDeposits = useMemo(() => earned! > 0, [earned]);\n\n  return (\n    <motion.div\n      key=\"pool2\"\n      style={{ width: \"100%\" }}\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n    >\n      <Table variant=\"simple\">\n        <Thead color=\"white\">\n          <Tr>\n            <Th color=\"white\">{t(\"Pool\")}</Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"APY\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Deposits\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"RGT Earned\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Growth\")}\n            </Th>\n          </Tr>\n        </Thead>\n        <Tbody>\n          <>\n            {hasDeposits && (\n              <Tr>\n                <Td>\n                  <Row\n                    mainAxisAlignment=\"flex-start\"\n                    crossAxisAlignment=\"center\"\n                  >\n                    <Box>\n                      <Avatar\n                        bg=\"#FFF\"\n                        boxSize=\"30px\"\n                        name={\"RGT\"}\n                        src=\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD291E7a03283640FDc51b121aC401383A46cC623/logo.png\"\n                      />\n                      <Avatar\n                        bg=\"#FFF\"\n                        boxSize=\"30px\"\n                        name={\"ETH\"}\n                        src=\"https://icons.iconarchive.com/icons/cjdowner/cryptocurrency-flat/64/Ethereum-ETH-icon.png\"\n                      />\n                    </Box>\n                    <Box ml={3}>RGT-ETH</Box>\n                  </Row>\n                </Td>\n                <Td textAlign=\"right\">{apr}%</Td>\n                <Td textAlign=\"right\">\n                  <Row\n                    mainAxisAlignment=\"flex-start\"\n                    crossAxisAlignment=\"center\"\n                  >\n                    <Box>{balanceSLP} RGT-ETH</Box>\n                    <SimpleTooltip\n                      label={`${balanceRGT} RGT - ${balanceETH} ETH  `}\n                      placement=\"top-start\"\n                    >\n                      <Box\n                        ml={4}\n                        my=\"auto\"\n                        _hover={{ color: \"gray\", cursor: \"auto\" }}\n                      >\n                        <QuestionOutlineIcon color=\"currentColor\" />\n                      </Box>\n                    </SimpleTooltip>\n                  </Row>\n                </Td>\n                <Td textAlign=\"right\">{earned?.toFixed(2)} RGT</Td>\n                <Td textAlign=\"right\">0%</Td>\n              </Tr>\n            )}\n\n            {/* Todo (sharad) - implement totals for apy and growth */}\n            <Tr>\n              <Td>\n                <Text fontWeight={hasDeposits ? \"bold\" : \"normal\"}>Total</Text>\n              </Td>\n\n              <Td textAlign=\"right\">\n                <Text fontWeight={hasDeposits ? \"bold\" : \"normal\"}>\n                  {parseFloat(balanceSLP) > 0 ? `${apr}%` : null}\n                </Text>\n              </Td>\n\n              <Td textAlign=\"right\">\n                <Text fontWeight={hasDeposits ? \"bold\" : \"normal\"}>\n                  {balanceUSD}\n                </Text>\n              </Td>\n\n              <Td textAlign=\"right\">\n                <Text fontWeight={hasDeposits ? \"bold\" : \"normal\"}>\n                  {earned?.toFixed(2)} RGT\n                </Text>\n              </Td>\n\n              <Td textAlign=\"right\"> </Td>\n            </Tr>\n          </>\n        </Tbody>\n      </Table>\n    </motion.div>\n  );\n};\n\nexport default Earn;\n"
  },
  {
    "path": "src/components/pages/Stats/StatsSubNav.tsx",
    "content": "import { Dispatch, SetStateAction } from \"react\";\n\n// Components\nimport { Column, Row } from \"utils/chakraUtils\";\nimport { Box, Heading } from \"@chakra-ui/react\";\n\nimport {\n  StatsLogoPNGWhite,\n  StatsLogoPNGGreen,\n  FuseLogoPNGWhite,\n  FuseLogoPNGGreen,\n  EarnLogoPNGWhite,\n  EarnLogoPNGGreen,\n  Pool2LogoPNGWhite,\n  Pool2LogoPNGGreen,\n  TranchesLogoPNGWhite,\n  TranchesLogoPNGGreen,\n} from \"components/shared/Logos\";\n\n// Hooks\nimport { useTranslation } from \"react-i18next\";\n\n// Types\nimport { StatsSubNav } from \"./StatsPage\";\n\nconst SubNav = ({\n  isMobile,\n  subNav,\n  setSubNav,\n}: {\n  isMobile: boolean;\n  subNav: StatsSubNav;\n  setSubNav: Dispatch<SetStateAction<StatsSubNav>>;\n}) => {\n  return (\n    <>\n      <Column\n        expand\n        mainAxisAlignment=\"center\"\n        crossAxisAlignment={isMobile ? \"center\" : \"flex-start\"}\n        textAlign=\"center\"\n        py={4}\n      >\n        <Row\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          width=\"100%\"\n          py={2}\n        >\n          <SubNavItem\n            title=\"Total Overview\"\n            setActive={() => setSubNav(StatsSubNav.TOTAL)}\n            active={subNav === StatsSubNav.TOTAL}\n            subNav={StatsSubNav.TOTAL}\n          />\n          <SubNavItem\n            title=\"Fuse\"\n            setActive={() => setSubNav(StatsSubNav.FUSE)}\n            active={subNav === StatsSubNav.FUSE}\n            subNav={StatsSubNav.FUSE}\n          />\n          <SubNavItem\n            title=\"Earn\"\n            setActive={() => setSubNav(StatsSubNav.EARN)}\n            subNav={StatsSubNav.EARN}\n            active={subNav === StatsSubNav.EARN}\n          />\n          <SubNavItem\n            title=\"Pool2\"\n            setActive={() => setSubNav(StatsSubNav.POOL2)}\n            subNav={StatsSubNav.POOL2}\n            active={subNav === StatsSubNav.POOL2}\n          />\n          <SubNavItem\n            title=\"Tranches\"\n            setActive={() => setSubNav(StatsSubNav.TRANCHES)}\n            subNav={StatsSubNav.TRANCHES}\n            active={subNav === StatsSubNav.TRANCHES}\n          />\n        </Row>\n      </Column>\n    </>\n  );\n};\n\nconst SubNavItem = ({\n  title,\n  setActive,\n  subNav,\n  active,\n}: {\n  title: string;\n  setActive: () => void;\n  subNav: StatsSubNav;\n  active: boolean;\n}) => {\n  const { t } = useTranslation();\n\n  let logo;\n  switch (subNav) {\n    case StatsSubNav.TRANCHES:\n      logo = !active ? <TranchesLogoPNGWhite /> : <TranchesLogoPNGGreen />;\n      break;\n    case StatsSubNav.POOL2:\n      logo = !active ? (\n        <Pool2LogoPNGWhite height=\"18px\" />\n      ) : (\n        <Pool2LogoPNGGreen height=\"18px\" />\n      );\n      break;\n    case StatsSubNav.EARN:\n      logo = !active ? <EarnLogoPNGWhite /> : <EarnLogoPNGGreen />;\n      break;\n    case StatsSubNav.FUSE:\n      logo = !active ? <FuseLogoPNGWhite /> : <FuseLogoPNGGreen />;\n      break;\n    case StatsSubNav.TOTAL:\n      logo = !active ? <StatsLogoPNGWhite /> : <StatsLogoPNGGreen />;\n      break;\n  }\n\n  return (\n    <Box\n      mr={7}\n      height=\"100%\"\n      color={active ? \"#00C628\" : \"white\"}\n      _hover={{\n        color: !active && \"grey\",\n        cursor: \"pointer\",\n      }}\n      onClick={setActive}\n    >\n      <Row mainAxisAlignment=\"center\" crossAxisAlignment=\"center\">\n        <Box>{logo}</Box>\n        <Heading size=\"md\" ml={2}>\n          {t(title)}\n        </Heading>\n      </Row>\n    </Box>\n  );\n};\n\nexport default SubNav;\n"
  },
  {
    "path": "src/components/pages/Stats/StatsTranchesSection.tsx",
    "content": "import { useMemo } from \"react\";\nimport { Box, Table, Text, Thead, Tbody, Tr, Th, Td } from \"@chakra-ui/react\";\nimport { motion } from \"framer-motion\";\n\n// Hooks\nimport { Row } from \"utils/chakraUtils\";\nimport {\n  useMySaffronData,\n  usePrincipal,\n  TranchePool,\n  TrancheRating,\n  useEstimatedSFI,\n  usePrincipalBalance,\n  SaffronTranchePool,\n} from \"hooks/tranches/useSaffronData\";\nimport { smallUsdFormatter } from \"utils/bigUtils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Earn = () => {\n  const { t } = useTranslation();\n\n  const mySaffronData: SaffronTranchePool[] = useMySaffronData();\n  const daiSPrincipal = usePrincipal(TranchePool.DAI, TrancheRating.S);\n  const daiAPrincipal = usePrincipal(TranchePool.DAI, TrancheRating.A);\n  const estimatedSFI = useEstimatedSFI();\n  const totalPrincipalFormatted = usePrincipalBalance();\n  const totalPrincipal: number = totalPrincipalFormatted\n    ? parseFloat(totalPrincipalFormatted?.replace(\",\", \"\").replace(\"$\", \"\"))\n    : 0;\n  const hasDeposits = useMemo(() => totalPrincipal > 0, [totalPrincipal]);\n\n  return (\n    <motion.div\n      key=\"pool2\"\n      style={{ width: \"100%\" }}\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n    >\n      <Table variant=\"simple\">\n        <Thead color=\"white\">\n          <Tr>\n            <Th color=\"white\">{t(\"Pool\")}</Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"APY\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Deposits\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Est. SFI Earnings\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Growth\")}\n            </Th>\n          </Tr>\n        </Thead>\n        <Tbody>\n          <>\n            {/* DAI S Pool */}\n            {hasDeposits && (\n              <>\n                <Tr>\n                  <Td textAlign=\"right\">\n                    <Row\n                      mainAxisAlignment=\"flex-start\"\n                      crossAxisAlignment=\"center\"\n                    >\n                      <Box>\n                        <Text textAlign=\"right\"> {t(\"DAI-S\")} </Text>\n                      </Box>\n                    </Row>\n                  </Td>\n                  <Td textAlign=\"right\">\n                    <Text>\n                      {\n                        mySaffronData?.[0]?.tranches?.[TrancheRating.S]?.[\n                          \"total-apy\"\n                        ]\n                      }\n                      %\n                    </Text>\n                  </Td>\n                  <Td textAlign=\"right\">\n                    <Text>\n                      {daiSPrincipal} {t(\"DAI\")}\n                    </Text>\n                  </Td>\n                  <Td textAlign=\"right\">\n                    <Text>{estimatedSFI?.formattedSPoolSFIEarned}</Text>\n                  </Td>\n                  <Td textAlign=\"right\">\n                    <Text textAlign=\"right\">{t(\"N/A\")}</Text>\n                  </Td>\n                </Tr>\n                <Tr>\n                  <Td>\n                    <Row\n                      mainAxisAlignment=\"flex-start\"\n                      crossAxisAlignment=\"center\"\n                    >\n                      <Box>\n                        <Text textAlign=\"right\"> {t(\"DAI-A\")} </Text>\n                      </Box>\n                    </Row>\n                  </Td>\n                  <Td>\n                    <Text textAlign=\"right\">\n                      {\n                        mySaffronData?.[0]?.tranches?.[TrancheRating.A]?.[\n                          \"total-apy\"\n                        ]\n                      }\n                      %\n                    </Text>\n                  </Td>\n                  <Td>\n                    <Text textAlign=\"right\">\n                      {daiAPrincipal} {t(\"DAI\")}\n                    </Text>\n                  </Td>\n                  <Td>\n                    {\" \"}\n                    <Text textAlign=\"right\">\n                      {estimatedSFI?.formattedAPoolSFIEarned}\n                    </Text>{\" \"}\n                  </Td>\n                  <Td>\n                    <Text textAlign=\"right\">{t(\"N/A\")}</Text>\n                  </Td>\n                </Tr>\n              </>\n            )}\n            {/* Totals */}\n            <Tr fontWeight={hasDeposits ? \"bold\" : \"normal\"}>\n              <Td>\n                <Text>{t(\"Total\")}</Text>\n              </Td>\n              <Td>\n                <Text textAlign=\"right\"></Text>\n              </Td>\n              <Td>\n                <Text textAlign=\"right\">\n                  {smallUsdFormatter(totalPrincipal) ?? 0}\n                </Text>\n              </Td>\n              <Td>\n                <Text textAlign=\"right\">\n                  {estimatedSFI?.formattedTotalSFIEarned ?? \"0 SFI\"}\n                </Text>\n              </Td>\n              <Td>\n                <Text textAlign=\"right\" />\n              </Td>\n            </Tr>\n          </>\n        </Tbody>\n      </Table>\n    </motion.div>\n  );\n};\n\nexport default Earn;\n"
  },
  {
    "path": "src/components/pages/Stats/Totals/EarnRow.tsx",
    "content": "import { Box, Td, Text } from \"@chakra-ui/react\";\nimport { motion } from \"framer-motion\";\n\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\nimport { EarnLogoPNGWhite } from \"components/shared/Logos\";\nimport { useTranslation } from \"react-i18next\";\nimport { PoolInterface } from \"constants/pools\";\n\nconst EarnRow = ({ poolsInfo }: { poolsInfo: any }) => {\n  const { t } = useTranslation();\n  return (\n    <motion.tr\n      initial={{ opacity: 0, y: -40 }}\n      animate={{ opacity: 1, y: 0 }}\n      exit={{ opacity: 0, y: 40 }}\n    >\n      <Td>\n        <SimpleTooltip label=\"Earn\" placement=\"right\">\n          <Box width=\"30px\">\n            <EarnLogoPNGWhite boxSize=\"26px\" />\n          </Box>\n        </SimpleTooltip>\n      </Td>\n      <Td textAlign=\"right\">\n        {poolsInfo.map(({ poolInfo }: { poolInfo: PoolInterface }) => (\n          <Text mb={3} key={poolInfo.title}>\n            {poolInfo.title}\n          </Text>\n        ))}\n      </Td>\n      <Td textAlign=\"right\">\n        {poolsInfo.map(\n          (\n            { formattedPoolBalance }: { formattedPoolBalance: string },\n            i: number\n          ) => (\n            <Text mb={3} key={i}>\n              {formattedPoolBalance}\n            </Text>\n          )\n        )}\n      </Td>\n      {/* Todo (sharad) - implement RGT earned in poolInfo */}\n      <Td textAlign=\"right\">\n        <Text mb={3}>{t(\"N/A\")}</Text>\n        <Text mb={3}>{t(\"N/A\")}</Text>\n        <Text mb={3}>{t(\"N/A\")}</Text>\n      </Td>\n      <Td textAlign=\"right\">\n        {poolsInfo.map(\n          (\n            {\n              formattedPoolInterestEarned,\n            }: { formattedPoolInterestEarned: string },\n            i: number\n          ) => (\n            <Text mb={3} key={i}>\n              {formattedPoolInterestEarned}\n            </Text>\n          )\n        )}\n      </Td>\n    </motion.tr>\n  );\n};\n\nexport default EarnRow;\n"
  },
  {
    "path": "src/components/pages/Stats/Totals/FuseRow.tsx",
    "content": "import { useMemo } from \"react\";\nimport { Box, Td, Text } from \"@chakra-ui/react\";\nimport { motion } from \"framer-motion\";\nimport { smallStringUsdFormatter } from \"utils/bigUtils\";\nimport { FuseLogoPNGWhite } from \"components/shared/Logos\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\nimport { useTranslation } from \"react-i18next\";\nimport { MergedPool } from \"hooks/fuse/useFusePools\";\nimport { FusePoolData } from \"utils/fetchFusePoolData\";\n\nconst FuseRow = ({\n  filteredPoolsData,\n  fusePoolsData,\n}: {\n  filteredPoolsData: MergedPool[] | null;\n  fusePoolsData: FusePoolData[];\n}) => {\n  const singleRow = useMemo(() => fusePoolsData?.length === 1, [fusePoolsData]);\n  const mb = singleRow ? null : 3;\n\n  const { t } = useTranslation();\n\n  return (\n    <motion.tr\n      initial={{ opacity: 0, y: -40 }}\n      animate={{ opacity: 1, y: 0 }}\n      exit={{ opacity: 0, y: 40 }}\n    >\n      <Td textAlign=\"center\">\n        <SimpleTooltip label=\"Fuse\" placement=\"right\">\n          <Box width=\"30px\">\n            <FuseLogoPNGWhite boxSize=\"26px\" />\n          </Box>\n        </SimpleTooltip>\n      </Td>\n      <Td textAlign=\"right\">\n        {filteredPoolsData?.map(({ id }) => (\n          <Text mb={mb ?? \"0\"} key={id}>\n            {id}\n          </Text>\n        ))}\n      </Td>\n      <Td textAlign=\"right\">\n        {fusePoolsData?.map(({ comptroller, totalSupplyBalanceUSD }) => (\n          <Text mb={mb ?? \"0\"} key={comptroller}>\n            {smallStringUsdFormatter(totalSupplyBalanceUSD)}\n          </Text>\n        ))}\n      </Td>\n      {/* Todo (sharad) - implement RGT earned in poolInfo */}\n      <Td textAlign=\"right\">\n        {filteredPoolsData?.map(({ id }) => (\n          <Text mb={mb ?? \"0\"} key={id}>\n            {t(\"N/A\")}\n          </Text>\n        ))}\n      </Td>\n      <Td textAlign=\"right\">\n        {filteredPoolsData?.map(({ id }) => (\n          <Text mb={mb ?? \"0\"} key={id}>\n            {t(\"N/A\")}\n          </Text>\n        ))}\n      </Td>\n    </motion.tr>\n  );\n};\n\nexport default FuseRow;\n"
  },
  {
    "path": "src/components/pages/Stats/Totals/Pool2Row.tsx",
    "content": "import { Box, Td } from \"@chakra-ui/react\";\nimport { motion } from \"framer-motion\";\nimport { Pool2LogoPNGWhite } from \"components/shared/Logos\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Pool2Row = ({\n  apr,\n  earned,\n  balance,\n}: {\n  apr: any;\n  earned: any;\n  balance: any;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <motion.tr\n      initial={{ opacity: 0, y: -40 }}\n      animate={{ opacity: 1, y: 0 }}\n      exit={{ opacity: 0, y: 40 }}\n    >\n      <Td>\n        <SimpleTooltip label={t(\"Pool2\")} placement=\"right\">\n          <Box width=\"30px\">\n            <Pool2LogoPNGWhite boxSize=\"25px\" />\n          </Box>\n        </SimpleTooltip>\n      </Td>\n      <Td textAlign=\"right\">{t(\"RGT-ETH\")}</Td>\n      <Td textAlign=\"right\">\n        {balance?.SLP?.toFixed(2)} {t(\"RGT-ETH\")}\n      </Td>\n      {/* Todo (sharad) - implement RGT earned in poolInfo */}\n      <Td textAlign=\"right\">\n        {earned?.toFixed(2)} {t(\"RGT\")}\n      </Td>\n      <Td textAlign=\"right\">{t(\"N/A\")}</Td>\n    </motion.tr>\n  );\n};\n\nexport default Pool2Row;\n"
  },
  {
    "path": "src/components/pages/Stats/Totals/StatsTotalSection.tsx",
    "content": "import { useMemo, useEffect } from \"react\";\nimport { Table, Thead, Tbody, Tr, Th, Td, Text } from \"@chakra-ui/react\";\nimport { motion } from \"framer-motion\";\n\n// Hooks\nimport {\n  AggregatePoolsInfoReturn,\n  useAggregatePoolInfos,\n} from \"hooks/usePoolInfo\";\nimport { useFusePools } from \"hooks/fuse/useFusePools\";\nimport { useFusePoolsData } from \"hooks/useFusePoolData\";\nimport { usePool2APR } from \"hooks/pool2/usePool2APR\";\nimport { usePool2UnclaimedRGT } from \"hooks/pool2/usePool2UnclaimedRGT\";\nimport { usePool2Balance } from \"hooks/pool2/usePool2Balance\";\nimport {\n  usePrincipal,\n  TranchePool,\n  TrancheRating,\n  useEstimatedSFI,\n  usePrincipalBalance,\n  UseEstimatedSFIReturn,\n} from \"hooks/tranches/useSaffronData\";\n\n// Components\nimport EarnRow from \"./EarnRow\";\nimport FuseRow from \"./FuseRow\";\nimport Pool2Row from \"./Pool2Row\";\nimport { smallUsdFormatter } from \"utils/bigUtils\";\nimport TranchesRow from \"./TranchesRow\";\nimport { FusePoolData } from \"utils/fetchFusePoolData\";\nimport { useTranslation } from \"react-i18next\";\n\nconst StatsTotalSection = ({\n  setNetDeposits,\n  setNetDebt,\n}: {\n  setNetDeposits: (input: number) => void;\n  setNetDebt: (input: number) => void;\n}) => {\n  const { t } = useTranslation();\n\n  // Earn\n  const { totals, aggregatePoolsInfo }: AggregatePoolsInfoReturn =\n    useAggregatePoolInfos();\n  const hasDepositsInEarn = aggregatePoolsInfo?.some(\n    (p) => !p?.poolBalance?.isZero()\n  );\n\n  // Fuse\n  const { filteredPools: filteredFusePools } = useFusePools(\"my-pools\");\n  const poolIds: number[] = filteredFusePools?.map(({ id }) => id) ?? [];\n  const fusePoolsData: FusePoolData[] | null = useFusePoolsData(poolIds);\n\n  // Pool2\n  const apr = usePool2APR();\n  const earned = usePool2UnclaimedRGT();\n  const balance = usePool2Balance();\n  const hasDepositsInPool2 = !!balance?.SLP;\n\n  // Tranches\n  const daiSPrincipal: string | undefined = usePrincipal(\n    TranchePool.DAI,\n    TrancheRating.S\n  );\n  const daiAPrincipal: string | undefined = usePrincipal(\n    TranchePool.DAI,\n    TrancheRating.A\n  );\n  const totalPrincipal: string | undefined = usePrincipalBalance();\n  const parsedTotalPrincipal: number = totalPrincipal\n    ? parseFloat(totalPrincipal?.replace(\",\", \"\").replace(\"$\", \"\"))\n    : 0;\n  const estimatedSFI: UseEstimatedSFIReturn | undefined = useEstimatedSFI();\n  const hasDepositsInTranches = useMemo(\n    () => parsedTotalPrincipal > 0 ?? false,\n    [parsedTotalPrincipal]\n  );\n\n  // Total Deposits\n  const totalDepositsUSD = useMemo(() => {\n    const { totalSupplyBalanceUSD: fuseTotal }: FusePoolData =\n      fusePoolsData?.reduce((a, b) => {\n        return {\n          totalSupplyBalanceUSD:\n            a.totalSupplyBalanceUSD + b.totalSupplyBalanceUSD,\n        } as FusePoolData;\n      }) ?? ({ totalSupplyBalanceUSD: 0 } as FusePoolData);\n\n    const vaultTotal = totals?.balance ?? 0;\n\n    const pool2Total = balance?.balanceUSD ?? 0;\n\n    const tranchesTotal = parsedTotalPrincipal ?? 0;\n\n    const total = fuseTotal + vaultTotal + pool2Total + tranchesTotal;\n\n    return total;\n  }, [totals, fusePoolsData, balance, parsedTotalPrincipal]);\n\n  // Total debt - todo: refactor into the `useFusePoolsData` hook\n  const totalDebtUSD = useMemo(() => {\n    const { totalBorrowBalanceUSD }: FusePoolData =\n      fusePoolsData?.reduce((a, b) => {\n        return {\n          totalBorrowBalanceUSD:\n            a.totalBorrowBalanceUSD + b.totalBorrowBalanceUSD,\n        } as FusePoolData;\n      }) ?? ({ totalBorrowBalanceUSD: 0 } as FusePoolData);\n    return totalBorrowBalanceUSD;\n  }, [fusePoolsData]);\n\n  useEffect(() => {\n    if (totalDepositsUSD && !Number.isNaN(totalDepositsUSD))\n      setNetDeposits(totalDepositsUSD);\n    if (totalDebtUSD && !Number.isNaN(totalDebtUSD)) setNetDebt(totalDebtUSD);\n  }, [totalDepositsUSD, totalDebtUSD, setNetDeposits, setNetDebt]);\n\n  const earnedHeaderText = hasDepositsInTranches\n    ? \"RGT + SFI Earned\"\n    : \"RGT Earned\";\n\n  return (\n    <motion.div\n      key=\"totals\"\n      style={{ width: \"100%\" }}\n      initial={{ opacity: 0 }}\n      animate={{ opacity: 1 }}\n      exit={{ opacity: 0 }}\n    >\n      <Table variant=\"simple\">\n        <Thead color=\"white\">\n          <Tr>\n            <Th color=\"white\">{t(\"Product\")}</Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Pool\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(\"Deposits\")}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              {t(earnedHeaderText)}\n            </Th>\n            <Th color=\"white\" textAlign=\"right\">\n              Interest Earned\n            </Th>\n          </Tr>\n        </Thead>\n\n        <Tbody>\n          {/* Fuse section */}\n          {fusePoolsData && (\n            <FuseRow\n              fusePoolsData={fusePoolsData}\n              filteredPoolsData={filteredFusePools}\n            />\n          )}\n          {/* earn section */}\n          {hasDepositsInEarn && <EarnRow poolsInfo={aggregatePoolsInfo} />}\n          {/* Pool2 Section */}\n          {hasDepositsInPool2 && (\n            <Pool2Row apr={apr} earned={earned} balance={balance} />\n          )}\n          {/* Tranches */}\n          {hasDepositsInTranches && (\n            <TranchesRow\n              daiSPrincipal={daiSPrincipal}\n              daiAPrincipal={daiAPrincipal}\n              estimatedSFI={estimatedSFI}\n            />\n          )}\n          {/* Todo (sharad) - implement totals for apy and growth */}\n          <motion.tr\n            initial={{ opacity: 0, y: -40 }}\n            animate={{ opacity: 1, y: 0 }}\n            exit={{ opacity: 0, y: 40 }}\n          >\n            <Td fontWeight=\"bold\">{t(\"Total\")}</Td>\n            <Td textAlign=\"right\"></Td>\n            <Td textAlign=\"right\">\n              <Text fontWeight=\"bold\">\n                {smallUsdFormatter(totalDepositsUSD)}\n              </Text>\n            </Td>\n            <Td textAlign=\"right\">\n              <Text fontWeight=\"bold\">\n                {earned?.toFixed(2)} RGT\n                {hasDepositsInTranches &&\n                  ` + ${estimatedSFI?.formattedTotalSFIEarned}`}\n              </Text>\n            </Td>\n            <Td textAlign=\"right\">\n              <Text fontWeight=\"bold\">{totals?.interestEarned}</Text>\n            </Td>\n          </motion.tr>\n        </Tbody>\n      </Table>\n    </motion.div>\n  );\n};\n\nexport default StatsTotalSection;\n"
  },
  {
    "path": "src/components/pages/Stats/Totals/TranchesRow.tsx",
    "content": "import { Box, Td, Text } from \"@chakra-ui/react\";\nimport { motion } from \"framer-motion\";\nimport { Column } from \"utils/chakraUtils\";\nimport { TranchesLogoPNGWhite } from \"components/shared/Logos\";\nimport { SimpleTooltip } from \"components/shared/SimpleTooltip\";\nimport { useTranslation } from \"react-i18next\";\nimport { UseEstimatedSFIReturn } from \"hooks/tranches/useSaffronData\";\n\nconst TranchesRow = ({\n  estimatedSFI,\n  daiSPrincipal,\n  daiAPrincipal,\n}: {\n  estimatedSFI: UseEstimatedSFIReturn | undefined;\n  daiSPrincipal: string | undefined;\n  daiAPrincipal: string | undefined;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <motion.tr\n      initial={{ opacity: 0, y: -40 }}\n      animate={{ opacity: 1, y: 0 }}\n      exit={{ opacity: 0, y: 40 }}\n    >\n      <Td textAlign=\"center\">\n        <SimpleTooltip label=\"Tranches\" placement=\"right\">\n          <Box width=\"30px\">\n            <TranchesLogoPNGWhite boxSize=\"25px\" />\n          </Box>\n        </SimpleTooltip>\n      </Td>\n      <Td textAlign=\"right\">\n        <Column mainAxisAlignment=\"center\" crossAxisAlignment=\"flex-end\">\n          <Box mb={3} textAlign=\"right\">\n            <Text> {t(\"DAI-S\")} </Text>\n          </Box>\n          <Box mb={3} textAlign=\"right\">\n            <Text> {t(\"DAI-A\")} </Text>\n          </Box>\n        </Column>\n      </Td>\n      <Td textAlign=\"right\">\n        <Column mainAxisAlignment=\"center\" crossAxisAlignment=\"flex-end\">\n          <Box mb={3}>\n            <Text textAlign=\"left\"> {daiSPrincipal} DAI </Text>\n          </Box>\n          <Box mb={3}>\n            <Text textAlign=\"left\"> {daiAPrincipal} DAI </Text>\n          </Box>\n        </Column>\n      </Td>\n      {/* Todo (sharad) - implement RGT earned in poolInfo */}\n      <Td textAlign=\"right\">\n        <Column mainAxisAlignment=\"center\" crossAxisAlignment=\"flex-end\">\n          <Box mb={3}>\n            <Text textAlign=\"left\">\n              {\" \"}\n              {estimatedSFI?.formattedAPoolSFIEarned}\n            </Text>\n          </Box>\n          <Box mb={3}>\n            <Text textAlign=\"left\">\n              {estimatedSFI?.formattedSPoolSFIEarned}\n            </Text>\n          </Box>\n        </Column>\n      </Td>\n      <Td textAlign=\"right\">\n        <Column mainAxisAlignment=\"center\" crossAxisAlignment=\"flex-end\">\n          <Box mb={3}>\n            <Text>{t(\"N/A\")}</Text>\n          </Box>\n        </Column>\n      </Td>\n    </motion.tr>\n  );\n};\n\nexport default TranchesRow;\n"
  },
  {
    "path": "src/components/pages/Stats/index.ts",
    "content": "import StatsPage from \"./StatsPage\";\nexport default StatsPage;\n"
  },
  {
    "path": "src/components/pages/Tranches/SaffronContext.tsx",
    "content": "import { createContext, memo, useContext, useState, useEffect } from \"react\";\nimport { useRari } from \"../../../context/RariContext\";\nimport { Contract } from \"web3-eth-contract\";\nimport SaffronPoolABI from \"./SaffronPoolABI.json\";\nimport SaffronStrategyABI from \"./SaffronStrategyABI.json\";\nimport { SaffronStrategyAddress, SaffronPoolAddress } from \"constants/saffron\";\n\ninterface SaffronContextType {\n  saffronStrategy: Contract;\n  saffronPool: Contract;\n}\n\nexport const SaffronContext =\n  createContext<SaffronContextType | undefined>(undefined);\n\nexport const SaffronProvider = memo(({ children }) => {\n  const { rari } = useRari();\n\n  const [saffronStrategy, setSaffronStrategy] = useState(() => {\n    return new rari.web3.eth.Contract(\n      SaffronStrategyABI as any,\n      SaffronStrategyAddress\n    );\n  });\n\n  const [saffronPool, setSaffronPool] = useState(() => {\n    return new rari.web3.eth.Contract(\n      SaffronPoolABI as any,\n      SaffronPoolAddress\n    );\n  });\n\n  useEffect(() => {\n    setSaffronStrategy(\n      new rari.web3.eth.Contract(\n        SaffronStrategyABI as any,\n        SaffronStrategyAddress\n      )\n    );\n\n    setSaffronPool(\n      new rari.web3.eth.Contract(SaffronPoolABI as any, SaffronPoolAddress)\n    );\n  }, [rari]);\n\n  return (\n    <SaffronContext.Provider value={{ saffronStrategy, saffronPool }}>\n      {children}\n    </SaffronContext.Provider>\n  );\n});\n\nexport const useSaffronContracts = () => {\n  const context = useContext(SaffronContext);\n\n  if (context === undefined) {\n    throw new Error(\n      `useSaffronContracts must be used within a SaffronProvider`\n    );\n  }\n\n  return context;\n};\n"
  },
  {
    "path": "src/components/pages/Tranches/SaffronDepositModal/AmountSelect.tsx",
    "content": "import { useState } from \"react\";\nimport { Row, Column } from \"utils/chakraUtils\";\nimport SmallWhiteCircle from \"../../../../static/small-white-circle.png\";\n\nimport {\n  Heading,\n  Box,\n  Button,\n  Text,\n  Image,\n  Input,\n  useToast,\n} from \"@chakra-ui/react\";\nimport DashboardBox from \"../../../shared/DashboardBox\";\nimport { tokens } from \"../../../../utils/tokenUtils\";\n\nimport {\n  useTokenBalance,\n  fetchTokenBalance,\n} from \"../../../../hooks/useTokenBalance\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { ModalDivider } from \"../../../shared/Modal\";\nimport { useRari } from \"../../../../context/RariContext\";\n\nimport { BN } from \"../../../../utils/bigUtils\";\n\nimport BigNumber from \"bignumber.js\";\n\nimport { useQuery, useQueryClient } from \"react-query\";\n\nimport { HashLoader } from \"react-spinners\";\nimport {\n  TrancheRating,\n  TranchePool,\n  trancheRatingIndex,\n} from \"hooks/tranches/useSaffronData\";\n\nimport { useSaffronData } from \"hooks/tranches/useSaffronData\";\n\nimport ERC20ABI from \"../../../../rari-sdk/abi/ERC20.json\";\nimport { Token } from \"rari-tokens-generator\";\nimport { handleGenericError } from \"../../../../utils/errorHandling\";\n\nfunction noop() {}\n\nconst SFIToken = {\n  symbol: \"SFI\",\n  address: \"0xb753428af26e81097e7fd17f40c88aaa3e04902c\",\n  name: \"Spice\",\n  decimals: 18,\n  color: \"#C34535\",\n  overlayTextColor: \"#fff\",\n  logoURL:\n    \"https://assets.coingecko.com/coins/images/13117/small/sfi_red_250px.png?1606020144\",\n} as Token;\n\ninterface Props {\n  onClose: () => any;\n\n  tranchePool: TranchePool;\n  trancheRating: TrancheRating;\n}\n\nenum UserAction {\n  NO_ACTION,\n  WAITING_FOR_TRANSACTIONS,\n}\n\nexport const requiresSFIStaking = (trancheRating: TrancheRating) => {\n  return trancheRating === TrancheRating.A;\n};\n\nconst useSFIBalance = () => {\n  const { rari, address } = useRari();\n\n  const { data } = useQuery(\"sfiBalance\", async () => {\n    const stringBalance = await new rari.web3.eth.Contract(\n      ERC20ABI as any,\n      SFIToken.address\n    ).methods\n      .balanceOf(address)\n      .call();\n\n    return rari.web3.utils.toBN(stringBalance);\n  });\n\n  return { sfiBalance: data };\n};\n\nconst AmountSelect = ({ onClose, tranchePool, trancheRating }: Props) => {\n  const token = tokens[tranchePool];\n\n  const toast = useToast();\n\n  const queryClient = useQueryClient();\n\n  const { rari, address } = useRari();\n\n  const { data: poolTokenBalance } = useTokenBalance(token.address);\n\n  const { sfiBalance } = useSFIBalance();\n\n  const { saffronPool } = useSaffronData();\n\n  const { data: sfiRatio } = useQuery(tranchePool + \" sfiRatio\", async () => {\n    return parseFloat(\n      rari.web3.utils.fromWei(await saffronPool.methods.SFI_ratio().call())\n    );\n  });\n\n  const [userAction, setUserAction] = useState(UserAction.NO_ACTION);\n\n  const [userEnteredAmount, _setUserEnteredAmount] = useState(\"\");\n\n  const [amount, _setAmount] = useState<BigNumber | null>(\n    () => new BigNumber(0)\n  );\n\n  const updateAmount = (newAmount: string) => {\n    if (newAmount.startsWith(\"-\")) {\n      return;\n    }\n\n    _setUserEnteredAmount(newAmount);\n\n    try {\n      BigNumber.DEBUG = true;\n\n      // Try to set the amount to BigNumber(newAmount):\n      const bigAmount = new BigNumber(newAmount);\n      _setAmount(bigAmount.multipliedBy(10 ** token.decimals));\n    } catch (e) {\n      // If the number was invalid, set the amount to null to disable confirming:\n      _setAmount(null);\n    }\n\n    setUserAction(UserAction.NO_ACTION);\n  };\n\n  const amountIsValid = (() => {\n    if (amount === null || amount.isZero()) {\n      return false;\n    }\n\n    if (!poolTokenBalance) {\n      return false;\n    }\n\n    return amount.lte(poolTokenBalance.toString());\n  })();\n\n  const sfiRequired = (() => {\n    return amount && sfiRatio\n      ? amount\n          .div(10 ** token.decimals)\n          .multipliedBy((1 / sfiRatio) * 10 ** SFIToken.decimals)\n      : new BigNumber(0);\n  })();\n\n  const hasEnoughSFI = (() => {\n    if (!requiresSFIStaking(trancheRating)) {\n      return true;\n    }\n\n    if (!sfiBalance || sfiBalance.isZero()) {\n      return false;\n    }\n\n    return sfiRequired.lte(sfiBalance.toString());\n  })();\n\n  const { t } = useTranslation();\n\n  let depositOrWithdrawAlert;\n\n  if (amount === null) {\n    depositOrWithdrawAlert = t(\"Enter a valid amount to deposit.\");\n  } else if (amount.isZero()) {\n    depositOrWithdrawAlert = t(\"Enter a valid amount to deposit.\");\n  } else if (!poolTokenBalance || !sfiBalance) {\n    depositOrWithdrawAlert = t(\"Loading your balance of {{token}}...\", {\n      token: tranchePool,\n    });\n  } else if (!amountIsValid) {\n    depositOrWithdrawAlert = t(\"You don't have enough {{token}}.\", {\n      token: tranchePool,\n    });\n  } else if (!hasEnoughSFI) {\n    depositOrWithdrawAlert = t(\n      \"You need {{sfiMissing}} more SFI to deposit (1 SFI : {{sfiRatio}} {{tranchePool}})\",\n      {\n        sfiRatio: sfiRatio ?? \"?\",\n        tranchePool,\n        sfiMissing: sfiRequired\n          .minus(sfiBalance.toString())\n          .div(10 ** SFIToken.decimals)\n          .decimalPlaces(2)\n          .toString(),\n      }\n    );\n  } else {\n    depositOrWithdrawAlert = t(\"Click confirm to continue!\");\n  }\n\n  const onConfirm = async () => {\n    try {\n      //@ts-ignore\n      const amountBN = rari.web3.utils.toBN(amount!.decimalPlaces(0));\n\n      // Check A tranche cap\n      if (trancheRating === TrancheRating.A) {\n        const limits = await saffronPool.methods\n          .get_available_S_balances()\n          .call();\n\n        const amountLeftBeforeCap = new BigNumber(limits[0] + limits[1]).div(\n          10\n        );\n\n        if (amountLeftBeforeCap.lt(amountBN.toString())) {\n          toast({\n            title: \"Error!\",\n            description: `The A tranche is capped at 1/10 the liquidity of the S tranche. Currently you must deposit less than ${amountLeftBeforeCap\n              .div(10 ** token.decimals)\n              .decimalPlaces(2)\n              .toString()} ${\n              token.symbol\n            } or deposit into the S tranche (as more is deposited into S tranche, the cap on the A tranche increases).`,\n            status: \"error\",\n            duration: 18000,\n            isClosable: true,\n            position: \"top-right\",\n          });\n\n          return;\n        }\n      }\n\n      // They must have already seen the quote as the button to trigger this function is disabled while it's loading:\n      // This means they are now ready to start sending transactions:\n      setUserAction(UserAction.WAITING_FOR_TRANSACTIONS);\n\n      const poolAddress = saffronPool.options.address;\n\n      const SFIContract = new rari.web3.eth.Contract(\n        ERC20ABI as any,\n        SFIToken.address\n      );\n\n      const trancheToken = new rari.web3.eth.Contract(\n        ERC20ABI as any,\n        token.address\n      );\n\n      const hasApprovedEnoughSFI = requiresSFIStaking(trancheRating)\n        ? rari.web3.utils\n            .toBN(\n              await SFIContract.methods.allowance(address, poolAddress).call()\n            )\n            .gte(amountBN)\n        : true;\n\n      const hasApprovedEnoughPoolToken = rari.web3.utils\n        .toBN(await trancheToken.methods.allowance(address, poolAddress).call())\n        .gte(amountBN);\n\n      if (!hasApprovedEnoughSFI) {\n        // Approve the amount of poolToken because it will always be more than sfiRequired\n        const txn = SFIContract.methods\n          .approve(poolAddress, amountBN.toString())\n          .send({ from: address });\n\n        // If the user has already approved the poolToken we need to wait for this txn to complete before showing the add liquidity txn\n        if (hasApprovedEnoughPoolToken) {\n          await txn;\n        }\n      }\n\n      if (!hasApprovedEnoughPoolToken) {\n        // Approve tranche token (DAI or USDC)\n        await trancheToken.methods\n          .approve(saffronPool.options.address, amountBN.toString())\n          .send({ from: address });\n      }\n\n      await saffronPool.methods\n        .add_liquidity(amountBN.toString(), trancheRatingIndex(trancheRating))\n        .send({ from: address });\n\n      queryClient.refetchQueries();\n      // Wait 2 seconds for refetch and then close modal.\n      // We do this instead of waiting the refetch because some refetches take a while or error out and we want to close now.\n      await new Promise((resolve) => setTimeout(resolve, 2000));\n      onClose();\n    } catch (e) {\n      handleGenericError(e, toast);\n      setUserAction(UserAction.NO_ACTION);\n    }\n  };\n\n  return userAction === UserAction.WAITING_FOR_TRANSACTIONS ? (\n    <Column expand mainAxisAlignment=\"center\" crossAxisAlignment=\"center\" p={4}>\n      <HashLoader\n        size={70}\n        color={requiresSFIStaking(trancheRating) ? SFIToken.color : token.color}\n        loading\n      />\n      <Heading mt=\"30px\" textAlign=\"center\" size=\"md\">\n        {t(\"Check your wallet to submit the transactions\")}\n      </Heading>\n      <Text fontSize=\"sm\" mt=\"15px\" textAlign=\"center\">\n        {t(\"Do not close this tab until you submit all transactions!\")}\n      </Text>\n    </Column>\n  ) : (\n    <>\n      <Row\n        width=\"100%\"\n        mainAxisAlignment=\"center\"\n        crossAxisAlignment=\"center\"\n        p={4}\n      >\n        <Heading fontSize=\"27px\">\n          {t(\"{{trancheRating}} Tranche Deposit\", { trancheRating })}\n        </Heading>\n      </Row>\n      <ModalDivider />\n      <Column\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n        p={4}\n        height=\"100%\"\n      >\n        <Text fontWeight=\"bold\" fontSize=\"sm\" textAlign=\"center\">\n          {depositOrWithdrawAlert}\n        </Text>\n        <DashboardBox width=\"100%\" height=\"70px\">\n          <Row\n            p={4}\n            mainAxisAlignment=\"space-between\"\n            crossAxisAlignment=\"center\"\n            expand\n          >\n            <AmountInput\n              selectedToken={tranchePool}\n              displayAmount={userEnteredAmount}\n              updateAmount={updateAmount}\n            />\n\n            <TokenNameAndMaxButton\n              selectedToken={tranchePool}\n              updateAmount={updateAmount}\n            />\n          </Row>\n        </DashboardBox>\n\n        {requiresSFIStaking(trancheRating) ? (\n          <DashboardBox width=\"100%\" height=\"70px\">\n            <Row\n              p={4}\n              mainAxisAlignment=\"space-between\"\n              crossAxisAlignment=\"center\"\n              expand\n            >\n              <AmountInput\n                selectedToken=\"SFI\"\n                displayAmount={\n                  sfiRequired.isZero()\n                    ? \"0.0\"\n                    : sfiRequired.div(10 ** SFIToken.decimals).toString()\n                }\n                updateAmount={noop}\n              />\n\n              <TokenNameAndMaxButton selectedToken=\"SFI\" updateAmount={noop} />\n            </Row>\n          </DashboardBox>\n        ) : null}\n\n        <Button\n          fontWeight=\"bold\"\n          fontSize=\"2xl\"\n          borderRadius=\"10px\"\n          width=\"100%\"\n          height=\"70px\"\n          bg={requiresSFIStaking(trancheRating) ? SFIToken.color : token.color}\n          _hover={{ transform: \"scale(1.02)\" }}\n          _active={{ transform: \"scale(0.95)\" }}\n          color={token.overlayTextColor}\n          onClick={onConfirm}\n          isLoading={!poolTokenBalance}\n          isDisabled={!amountIsValid || !hasEnoughSFI}\n        >\n          {t(\"Confirm\")}\n        </Button>\n      </Column>\n    </>\n  );\n};\n\nexport default AmountSelect;\n\nconst TokenNameAndMaxButton = ({\n  selectedToken,\n  updateAmount,\n}: {\n  selectedToken: string;\n\n  updateAmount: (newAmount: string) => any;\n}) => {\n  const isSFI = selectedToken === \"SFI\";\n\n  const token = isSFI ? SFIToken : tokens[selectedToken];\n\n  const { rari, address } = useRari();\n\n  const [isMaxLoading, setIsMaxLoading] = useState(false);\n\n  const setToMax = async () => {\n    setIsMaxLoading(true);\n    let maxBN: BN;\n\n    const balance = await fetchTokenBalance(token.address, rari.web3, address);\n\n    maxBN = balance;\n\n    if (maxBN.isNeg() || maxBN.isZero()) {\n      updateAmount(\"\");\n    } else {\n      const str = new BigNumber(maxBN.toString())\n        .div(10 ** token.decimals)\n        .toFixed(18)\n        // Remove trailing zeroes\n        .replace(/\\.?0+$/, \"\");\n\n      if (str.startsWith(\"0.000000\")) {\n        updateAmount(\"\");\n      } else {\n        updateAmount(str);\n      }\n    }\n\n    setIsMaxLoading(false);\n  };\n\n  const { t } = useTranslation();\n\n  return (\n    <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n      <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n        <Box height=\"25px\" width=\"25px\" mr={2}>\n          <Image\n            width=\"100%\"\n            height=\"100%\"\n            borderRadius=\"50%\"\n            backgroundImage={`url(${SmallWhiteCircle})`}\n            src={token.logoURL}\n            alt=\"\"\n          />\n        </Box>\n        <Heading fontSize=\"24px\" mr={2}>\n          {selectedToken}\n        </Heading>\n      </Row>\n\n      {isSFI ? null : (\n        <Button\n          ml={1}\n          height=\"28px\"\n          width=\"58px\"\n          bg=\"transparent\"\n          border=\"2px\"\n          borderRadius=\"8px\"\n          borderColor=\"#272727\"\n          fontSize=\"sm\"\n          fontWeight=\"extrabold\"\n          _hover={{}}\n          _active={{}}\n          onClick={setToMax}\n          isLoading={isMaxLoading}\n        >\n          {t(\"MAX\")}\n        </Button>\n      )}\n    </Row>\n  );\n};\n\nconst AmountInput = ({\n  displayAmount,\n  updateAmount,\n  selectedToken,\n}: {\n  displayAmount: string;\n  updateAmount: (symbol: string) => any;\n  selectedToken: string;\n}) => {\n  const isSFI = selectedToken === \"SFI\";\n\n  const token = isSFI ? SFIToken : tokens[selectedToken];\n\n  return (\n    <Input\n      style={isSFI ? { pointerEvents: \"none\" } : {}}\n      type=\"number\"\n      inputMode=\"decimal\"\n      fontSize=\"3xl\"\n      fontWeight=\"bold\"\n      variant=\"unstyled\"\n      _placeholder={{ color: token.color }}\n      placeholder=\"0.0\"\n      value={displayAmount}\n      color={token.color}\n      onChange={(event) => updateAmount(event.target.value)}\n      mr={4}\n    />\n  );\n};\n"
  },
  {
    "path": "src/components/pages/Tranches/SaffronDepositModal/index.tsx",
    "content": "import { Modal, ModalOverlay, ModalContent } from \"@chakra-ui/react\";\n\nimport AmountSelect, { requiresSFIStaking } from \"./AmountSelect\";\n\nimport { MODAL_PROPS } from \"../../../shared/Modal\";\nimport { TranchePool, TrancheRating } from \"hooks/tranches/useSaffronData\";\ninterface Props {\n  isOpen: boolean;\n\n  onClose: () => any;\n\n  tranchePool: TranchePool;\n  trancheRating: TrancheRating;\n}\n\nconst DepositModal = (props: Props) => {\n  return (\n    <Modal\n      motionPreset=\"slideInBottom\"\n      isOpen={props.isOpen}\n      onClose={props.onClose}\n      isCentered\n    >\n      <ModalOverlay />\n      <ModalContent\n        {...MODAL_PROPS}\n        height={{\n          md: requiresSFIStaking(props.trancheRating) ? \"380px\" : \"295px\",\n          base: requiresSFIStaking(props.trancheRating) ? \"390px\" : \"310px\",\n        }}\n      >\n        <AmountSelect\n          onClose={props.onClose}\n          tranchePool={props.tranchePool}\n          trancheRating={props.trancheRating}\n        />\n      </ModalContent>\n    </Modal>\n  );\n};\n\nexport default DepositModal;\n"
  },
  {
    "path": "src/components/pages/Tranches/SaffronPoolABI.json",
    "content": "[\n  {\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_strategy\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"_base_asset\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"_SFI_address\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"_SFI_ratio\", \"type\": \"uint256\" },\n      { \"internalType\": \"bool\", \"name\": \"epoch_cycle_reset\", \"type\": \"bool\" }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"new_pool_principal\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"new_epoch_principal\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"new_eternal_balance\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"new_tranche_principal\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"new_tranche_dsec\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"AddLiquidity\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"time_remaining\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"dsec\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"dsec_address\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"epoch\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"tranche\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"user_address\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"principal_token_addr\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"DsecGeneration\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"who\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"token\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"ErcSwept\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"dsec_percent\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"interest_owned\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"SFI_owned\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"RemoveLiquidityDsec\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"principal\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"RemoveLiquidityPrincipal\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"adapter_address\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"epoch\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"StrategicDeploy\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"who\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"sfiBal\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"baseBal\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Swept\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"tranche\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"deposit\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"capacity\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"change\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"consumed\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"utilized_consumed\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"unutilized_consumed\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"available_utilized\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"available_unutilized\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"TrancheBalance\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"previous_epoch\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"S_SFI\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"AA_SFI\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"A_SFI\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"WindDownEpochSFI\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"epoch\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"tranche_S_interest\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"tranche_AA_interest\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"tranche_A_interest\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"tranche_SFI_earnings_S\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"tranche_SFI_earnings_AA\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"tranche_SFI_earnings_A\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"WindDownEpochState\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"SFI_address\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"SFI_ratio\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"TRANCHE_SFI_MULTIPLIER\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"S\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"AA\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"A\", \"type\": \"uint256\" }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"_shutdown\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"adapter_total_principal\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"enum ISaffronBase.Tranche\",\n        \"name\": \"tranche\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"add_liquidity\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"base_asset_address\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"best_adapter_address\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"delete_adapters\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"dsec_token_addresses\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"epoch_cycle\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"start_date\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"duration\", \"type\": \"uint256\" }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"name\": \"epoch_principal\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"name\": \"epoch_wound_down\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_token\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"_to\", \"type\": \"address\" }\n    ],\n    \"name\": \"erc_sweep\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"get_available_S_balances\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"get_base_asset_address\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"get_current_epoch\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"get_epoch_cycle_params\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"epoch\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"get_epoch_end\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"epoch\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"get_seconds_until_epoch_end\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"governance\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"adapter_address\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"hourly_strategy\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"epoch\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"address[]\",\n        \"name\": \"saffron_LP_dsec_token_addresses\",\n        \"type\": \"address[]\"\n      },\n      {\n        \"internalType\": \"address[]\",\n        \"name\": \"saffron_LP_principal_token_addresses\",\n        \"type\": \"address[]\"\n      }\n    ],\n    \"name\": \"new_epoch\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"pool_interest\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"pool_principal\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"principal_token_addresses\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"dsec_token_address\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"dsec_amount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"principal_token_address\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"principal_amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"remove_liquidity\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }],\n    \"name\": \"set_best_adapter\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }],\n    \"name\": \"set_governance\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }],\n    \"name\": \"set_strategy\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"shutdown\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"strategy\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"_to\", \"type\": \"address\" }],\n    \"name\": \"sweep\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"tranche_A_multiplier\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"tranche_SFI_earned\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"tranche_S_virtual_unutilized\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"tranche_S_virtual_utilized\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"tranche_interest_earned\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"tranche_total_dsec\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"tranche_total_principal\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"tranche_total_unutilized\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"tranche_total_utilized\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"epoch\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount_sfi\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"wind_down_epoch\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/components/pages/Tranches/SaffronStrategyABI.json",
    "content": "[\n  {\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_sfi_address\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"_team_address\", \"type\": \"address\" },\n      { \"internalType\": \"bool\", \"name\": \"epoch_cycle_reset\", \"type\": \"bool\" }\n    ],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"who\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"token\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"ErcSwept\",\n    \"type\": \"event\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"SFI_address\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"name\": \"adapters\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"adapter_address\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"add_adapter\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"pool_address\", \"type\": \"address\" }\n    ],\n    \"name\": \"add_pool\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"delete_adapters\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"deploy_all_capital\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"pool_index\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"adapter_index\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deploy_all_capital_single_pool\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"deploy_interval\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"epoch_cycle\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"start_date\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"duration\", \"type\": \"uint256\" }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"name\": \"epoch_wound_down\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_token\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"_to\", \"type\": \"address\" }\n    ],\n    \"name\": \"erc_sweep\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"index\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"get_adapter_address\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"adapter_address\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"get_adapter_index\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"get_current_epoch\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"epoch\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"get_epoch_end\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"epoch\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"get_seconds_until_epoch_end\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"governance\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"last_deploy\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"oracle\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract ChainlinkRewardOracle\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"uint16\", \"name\": \"epoch\", \"type\": \"uint16\" }],\n    \"name\": \"oracle_set_reward\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"name\": \"pool_SFI_rewards\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"name\": \"pools\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"select_adapter_for_liquidity_removal\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }],\n    \"name\": \"set_governance\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"oracleAddr\", \"type\": \"address\" }\n    ],\n    \"name\": \"set_oracle\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"poolIndex\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"reward\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"set_pool_SFI_reward\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }],\n    \"name\": \"set_team_address\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"poolIndex\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"shutdown_pool\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"team_address\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [],\n    \"name\": \"v01_final_deploy\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"epoch\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"wind_down_epoch\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"epoch\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"wind_down_epoch_oracle\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"pool\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"epoch\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"wind_down_pool\",\n    \"outputs\": [],\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/components/pages/Tranches/TranchesPage.tsx",
    "content": "import { Center, Column, Row, RowOrColumn } from \"utils/chakraUtils\";\nimport { useRari } from \"../../../context/RariContext\";\nimport DashboardBox from \"../../shared/DashboardBox\";\nimport { Header } from \"../../shared/Header\";\nimport {\n  Heading,\n  Link,\n  Text,\n  Icon,\n  Image,\n  useDisclosure,\n} from \"@chakra-ui/react\";\nimport { useTranslation } from \"react-i18next\";\nimport { MdSwapHoriz } from \"react-icons/md\";\nimport DepositModal from \"./SaffronDepositModal\";\nimport { SaffronProvider } from \"./SaffronContext\";\nimport { SimpleTooltip } from \"../../shared/SimpleTooltip\";\nimport { WarningTwoIcon } from \"@chakra-ui/icons\";\nimport { memo } from \"react\";\n\n// Hooks\nimport { useIsSmallScreen } from \"hooks/useIsSmallScreen\";\nimport {\n  TranchePool,\n  TrancheRating,\n  tranchePoolIndex,\n  useEpochEndDate,\n  useEstimatedSFI,\n  usePrincipal,\n  usePrincipalBalance,\n  useSaffronData,\n} from \"hooks/tranches/useSaffronData\";\nimport { useSFIDistributions } from \"hooks/tranches/useSFIDistributions\";\nimport { useSFIEarnings } from \"hooks/tranches/useSFIEarnings\";\nimport { useAuthedCallback } from \"hooks/useAuthedCallback\";\nimport Footer from \"components/shared/Footer\";\n\nconst WrappedTranchePage = memo(() => {\n  return (\n    <SaffronProvider>\n      <TranchePage />\n    </SaffronProvider>\n  );\n});\n\nexport default WrappedTranchePage;\n\nconst TranchePage = () => {\n  const { isAuthed } = useRari();\n  const { t } = useTranslation();\n  const isMobile = useIsSmallScreen();\n\n  return (\n    <>\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        color=\"#FFFFFF\"\n        mx=\"auto\"\n        width={isMobile ? \"100%\" : \"1000px\"}\n        px={isMobile ? 4 : 0}\n      >\n        <Header isAuthed={isAuthed} />\n\n        <RowOrColumn\n          width=\"100%\"\n          isRow={!isMobile}\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n        >\n          <Column\n            width={isMobile ? \"100%\" : \"75%\"}\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n            mr={4}\n          >\n            {/* Header */}\n            <DashboardBox height={isMobile ? \"110px\" : \"95px\"} width=\"100%\">\n              <Column\n                expand\n                mainAxisAlignment=\"center\"\n                crossAxisAlignment={isMobile ? \"center\" : \"flex-start\"}\n                textAlign=\"center\"\n                px={4}\n              >\n                <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n                  <Heading size=\"lg\">{t(\"Tranches\")}</Heading>\n\n                  <SimpleTooltip\n                    placement=\"bottom\"\n                    label={t(\n                      \"Saffron Finance has not been fully audited. Take caution when entering these tranches and do not deposit more than you are comfortable losing.\"\n                    )}\n                  >\n                    <Link\n                      isExternal\n                      href=\"https://defisafety.com/2020/12/28/saffron-finance/\"\n                    >\n                      <WarningTwoIcon ml={2} boxSize=\"25px\" color=\"#C34535\" />\n                    </Link>\n                  </SimpleTooltip>\n                </Row>\n\n                {t(\n                  \"Access Saffron Finance tranches through the Rari Capital interface!\"\n                )}\n              </Column>\n            </DashboardBox>\n\n            {/* Information ab. Tranche Ratings */}\n            <DashboardBox\n              mt={4}\n              height={isMobile ? \"auto\" : \"200px\"}\n              width=\"100%\"\n            >\n              <TranchesRatingInfo />\n            </DashboardBox>\n\n            {/* Dai Pool */}\n            <DashboardBox\n              mt={4}\n              height={isMobile ? \"auto\" : \"200px\"}\n              width=\"100%\"\n            >\n              <TranchePoolInfo tranchePool={TranchePool.DAI} />\n            </DashboardBox>\n\n            {/* USDC Pool */}\n            {isMobile ? null : (\n              <DashboardBox\n                mt={4}\n                height=\"200px\"\n                width=\"100%\"\n                style={{ filter: \"blur(3px)\", pointerEvents: \"none\" }}\n              >\n                <TranchePoolInfo tranchePool={TranchePool.USDC} />\n              </DashboardBox>\n            )}\n          </Column>\n\n          {/* Other Metrics */}\n          <Column\n            mt={isMobile ? 4 : 0}\n            width={isMobile ? \"100%\" : \"25%\"}\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"center\"\n          >\n            <DashboardBox height=\"95px\" width=\"100%\">\n              <RedemptionDate />\n            </DashboardBox>\n\n            <DashboardBox mt={4} height=\"200px\" width=\"100%\">\n              <PrincipalAmount />\n            </DashboardBox>\n\n            <DashboardBox mt={4} height=\"200px\" width=\"100%\">\n              <SFIPrice />\n            </DashboardBox>\n\n            <DashboardBox mt={4} height=\"200px\" width=\"100%\" p={4}>\n              <SFIDistributions />\n            </DashboardBox>\n          </Column>\n        </RowOrColumn>\n        <Footer />\n      </Column>\n    </>\n  );\n};\n\nexport const TranchesRatingInfo = () => {\n  const { t } = useTranslation();\n  const isMobile = useIsSmallScreen();\n\n  return (\n    <RowOrColumn\n      isRow={!isMobile}\n      p={4}\n      expand\n      crossAxisAlignment=\"flex-start\"\n      mainAxisAlignment=\"space-between\"\n    >\n      <Column\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment={isMobile ? \"center\" : \"flex-start\"}\n        expand\n      >\n        <Column\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment={isMobile ? \"center\" : \"flex-start\"}\n        >\n          <Heading size=\"md\">{t(\"Tranche Details\")}</Heading>\n          <Text mt={1} textAlign={isMobile ? \"center\" : \"left\"}>\n            {t(\n              \"SFI and interest is distributed to LPs proportionally at the end of each epoch.\"\n            )}\n          </Text>\n        </Column>\n\n        <Link isExternal href=\"https://app.saffron.finance/#docs\">\n          <u>{t(\"Learn More\")}</u>\n        </Link>\n      </Column>\n\n      <TrancheRatingColumn trancheRating={TrancheRating.S} />\n      <TrancheRatingColumn trancheRating={TrancheRating.AA} />\n      <TrancheRatingColumn trancheRating={TrancheRating.A} />\n    </RowOrColumn>\n  );\n};\n\nexport const TrancheRatingColumn = ({\n  trancheRating,\n}: {\n  trancheRating: TrancheRating;\n}) => {\n  const { t } = useTranslation();\n  const isMobile = useIsSmallScreen();\n  const data = useSFIEarnings();\n\n  return (\n    <Column\n      mainAxisAlignment=\"space-between\"\n      crossAxisAlignment=\"center\"\n      expand\n      ml={isMobile ? 0 : 4}\n      mt={isMobile ? 6 : 0}\n    >\n      <Column\n        mainAxisAlignment=\"flex-start\"\n        crossAxisAlignment=\"center\"\n        mb={isMobile ? 2 : 0}\n      >\n        <Heading size=\"sm\">\n          {trancheRating} {t(\"Tranche\")}\n        </Heading>\n        <Text textAlign=\"center\" mt={1}>\n          {trancheRating === TrancheRating.S\n            ? t(\"Liquidity added to other tranches as needed.\")\n            : trancheRating === TrancheRating.AA\n            ? t(\n                \"Reduced interest earned. Covered in case of failure by A tranche.\"\n              )\n            : t(\n                \"10x interest earned. Cover provided to AA tranche in case of failure.\"\n              )}\n        </Text>\n      </Column>\n\n      <i>\n        SFI Earnings: <b>{data ? data[trancheRating] + \"%\" : \"?%\"}</b>\n      </i>\n    </Column>\n  );\n};\n\nexport const TranchePoolInfo = ({\n  tranchePool,\n}: {\n  tranchePool: TranchePool;\n}) => {\n  const { t } = useTranslation();\n\n  const isMobile = useIsSmallScreen();\n\n  return (\n    <RowOrColumn\n      isRow={!isMobile}\n      p={4}\n      expand\n      crossAxisAlignment=\"flex-start\"\n      mainAxisAlignment=\"space-between\"\n    >\n      <Column\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment={isMobile ? \"center\" : \"flex-start\"}\n        expand\n        textAlign={isMobile ? \"center\" : \"left\"}\n      >\n        <Heading size=\"md\">\n          {tranchePool} {t(\"Pool\")}\n        </Heading>\n        <Text mt={2}>\n          {t(\"Deposits are locked until the end of each 2 week epoch.\")}\n        </Text>\n        <Text mt={3}>\n          <i>{t(\"SFI staking is required to enter the A tranche!\")}</i>\n        </Text>\n      </Column>\n\n      <TrancheColumn\n        tranchePool={tranchePool}\n        trancheRating={TrancheRating.S}\n      />\n\n      {isMobile ? null : (\n        <TrancheColumn\n          tranchePool={tranchePool}\n          trancheRating={TrancheRating.AA}\n        />\n      )}\n\n      <TrancheColumn\n        tranchePool={tranchePool}\n        trancheRating={TrancheRating.A}\n      />\n    </RowOrColumn>\n  );\n};\n\nexport const TrancheColumn = ({\n  tranchePool,\n  trancheRating,\n}: {\n  tranchePool: TranchePool;\n  trancheRating: TrancheRating;\n}) => {\n  const { t } = useTranslation();\n  const isMobile = useIsSmallScreen();\n\n  const { saffronData } = useSaffronData();\n\n  const principal = usePrincipal(tranchePool, trancheRating);\n\n  const {\n    isOpen: isDepositModalOpen,\n    onOpen: openDepositModal,\n    onClose: closeDepositModal,\n  } = useDisclosure();\n\n  const authedOpenModal = useAuthedCallback(openDepositModal);\n\n  return (\n    <>\n      <DepositModal\n        trancheRating={trancheRating}\n        tranchePool={tranchePool}\n        isOpen={isDepositModalOpen}\n        onClose={closeDepositModal}\n      />\n\n      <Column\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"center\"\n        expand\n        ml={isMobile ? 0 : 4}\n        mt={isMobile ? 8 : 0}\n        // TODO: REMOVE STYLE ONCE AA TRANCHE IS ADDED\n        style={\n          trancheRating === TrancheRating.AA\n            ? {\n                opacity: tranchePool !== \"USDC\" ? \"0.3\" : \"1\",\n                pointerEvents: \"none\",\n              }\n            : {}\n        }\n      >\n        <Column mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n          <Heading size=\"sm\">\n            {trancheRating} {t(\"Tranche\")}\n          </Heading>\n          <SimpleTooltip label={t(\"Your balance in this tranche\")}>\n            <Text textAlign=\"center\" mt={4}>\n              {principal ?? \"?\"} {tranchePool}\n            </Text>\n          </SimpleTooltip>\n          <Text textAlign=\"center\" fontWeight=\"bold\" mt={4}>\n            {trancheRating === \"AA\"\n              ? // TODO REMOVE HARDCODED CHECK ABOUT AA TRANCHE ONCE IT'S IMPLEMENTED\n                \"0.45%\"\n              : saffronData\n              ? saffronData.pools[tranchePoolIndex(tranchePool)].tranches?.[\n                  trancheRating\n                ]?.[\"total-apy\"] + \"% APY\"\n              : \"?% APY\"}\n          </Text>\n        </Column>\n\n        <DashboardBox\n          onClick={authedOpenModal}\n          mt={4}\n          as=\"button\"\n          height=\"45px\"\n          width={isMobile ? \"100%\" : \"85%\"}\n          borderRadius=\"7px\"\n          fontSize=\"xl\"\n          fontWeight=\"bold\"\n        >\n          <Center expand>\n            <Icon as={MdSwapHoriz} boxSize=\"30px\" />\n          </Center>\n        </DashboardBox>\n      </Column>\n    </>\n  );\n};\n\nexport const RedemptionDate = () => {\n  const { t } = useTranslation();\n  const { data } = useEpochEndDate();\n\n  return (\n    <Column expand mainAxisAlignment=\"center\" crossAxisAlignment=\"center\">\n      <Heading size=\"sm\">\n        {t(\"Epoch {{epoch}} Redemption Date\", {\n          epoch: data?.currentEpoch ?? \"?\",\n        })}\n      </Heading>\n      <Text>{data ? data.endDate.toDateString() : \"?\"}</Text>\n      <Text fontSize=\"13px\" mt=\"3px\">\n        <Link isExternal href=\"https://app.saffron.finance/#redeem\">\n          <u>{t(\"Withdraw From Past Epochs\")}</u>\n        </Link>\n      </Text>\n    </Column>\n  );\n};\n\nexport const PrincipalAmount = () => {\n  const { t } = useTranslation();\n\n  const principal = usePrincipalBalance();\n  const estimatedSFI = useEstimatedSFI();\n\n  return (\n    <Column expand mainAxisAlignment=\"center\" crossAxisAlignment=\"center\">\n      <Heading lineHeight={1.4} fontSize=\"18px\">\n        {t(\"Principal Amount\")}\n      </Heading>\n      <Text>{principal ?? \"$?\"}</Text>\n\n      <Heading lineHeight={1.4} fontSize=\"18px\" mt={10}>\n        {t(\"Estimated SFI Earnings\")}\n      </Heading>\n      <Text>{estimatedSFI?.formattedTotalSFIEarned ?? \"? SFI\"}</Text>\n    </Column>\n  );\n};\n\nexport const SFIPrice = () => {\n  const { t } = useTranslation();\n\n  const { saffronData } = useSaffronData();\n\n  return (\n    <Column expand mainAxisAlignment=\"center\" crossAxisAlignment=\"center\">\n      <Image\n        mt={2}\n        boxSize=\"90px\"\n        src=\"https://assets.coingecko.com/coins/images/13117/large/sfi_red_250px.png?1606020144\"\n      />\n\n      <Heading size=\"sm\" mt={3}>\n        {t(\"Current SFI Price\")}\n      </Heading>\n      <Text>{saffronData ? \"$\" + saffronData.SFI.USD : \"$?\"}</Text>\n    </Column>\n  );\n};\n\nexport const SFIDistributions = () => {\n  const { t } = useTranslation();\n\n  const sfiDistributions = useSFIDistributions();\n\n  // TODO: ADD USDC\n  return (\n    <Column mainAxisAlignment=\"center\" crossAxisAlignment=\"center\" expand>\n      <Heading size=\"sm\">{t(\"SFI Pool Distributions\")}</Heading>\n\n      <Row\n        width=\"100%\"\n        mainAxisAlignment=\"space-between\"\n        crossAxisAlignment=\"flex-start\"\n        mt={4}\n      >\n        <Column\n          expand\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n        >\n          <Text fontWeight=\"bold\">{t(\"Pool\")}</Text>\n          <Text>DAI</Text>\n        </Column>\n\n        <Column\n          expand\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n        >\n          <Text fontWeight=\"bold\">{t(\"Tranche\")}</Text>\n          <Text>S + A</Text>\n        </Column>\n\n        <Column\n          expand\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n        >\n          <Text fontWeight=\"bold\">SFI</Text>\n          <Text>{sfiDistributions ? sfiDistributions.DAI : \"?\"}</Text>\n        </Column>\n      </Row>\n\n      <Link mt={4} isExternal href=\"https://app.saffron.finance/#dashboard\">\n        <u>{t(\"Learn More\")}</u>\n      </Link>\n    </Column>\n  );\n};\n"
  },
  {
    "path": "src/components/shared/AccountButton.tsx",
    "content": "import { memo, useCallback } from \"react\";\nimport { useRari } from \"../../context/RariContext\";\nimport {\n  useDisclosure,\n  Modal,\n  ModalOverlay,\n  ModalContent,\n  Button,\n  Link,\n  Text,\n  Spinner,\n} from \"@chakra-ui/react\";\n\nimport { Row, Column, Center } from \"utils/chakraUtils\";\nimport DashboardBox from \"./DashboardBox\";\n\n// @ts-ignore\nimport Jazzicon, { jsNumberForAddress } from \"react-jazzicon\";\n\nimport { shortAddress } from \"../../utils/shortAddress\";\n\nimport { useTranslation } from \"react-i18next\";\nimport { MODAL_PROPS, ModalDivider, ModalTitleWithCloseButton } from \"./Modal\";\nimport { LanguageSelect } from \"./TranslateButton\";\n\nimport { DarkGlowingButton, GlowingButton } from \"./GlowingButton\";\nimport { ClaimRGTModal } from \"./ClaimRGTModal\";\nimport { version } from \"../..\";\n\nimport { useIsSmallScreen } from \"../../hooks/useIsSmallScreen\";\nimport { useAuthedCallback } from \"../../hooks/useAuthedCallback\";\nimport { useClaimable } from \"hooks/rewards/useClaimable\";\n\nexport const AccountButton = memo(() => {\n  const {\n    isOpen: isSettingsModalOpen,\n    onOpen: openSettingsModal,\n    onClose: closeSettingsModal,\n  } = useDisclosure();\n\n  const authedOpenSettingsModal = useAuthedCallback(openSettingsModal);\n\n  const {\n    isOpen: isClaimRGTModalOpen,\n    onOpen: openClaimRGTModal,\n    onClose: closeClaimRGTModal,\n  } = useDisclosure();\n\n  const authedOpenClaimRGTModal = useAuthedCallback(openClaimRGTModal);\n\n  const { hasClaimableRewards } = useClaimable();\n\n  return (\n    <>\n      <SettingsModal\n        isOpen={isSettingsModalOpen}\n        onClose={closeSettingsModal}\n        openClaimRGTModal={openClaimRGTModal}\n      />\n      <ClaimRGTModal\n        isOpen={isClaimRGTModalOpen}\n        onClose={closeClaimRGTModal}\n      />\n      <Buttons\n        openModal={authedOpenSettingsModal}\n        openClaimRGTModal={authedOpenClaimRGTModal}\n        hasClaimableRewards={hasClaimableRewards}\n      />\n    </>\n  );\n});\n\nconst Buttons = ({\n  openModal,\n  openClaimRGTModal,\n  hasClaimableRewards,\n}: {\n  openModal: () => any;\n  openClaimRGTModal: () => any;\n  hasClaimableRewards: boolean;\n}) => {\n  const { address, isAuthed, login, isAttemptingLogin } = useRari();\n\n  const { t } = useTranslation();\n\n  const isMobile = useIsSmallScreen();\n\n  const handleAccountButtonClick = useCallback(() => {\n    if (isAuthed) {\n      openModal();\n    } else login();\n  }, [isAuthed, login, openModal]);\n\n  return (\n    <Row mainAxisAlignment=\"center\" crossAxisAlignment=\"center\">\n      {isMobile ? null : (\n        <>\n          {hasClaimableRewards ? (\n            <DarkGlowingButton\n              label={t(\"Claim\")}\n              onClick={openClaimRGTModal}\n              height=\"40px\"\n              flexShrink={0}\n              width=\"95px\"\n              fontSize=\"15px\"\n              fontWeight=\"bold\"\n            />\n          ) : (\n            <DashboardBox\n              ml={1}\n              as=\"button\"\n              height=\"40px\"\n              flexShrink={0}\n              width=\"95px\"\n              fontSize=\"15px\"\n              fontWeight=\"bold\"\n              onClick={openClaimRGTModal}\n            >\n              <Center expand>{t(\"Claim\")}</Center>\n            </DashboardBox>\n          )}\n        </>\n      )}\n\n      {/* Connect + Account button */}\n      <DashboardBox\n        ml={isMobile ? 0 : 4}\n        as=\"button\"\n        height=\"40px\"\n        flexShrink={0}\n        flexGrow={0}\n        width=\"133px\"\n        onClick={handleAccountButtonClick}\n      >\n        <Row\n          expand\n          mainAxisAlignment=\"space-around\"\n          crossAxisAlignment=\"center\"\n          px={3}\n          py={1}\n        >\n          {/* Conditionally display Connect button or Account button */}\n          {!isAuthed ? (\n            isAttemptingLogin ? (\n              <Spinner />\n            ) : (\n              <Text fontWeight=\"semibold\">{t(\"Connect\")}</Text>\n            )\n          ) : (\n            <>\n              <Jazzicon diameter={23} seed={jsNumberForAddress(address)} />\n              <Text ml={2} fontWeight=\"semibold\">\n                {shortAddress(address)}\n              </Text>\n            </>\n          )}\n        </Row>\n      </DashboardBox>\n    </Row>\n  );\n};\n\nexport const SettingsModal = ({\n  isOpen,\n  onClose,\n  openClaimRGTModal,\n}: {\n  isOpen: boolean;\n  onClose: () => any;\n  openClaimRGTModal: () => any;\n}) => {\n  const { t } = useTranslation();\n\n  const { login, logout } = useRari();\n\n  const onSwitchWallet = () => {\n    onClose();\n    setTimeout(() => login(false), 100);\n  };\n\n  const handleDisconnectClick = () => {\n    onClose();\n    logout();\n  };\n\n  const onClaimRGT = () => {\n    onClose();\n    setTimeout(() => openClaimRGTModal(), 100);\n  };\n\n  return (\n    <Modal\n      motionPreset=\"slideInBottom\"\n      isOpen={isOpen}\n      onClose={onClose}\n      isCentered\n    >\n      <ModalOverlay />\n      <ModalContent {...MODAL_PROPS}>\n        <ModalTitleWithCloseButton text={t(\"Account\")} onClose={onClose} />\n\n        <ModalDivider />\n\n        <Column\n          width=\"100%\"\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          p={4}\n        >\n          <GlowingButton onClick={onClaimRGT} width=\"100%\" height=\"51px\" mb={4}>\n            {t(\"Claim\")}\n          </GlowingButton>\n\n          <Button\n            bg={\"whatsapp.500\"}\n            width=\"100%\"\n            height=\"45px\"\n            fontSize=\"xl\"\n            borderRadius=\"7px\"\n            fontWeight=\"bold\"\n            onClick={onSwitchWallet}\n            _hover={{}}\n            _active={{}}\n            mb={4}\n          >\n            {t(\"Switch Wallet\")}\n          </Button>\n\n          <Button\n            bg=\"red.500\"\n            width=\"100%\"\n            height=\"45px\"\n            fontSize=\"xl\"\n            borderRadius=\"7px\"\n            fontWeight=\"bold\"\n            onClick={handleDisconnectClick}\n            _hover={{}}\n            _active={{}}\n            mb={4}\n          >\n            {t(\"Disconnect\")}\n          </Button>\n\n          <LanguageSelect />\n\n          <Row\n            mainAxisAlignment=\"center\"\n            crossAxisAlignment=\"center\"\n            mt={4}\n            width=\"100%\"\n          >\n            <Link isExternal href=\"https://docs.rari.capital/\">\n              <Text mx={2} text=\"sm\" textDecoration=\"underline\">\n                {t(\"Developer Docs\")}\n              </Text>\n            </Link>\n            <Link\n              isExternal\n              href=\"https://www.notion.so/Rari-Capital-3d762a07d2c9417e9cd8c2e4f719e4c3\"\n            >\n              <Text mx={2} text=\"sm\" textDecoration=\"underline\">\n                {t(\"Learn\")}\n              </Text>\n            </Link>\n            <Link\n              isExternal\n              href=\"https://info.rari.capital/security/#smart-contract-audits\"\n            >\n              <Text mx={2} text=\"sm\" textDecoration=\"underline\">\n                {t(\"Audits\")}\n              </Text>\n            </Link>\n          </Row>\n\n          <Text mt={4} fontSize=\"10px\">\n            {t(\"Version\")} {version}\n          </Text>\n        </Column>\n      </ModalContent>\n    </Modal>\n  );\n};\n"
  },
  {
    "path": "src/components/shared/AdminAlert.tsx",
    "content": "import { Alert, AlertIcon } from \"@chakra-ui/alert\";\nimport { EditIcon } from \"@chakra-ui/icons\";\nimport { Box } from \"@chakra-ui/layout\";\nimport { ReactNode } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nexport const AdminAlert = ({\n  isAdmin = false,\n  isAdminText = \"You are the admin!\",\n  isNotAdminText = \"You are not the admin!!\",\n  rightAdornment,\n  ...alertProps\n}: {\n  isAdmin: boolean;\n  isAdminText?: string;\n  isNotAdminText?: string;\n  rightAdornment?: ReactNode;\n  [x: string]: any;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <Alert\n      colorScheme={isAdmin ? \"green\" : \"red\"}\n      borderRadius={5}\n      mt=\"5\"\n      {...alertProps}\n    >\n      <AlertIcon />\n      <span style={{ color: \"black\" }}>\n        {t(isAdmin ? isAdminText : isNotAdminText)}\n      </span>\n      <Box h=\"100%\" ml=\"auto\">\n        {rightAdornment}\n      </Box>\n    </Alert>\n  );\n};\n"
  },
  {
    "path": "src/components/shared/CTokenIcon.tsx",
    "content": "import { Avatar, AvatarGroup } from \"@chakra-ui/avatar\";\nimport { useTokenData } from \"hooks/useTokenData\";\n\nexport const CTokenIcon = ({\n  address,\n  ...avatarProps\n}: {\n  address: string;\n  [key: string]: any;\n}) => {\n  const tokenData = useTokenData(address);\n\n  return (\n    <Avatar\n      {...avatarProps}\n      key={address}\n      bg=\"#FFF\"\n      borderWidth=\"1px\"\n      name={tokenData?.symbol ?? \"Loading...\"}\n      src={\n        tokenData?.logoURL ??\n        \"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"\n      }\n    />\n  );\n};\n\nexport const CTokenAvatarGroup = ({\n  tokenAddresses,\n  popOnHover = false,\n  ...props\n}: {\n  tokenAddresses: string[];\n  popOnHover: boolean;\n  [x: string]: any;\n}) => {\n  return (\n    <AvatarGroup size=\"xs\" max={30} {...props}>\n      {tokenAddresses.map((tokenAddress) => {\n        return (\n          <CTokenIcon\n            key={tokenAddress}\n            address={tokenAddress}\n            _hover={popOnHover ? { transform: \"scale(1.2)\", zIndex: 5 } : null}\n          />\n        );\n      })}\n    </AvatarGroup>\n  );\n};\n"
  },
  {
    "path": "src/components/shared/CaptionedStat.tsx",
    "content": "import { Heading, Text } from \"@chakra-ui/react\";\nimport { CrossAxisAlignment, Column } from \"utils/chakraUtils\";\nimport { useMaybeResponsiveProp } from \"../../hooks/useMaybeResponsiveProp\";\n\nexport interface CaptionedStatProps {\n  crossAxisAlignment: CrossAxisAlignment;\n  stat: string;\n  statSize: string;\n  caption: string;\n  captionSize: string;\n  spacing?: string | number;\n  captionFirst?: boolean;\n  captionColor?: string;\n}\n\nconst CaptionedStat = ({\n  stat,\n  caption,\n  captionSize,\n  spacing,\n  statSize,\n  crossAxisAlignment,\n  captionFirst,\n  captionColor,\n}: CaptionedStatProps) => {\n  const crossAxisAlignmentStatic = useMaybeResponsiveProp(crossAxisAlignment);\n  const textAlign = crossAxisAlignmentStatic.replace(\"flex-\", \"\") as any;\n\n  return (\n    <Column mainAxisAlignment=\"center\" crossAxisAlignment={crossAxisAlignment}>\n      {captionFirst ?? true ? (\n        <>\n          <Caption\n            size={captionSize}\n            spacing={spacing ?? 0}\n            textAlign={textAlign}\n            text={caption}\n            color={captionColor}\n          />\n          <Stat size={statSize} text={stat} />\n        </>\n      ) : (\n        <>\n          <Stat size={statSize} text={stat} />\n          <Caption\n            size={captionSize}\n            spacing={spacing ?? 0}\n            textAlign={textAlign}\n            text={caption}\n            color={captionColor}\n          />\n        </>\n      )}\n    </Column>\n  );\n};\n\nconst Stat = ({\n  size,\n  text,\n}: {\n  size: { md: string; xs: string } | string;\n  text: string;\n}) => {\n  return (\n    <Heading fontSize={size} lineHeight=\"2.5rem\">\n      {text}\n    </Heading>\n  );\n};\n\nconst Caption = ({\n  size,\n  textAlign,\n  spacing,\n  text,\n  color = \"#858585\",\n}: {\n  size: { md: string; xs: string } | string;\n\n  textAlign: any;\n\n  spacing: string | number;\n\n  text: string;\n\n  color?: string;\n}) => {\n  return (\n    <Text\n      textTransform=\"uppercase\"\n      letterSpacing=\"wide\"\n      color={color}\n      fontSize={size}\n      textAlign={textAlign}\n      mt={spacing ?? 0}\n    >\n      {text}\n    </Text>\n  );\n};\n\nexport default CaptionedStat;\n"
  },
  {
    "path": "src/components/shared/ClaimRGTModal.tsx",
    "content": "import { motion } from \"framer-motion\";\nimport {\n  Modal,\n  ModalOverlay,\n  ModalContent,\n  Text,\n  Heading,\n  Image,\n  Button,\n  useToast,\n  Spinner,\n} from \"@chakra-ui/react\";\nimport BigNumber from \"bignumber.js\";\nimport { Column, Row } from \"utils/chakraUtils\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useRari } from \"../../context/RariContext\";\n\nimport { GlowingButton } from \"./GlowingButton\";\nimport { ModalDivider, ModalTitleWithCloseButton, MODAL_PROPS } from \"./Modal\";\n\nimport {\n  UnclaimedReward,\n  useUnclaimedFuseRewards,\n} from \"hooks/rewards/useUnclaimedFuseRewards\";\nimport DashboardBox from \"./DashboardBox\";\nimport {\n  TokenData,\n  useTokenData,\n  useTokensDataAsMap,\n} from \"hooks/useTokenData\";\nimport { createRewardsDistributor } from \"utils/createComptroller\";\nimport { useClaimable } from \"hooks/rewards/useClaimable\";\nimport { claimRewardsFromRewardsDistributors } from \"utils/rewards\";\nimport { SimpleTooltip } from \"./SimpleTooltip\";\n\nimport { useQueryClient } from \"react-query\";\n\nexport type ClaimMode = \"pool2\" | \"private\" | \"yieldagg\" | \"fuse\";\n\nconst RGT = \"0xd291e7a03283640fdc51b121ac401383a46cc623\";\n\nexport const ClaimRGTModal = ({\n  isOpen,\n  onClose,\n  defaultMode,\n}: {\n  isOpen: boolean;\n  onClose: () => any;\n  defaultMode?: ClaimMode;\n}) => {\n  const { t } = useTranslation();\n\n  const [amount, setAmount] = useState(0);\n\n  const { fuse } = useRari();\n\n  // pool2\n  // private\n  // yieldagg\n  const [showPrivate, setShowPrivate] = useState<boolean>(true);\n\n  // If user presses meta key or control key + slash they will toggle the private allocation claim mode.\n  useEffect(() => {\n    const handler = (e: KeyboardEvent) => {\n      if ((e.metaKey || e.ctrlKey) && e.code === \"Slash\") {\n        e.preventDefault();\n        setShowPrivate(true);\n      }\n    };\n\n    document.addEventListener(\"keydown\", handler);\n\n    return () => document.removeEventListener(\"keydown\", handler);\n  }, []);\n\n  return (\n    <Modal\n      motionPreset=\"slideInBottom\"\n      isOpen={isOpen}\n      onClose={onClose}\n      isCentered\n    >\n      <ModalOverlay />\n      <ModalContent {...MODAL_PROPS}>\n        <ModalTitleWithCloseButton\n          text={t(\"Claim Rewards\")}\n          onClose={onClose}\n        />\n\n        <ModalDivider />\n\n        <Column\n          width=\"100%\"\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"flex-start\"\n          p={3}\n        >\n          <ClaimRewards showPrivate={showPrivate} />\n        </Column>\n      </ModalContent>\n    </Modal>\n  );\n};\n\n// List of rewards to claim\nconst ClaimRewards = ({ showPrivate }: { showPrivate: boolean }) => {\n  const { fuse, address } = useRari();\n  const { t } = useTranslation();\n\n  const {\n    rewardsDistributorsMap,\n    unclaimed: unclaimedFuseRewards,\n    rewardTokensMap,\n  } = useUnclaimedFuseRewards();\n\n  const { allClaimable, allRewardsTokens } = useClaimable(showPrivate);\n  const toast = useToast();\n\n  const [claimingAll, setClaimingAll] = useState(false);\n  const [claimingToken, setClaimingToken] = useState<string | undefined>();\n\n  const rewardTokensData = useTokensDataAsMap(allRewardsTokens);\n\n  console.log({ allClaimable, rewardTokensData });\n\n  const queryClient = useQueryClient();\n\n  // Claims all Fuse LM rewards at once\n  const handleClaimAll = useCallback(() => {\n    setClaimingAll(true);\n\n    // Claim from ALL available RDs\n    claimRewardsFromRewardsDistributors(\n      fuse,\n      address,\n      Object.keys(rewardsDistributorsMap)\n    )\n      .then(() => {\n        queryClient.refetchQueries();\n        setClaimingAll(false);\n        toast({\n          title: \"Claimed All Rewards!\",\n          description: \"\",\n          status: \"success\",\n          duration: 2000,\n          isClosable: true,\n          position: \"top-right\",\n        });\n      })\n      .catch((err) => {\n        setClaimingAll(false);\n        toast({\n          title: \"Error claiming rewards.\",\n          description: err.message,\n          status: \"error\",\n          duration: 2000,\n          isClosable: true,\n          position: \"top-right\",\n        });\n      });\n  }, [fuse, address, rewardsDistributorsMap]);\n\n  // Claims Fuse LM rewards for a single token\n  const handleClaimFuseRewardsForToken = useCallback(\n    (rewardToken: string) => {\n      const rDs = rewardTokensMap[rewardToken];\n      const rDAddresses = rDs.map((rD) => rD.rewardsDistributorAddress); // all rewardsdistributors for this token\n\n      if (!!rDs.length) {\n        setClaimingToken(rewardToken);\n        claimRewardsFromRewardsDistributors(fuse, address, rDAddresses)\n          .then(() => {\n            setClaimingToken(undefined);\n            toast({\n              title: `Claimed All ${rewardTokensData[rewardToken].symbol} Rewards!`,\n              description: \"\",\n              status: \"success\",\n              duration: 2000,\n              isClosable: true,\n              position: \"top-right\",\n            });\n          })\n          .catch((err) => {\n            setClaimingToken(undefined);\n            toast({\n              title: \"Error claiming rewards.\",\n              description: err.message,\n              status: \"error\",\n              duration: 2000,\n              isClosable: true,\n              position: \"top-right\",\n            });\n          });\n      }\n    },\n    [unclaimedFuseRewards, rewardsDistributorsMap, rewardTokensMap]\n  );\n\n  return (\n    <Column\n      mainAxisAlignment=\"flex-start\"\n      crossAxisAlignment=\"center\"\n      expand\n      p={3}\n    >\n      {allClaimable.length ? (\n        allClaimable.map((claimable) => {\n          const pools =\n            rewardTokensMap[claimable.unclaimed.rewardToken]?.reduce(\n              (agg: number[], rD) => {\n                return [...new Set([...agg, ...rD.pools])];\n              },\n              []\n            ) ?? [];\n          return (\n            <ClaimableRow\n              handleClaimFuseRewardsForToken={handleClaimFuseRewardsForToken}\n              unclaimed={claimable.unclaimed}\n              rewardTokenData={\n                rewardTokensData[claimable.unclaimed.rewardToken]\n              }\n              mode={claimable.mode}\n              claimingToken={claimingToken}\n              pools={pools}\n              my={1}\n            />\n          );\n        })\n      ) : (\n        <Heading textAlign=\"center\" size=\"md\">\n          No Claimable Rewards.\n        </Heading>\n      )}\n      {!!allClaimable.length && (\n        <GlowingButton\n          onClick={() => handleClaimAll()}\n          disabled={claimingAll}\n          width=\"100%\"\n          height=\"51px\"\n          my={4}\n        >\n          {claimingAll ? <Spinner /> : t(\"Claim All\")}\n        </GlowingButton>\n      )}\n    </Column>\n  );\n};\n\nconst ClaimableRow = ({\n  unclaimed,\n  handleClaimFuseRewardsForToken,\n  rewardTokenData,\n  claimingToken,\n  mode,\n  pools = [],\n  ...rowProps\n}: {\n  unclaimed: UnclaimedReward;\n  handleClaimFuseRewardsForToken?: (rewardToken: string) => void;\n  rewardTokenData: TokenData;\n  claimingToken?: string;\n  mode: ClaimMode;\n  pools?: number[];\n  [x: string]: any;\n}) => {\n  const { rari, address } = useRari();\n\n  const isClaimingToken = claimingToken === unclaimed.rewardToken;\n\n  const claimRewards = async () => {\n    let claimMethod;\n\n    // Old \"claim RGT\" code\n    if (mode !== \"fuse\") {\n      switch (mode) {\n        case \"private\":\n          claimMethod = rari.governance.rgt.vesting.claim;\n          break;\n        case \"yieldagg\":\n          claimMethod = rari.governance.rgt.distributions.claim;\n          break;\n        case \"pool2\":\n          claimMethod = rari.governance.rgt.sushiSwapDistributions.claim;\n          break;\n        default:\n          claimMethod = rari.governance.rgt.sushiSwapDistributions.claim;\n      }\n\n      console.log({ mode, claimMethod });\n\n      // Could do something with the receipt but notify.js is watching the account and will send a notification for us.\n      await claimMethod(rari.web3.utils.toBN(unclaimed.unclaimed), {\n        from: address,\n      });\n      return;\n    }\n\n    // If claiming fuse rewards\n    if (mode === \"fuse\" && !!handleClaimFuseRewardsForToken) {\n      handleClaimFuseRewardsForToken(unclaimed.rewardToken);\n    }\n  };\n\n  const unclaimedAmount =\n    parseFloat(unclaimed.unclaimed.toString()) /\n    (1 * 10 ** (rewardTokenData?.decimals ?? 18));\n\n  return (\n    <motion.div\n      initial={{ opacity: 0, y: 40 }}\n      animate={{ opacity: 1, y: 0 }}\n      exit={{ opacity: 0 }}\n      style={{ width: \"100%\", height: \"100%\" }}\n    >\n      <DashboardBox w=\"100%\" h=\"100%\" {...rowProps}>\n        <Row\n          expand\n          mainAxisAlignment=\"flex-start\"\n          crossAxisAlignment=\"center\"\n          p={3}\n        >\n          {/* Token and Pools */}\n          <Column\n            expand\n            mainAxisAlignment=\"flex-start\"\n            crossAxisAlignment=\"flex-start\"\n            py={2}\n          >\n            <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\">\n              <Image src={rewardTokenData?.logoURL ?? \"\"} boxSize=\"30px\" />{\" \"}\n              <Text fontWeight=\"bold\" ml={3}>\n                {rewardTokenData?.symbol}{\" \"}\n              </Text>{\" \"}\n            </Row>\n            {!!pools.length && (\n              <Row\n                expand\n                mainAxisAlignment=\"flex-start\"\n                crossAxisAlignment=\"center\"\n                px={6}\n                py={4}\n                // bg=\"aqua\"\n              >\n                <ul>\n                  {pools.map((p) => (\n                    <>\n                      <motion.li\n                        initial={{ opacity: 0, x: 40 }}\n                        animate={{ opacity: 1, x: 0 }}\n                        exit={{ opacity: 0 }}\n                      >\n                        <Text>Pool {p}</Text>\n                      </motion.li>\n                    </>\n                  ))}\n                </ul>\n              </Row>\n            )}\n            {mode === \"pool2\" ? (\n              <Row\n                expand\n                mainAxisAlignment=\"flex-start\"\n                crossAxisAlignment=\"center\"\n                px={6}\n                py={2}\n                // bg=\"aqua\"\n              >\n                <ul>\n                  <motion.li\n                    initial={{ opacity: 0, x: 40 }}\n                    animate={{ opacity: 1, x: 0 }}\n                    exit={{ opacity: 0 }}\n                  >\n                    <Text>Pool 2 Rewards</Text>\n                  </motion.li>\n                </ul>\n              </Row>\n            ) : null}\n          </Column>\n          {/* Reward amt and claim btn */}\n          <Column\n            expand\n            mainAxisAlignment=\"center\"\n            crossAxisAlignment=\"center\"\n            h=\"100%\"\n          >\n            <Row\n              mainAxisAlignment=\"flex-start\"\n              crossAxisAlignment=\"center\"\n              // bg=\"pink\"\n              h=\"100%\"\n            >\n              <SimpleTooltip\n                label={`${unclaimedAmount.toString()} ${\n                  rewardTokenData?.symbol\n                }`}\n              >\n                <Text fontWeight=\"bold\" ml={3}>\n                  {unclaimedAmount.toFixed(3)} {rewardTokenData?.symbol}\n                </Text>\n              </SimpleTooltip>\n              <Button\n                ml={2}\n                bg=\"black\"\n                onClick={() => claimRewards()}\n                disabled={isClaimingToken}\n              >\n                {isClaimingToken ? <Spinner /> : \"Claim\"}\n              </Button>\n            </Row>\n          </Column>\n        </Row>\n      </DashboardBox>\n    </motion.div>\n  );\n};\n"
  },
  {
    "path": "src/components/shared/CopyrightSpacer.tsx",
    "content": "import { Text } from \"@chakra-ui/react\";\n\nconst CopyrightSpacer = ({ forceShow = false }: { forceShow?: boolean }) => {\n  return (\n    <Text\n      color=\"#FFFFFF\"\n      fontSize=\"xs\"\n      display={forceShow ? \"block\" : { md: \"none\", base: \"block\" }}\n      textAlign=\"center\"\n      width=\"100%\"\n      bottom={0}\n      py={2}\n      mt=\"auto\"\n    >\n      © {new Date().getFullYear()} Rari Capital. All rights reserved.\n    </Text>\n  );\n};\n\nexport default CopyrightSpacer;\n"
  },
  {
    "path": "src/components/shared/CountdownBanner.tsx",
    "content": "import { Flex, Text, Box, Image, Collapse, Link } from \"@chakra-ui/react\"\nimport ArbitrumLogo from \"../../static/arbitrum-banner/arbitrum.png\";\nimport RightArrow from \"../../static/arbitrum-banner/right-arrow.png\";\nimport BGLeft from \"../../static/arbitrum-banner/bg-left.png\";\nimport BGRight from \"../../static/arbitrum-banner/bg-right.png\";\n\n\nimport { useEffect, useState } from \"react\"\n\nexport const CountdownBanner = () => {\n\n    const [isOpen, setIsOpen] = useState(false)\n    const [countdownValue, setCountdownValue] = useState(999999)\n    const [arrowXTranslate, setArrowXTranslate] = useState(0)\n    const final = new Date(Date.UTC(2022, 0, 24, 16, 0, 0, 0)).getTime()\n\n    const getCountdownSeconds = () => {\n        const now = new Date().getTime()\n        return (final - now) / 1000\n    }\n\n    const updateCountdownValue = () => {\n        let newCountdownValue = getCountdownSeconds()\n        setCountdownValue(newCountdownValue)\n        if(newCountdownValue > 0) {\n            setTimeout(() => {\n                updateCountdownValue()\n            }, 1000)\n        }\n    }\n\n    const getCountdownString = (inputSeconds: number) => {\n        let hours = inputSeconds / 3600\n        let minutes = (hours % 1) * 60\n        let seconds = (minutes % 1) * 60\n\n        let hoursText = hours < 10 ? '0'+Math.floor(hours) : Math.floor(hours)\n        let minutesText = minutes < 10 ? '0'+Math.floor(minutes) : Math.floor(minutes)\n        let secondsText = seconds < 10 ? '0'+Math.floor(seconds) : Math.floor(seconds)\n        \n        return hoursText + ':' + minutesText + ':' + secondsText\n    }\n\n    useEffect(() => {\n        updateCountdownValue()\n        setTimeout(() => {\n            setIsOpen(true)\n        }, 500)\n    }, [])\n\n\n\n    return (\n        <Link href='https://rari.app' isExternal _hover={{textDecoration: 'none'}}>\n        <Collapse in={isOpen}\n        onHoverStart={() => setArrowXTranslate(6)}\n        onHoverEnd={() => setArrowXTranslate(0)}\n        >\n        <Flex width=\"100%\" height=\"70px\" flexDirection={'column'} justifyContent={'center'}\n        backgroundImage={`url(${BGLeft}), url(${BGRight}), linear-gradient(90.05deg, #072FAD 4.01%, #0F82C7 96.95%)`}\n        backgroundSize={'contain'}\n        backgroundRepeat={'no-repeat'}\n        backgroundPosition={'left, right, left'}\n        >\n            <Flex width=\"100%\" flexDirection={'row'} justifyContent={'center'}>\n                    <Image width=\"30px\" height=\"34px\" src={ArbitrumLogo}/>\n                    <Text textTransform=\"uppercase\" fontSize={'xl'} color={'#FFFFFF'} marginX={\"12px\"} mt={\"3px\"} textShadow={'0px 0px 5px rgba(255, 255, 255, 0.5);'}>\n                        {countdownValue > 0 ? \n                        <>\n                        Arbitrum is live in <Box as='span' fontWeight=\"bold\">{getCountdownString(countdownValue)}</Box>\n                        </>\n                        :\n                        <>\n                        Arbitrum is <Box as='span' fontWeight=\"bold\">here</Box>\n                        </>\n                        }\n                    </Text>\n                    {countdownValue <= 0 && <Image height=\"28px\" width=\"28px\" src={RightArrow} mt=\"3px\" ml=\"-1px\" \n                    transform={`translate(${arrowXTranslate}px)`} \n                    transition={'transform 0.5s'}\n                    transitionTimingFunction={'ease-out'}/>}\n            </Flex>\n        </Flex>\n        </Collapse>\n        </Link>\n    )\n}\n\nexport default CountdownBanner"
  },
  {
    "path": "src/components/shared/DashboardBox.tsx",
    "content": "import { Box, BoxProps } from \"@chakra-ui/react\";\nimport { PixelMeasurement } from \"utils/chakraUtils\";\nimport { DarkGlowingBox } from \"./GlowingButton\";\n\nexport const DASHBOARD_BOX_SPACING = new PixelMeasurement(15);\n\nexport const DASHBOARD_BOX_PROPS = {\n  backgroundColor: \"#121212\",\n  borderRadius: \"10px\",\n  border: \"1px\",\n  borderColor: \"#272727\",\n};\n\ntype ExtendedBoxProps = BoxProps & { glow?: boolean };\n\nconst DashboardBox = ({\n  children,\n  glow = false,\n  ...props\n}: ExtendedBoxProps) => {\n  return (\n    <>\n      {glow ? (\n        <DarkGlowingBox {...DASHBOARD_BOX_PROPS} {...props}>\n          {children}\n        </DarkGlowingBox>\n      ) : (\n        <Box {...DASHBOARD_BOX_PROPS} {...props}>\n          {children}\n        </Box>\n      )}\n    </>\n  );\n};\n\nexport default DashboardBox;\n"
  },
  {
    "path": "src/components/shared/Footer.tsx",
    "content": "import CopyrightSpacer from \"./CopyrightSpacer\";\nimport { Link, Text } from \"@chakra-ui/react\";\nimport { Row, Column } from \"utils/chakraUtils\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Footer = () => {\n  const { t } = useTranslation();\n  return (\n    <>\n      <Column\n        mainAxisAlignment=\"center\"\n        crossAxisAlignment=\"center\"\n        py={3}\n        width=\"100%\"\n        flexShrink={0}\n        mt=\"auto\"\n      >\n        <Row\n          mainAxisAlignment=\"center\"\n          crossAxisAlignment=\"center\"\n          mt={4}\n          width=\"100%\"\n        >\n          <Link isExternal href=\"https://docs.rari.capital/\">\n            <Text color=\"white\" mx={2} text=\"sm\" textDecoration=\"underline\">\n              {t(\"Developer Docs\")}\n            </Text>\n          </Link>\n\n          <Text color=\"white\" text=\"sm\">\n            ·\n          </Text>\n\n          <Link isExternal href=\"https://info.rari.capital\">\n            <Text color=\"white\" mx={2} text=\"sm\" textDecoration=\"underline\">\n              {t(\"Learn\")}\n            </Text>\n          </Link>\n\n          <Text color=\"white\" text=\"sm\">\n            ·\n          </Text>\n\n          <Link\n            target=\"_blank\"\n            href=\"https://info.rari.capital/security/#smart-contract-audits\"\n          >\n            <Text color=\"white\" mx={2} text=\"sm\" textDecoration=\"underline\">\n              {t(\"Audits\")}\n            </Text>\n          </Link>\n        </Row>\n        <CopyrightSpacer forceShow />\n      </Column>\n    </>\n  );\n};\n\nexport default Footer;\n"
  },
  {
    "path": "src/components/shared/FullPageSpinner.test.tsx",
    "content": "import { ChakraProvider } from \"@chakra-ui/react\";\nimport { render, screen } from \"@testing-library/react\";\n\nimport FullPageSpinner from \"./FullPageSpinner\";\n\ntest(\"renders spinner\", async () => {\n  render(\n    <ChakraProvider>\n      <FullPageSpinner />\n    </ChakraProvider>\n  );\n\n  expect(screen.getByTestId(\"full-page-spinner\")).toBeInTheDocument();\n});\n"
  },
  {
    "path": "src/components/shared/FullPageSpinner.tsx",
    "content": "/* istanbul ignore file */\nimport { useEffect, useState } from \"react\";\nimport { Spinner, Text } from \"@chakra-ui/react\";\n\nconst FullPageSpinner = () => {\n  const [isText, setIsText] = useState(true);\n\n  useEffect(() => {\n    const timer = setTimeout(() => setIsText(false), 3000);\n\n    return () => {\n      clearTimeout(timer);\n    };\n  }, [setIsText]);\n\n  return isText ? (\n    <Text\n      data-testid=\"full-page-spinner\"\n      color=\"#FFF\"\n      fontSize=\"xl\"\n      style={{\n        position: \"fixed\",\n        left: \"50%\",\n        top: \"50%\",\n        marginTop: \"-15px\",\n        marginLeft: \"-45px\",\n      }}\n    >\n      Loading...\n    </Text>\n  ) : (\n    <Spinner\n      data-testid=\"full-page-spinner\"\n      style={{\n        position: \"fixed\",\n        left: \"50%\",\n        top: \"50%\",\n        marginTop: \"-1.5rem\",\n        marginLeft: \"-1.5rem\",\n      }}\n      thickness=\"4px\"\n      speed=\"0.65s\"\n      emptyColor=\"gray.200\"\n      color=\"#121212\"\n      size=\"xl\"\n    />\n  );\n};\n\nexport default FullPageSpinner;\n"
  },
  {
    "path": "src/components/shared/GlowingButton.tsx",
    "content": "import { Box, BoxProps, Button } from \"@chakra-ui/react\";\n\nimport { ReactElement } from \"react\";\n\nexport const GlowingButton = ({\n  children,\n  onClick,\n  leftIcon,\n  disabled,\n  ...boxProps\n}: BoxProps & {\n  leftIcon?: ReactElement;\n  onClick: () => any;\n  disabled?: boolean;\n}) => {\n  return (\n    <GlowingBox {...boxProps}>\n      <Button\n        bg=\"#FFFFFF\"\n        color=\"#000000\"\n        borderRadius=\"7px\"\n        fontWeight=\"bold\"\n        width=\"100%\"\n        height=\"100%\"\n        leftIcon={leftIcon}\n        onClick={onClick}\n        isDisabled={disabled ?? false}\n        _focus={{ boxShadow: \"0 0 3pt 3pt #2F74AF\" }}\n        _disabled={{ cursor: \"not-allowed\" }}\n        fontSize={boxProps.fontSize ?? \"xl\"}\n      >\n        {children}\n      </Button>\n    </GlowingBox>\n  );\n};\n\nexport const DarkGlowingButton = ({\n  label,\n  onClick,\n  leftIcon,\n  disabled,\n  bg,\n  ...boxProps\n}: BoxProps & {\n  leftIcon?: ReactElement;\n  onClick: () => any;\n  label: string;\n  disabled?: boolean;\n  bg?: any;\n}) => {\n  return (\n    <DarkGlowingBox {...boxProps}>\n      <Button\n        color=\"#FFF\"\n        bg=\"#121212\"\n        borderRadius=\"7px\"\n        fontWeight=\"bold\"\n        width=\"100%\"\n        height=\"100%\"\n        leftIcon={leftIcon}\n        onClick={onClick}\n        isDisabled={disabled ?? false}\n        _hover={{}}\n        _active={{}}\n        _focus={{ boxShadow: \"0 0 3pt 3pt #2F74AF\" }}\n        _disabled={{ cursor: \"not-allowed\" }}\n        fontSize={boxProps.fontSize ?? \"xl\"}\n      >\n        {label}\n      </Button>\n    </DarkGlowingBox>\n  );\n};\n\nexport const GlowingBox = ({\n  children,\n  ...boxProps\n}: {\n  children: any;\n  [x: string]: any;\n}) => (\n  <Box\n    padding=\"3px\"\n    borderRadius=\"10px\"\n    background=\"linear-gradient(45deg,\n    rgb(255, 0, 0) 0%,\n    rgb(255, 154, 0) 10%,\n    rgb(208, 222, 33) 20%,\n    rgb(79, 220, 74) 30%,\n    rgb(63, 218, 216) 40%,\n    rgb(47, 201, 226) 50%,\n    rgb(28, 127, 238) 60%,\n    rgb(95, 21, 242) 70%,\n    rgb(186, 12, 248) 80%,\n    rgb(251, 7, 217) 90%,\n    rgb(255, 0, 0) 100%)\"\n    backgroundSize=\"500% 500%\"\n    animation=\"GradientBackgroundAnimation 6s linear infinite\"\n    {...boxProps}\n  >\n    {children}\n  </Box>\n);\n\nexport const DarkGlowingBox = ({\n  children,\n  ...boxProps\n}: {\n  children: any;\n  [x: string]: any;\n}) => (\n  <Box\n    padding=\"2px\"\n    borderRadius=\"9px\"\n    background=\"linear-gradient(45deg,\n        rgb(255, 0, 0) 0%,\n        rgb(255, 154, 0) 10%,\n        rgb(208, 222, 33) 20%,\n        rgb(79, 220, 74) 30%,\n        rgb(63, 218, 216) 40%,\n        rgb(47, 201, 226) 50%,\n        rgb(28, 127, 238) 60%,\n        rgb(95, 21, 242) 70%,\n        rgb(186, 12, 248) 80%,\n        rgb(251, 7, 217) 90%,\n        rgb(255, 0, 0) 100%)\"\n    backgroundSize=\"500% 500%\"\n    animation=\"GradientBackgroundAnimation 6s linear infinite\"\n    {...boxProps}\n  >\n    {children}\n  </Box>\n);\n"
  },
  {
    "path": "src/components/shared/Header.tsx",
    "content": "import { MouseEventHandler } from \"react\";\n\nimport {\n  Box,\n  Link,\n  Text,\n  Menu,\n  MenuButton,\n  MenuList,\n  MenuItem,\n  Portal,\n} from \"@chakra-ui/react\";\nimport { PixelSize, Row } from \"utils/chakraUtils\";\n\nimport { AccountButton } from \"./AccountButton\";\nimport { DASHBOARD_BOX_PROPS, DASHBOARD_BOX_SPACING } from \"./DashboardBox\";\nimport {\n  AnimatedFuseSmallLogo,\n  AnimatedPoolLogo,\n  AnimatedSmallLogo,\n  FuseSmallLogo,\n  PoolLogo,\n} from \"./Logos\";\nimport { Link as RouterLink, useLocation } from \"react-router-dom\";\n\nimport { useTranslation } from \"react-i18next\";\n\nexport const HeaderHeightWithTopPadding = new PixelSize(\n  38 + DASHBOARD_BOX_SPACING.asNumber()\n);\n\nexport const Header = ({\n  isAuthed,\n  isPool,\n  isFuse,\n  padding,\n}: {\n  isAuthed: boolean;\n  isFuse?: boolean;\n  isPool?: boolean;\n  padding?: boolean;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <Row\n      color=\"#FFFFFF\"\n      px={padding ? 4 : 0}\n      height=\"38px\"\n      my={4}\n      mainAxisAlignment=\"space-between\"\n      crossAxisAlignment=\"center\"\n      overflowX=\"visible\"\n      overflowY=\"visible\"\n      width=\"100%\"\n    >\n      {isAuthed ? (\n        isPool ? (\n          <AnimatedPoolLogo />\n        ) : isFuse ? (\n          <AnimatedFuseSmallLogo />\n        ) : (\n          <AnimatedSmallLogo />\n        )\n      ) : isPool ? (\n        <PoolLogo />\n      ) : isFuse ? (\n        <FuseSmallLogo />\n      ) : (\n        <AnimatedSmallLogo />\n      )}\n\n      <Row\n        mx={4}\n        expand\n        mainAxisAlignment={{ md: \"space-around\", base: \"space-between\" }}\n        crossAxisAlignment=\"flex-start\"\n        overflowX=\"auto\"\n        overflowY=\"hidden\"\n        transform=\"translate(0px, 7px)\"\n      >\n        <HeaderLink name={t(\"Overview\")} route=\"/\" />\n\n        <HeaderLink ml={4} name={t(\"Fuse\")} route=\"/fuse\" />\n\n        <PoolsLink ml={3} />\n\n        <HeaderLink ml={4} name={t(\"Pool2\")} route=\"/pool2\" />\n\n        <HeaderLink ml={4} name={t(\"Tranches\")} route=\"/tranches\" />\n\n        <Box ml={4}>\n          <Menu autoSelect={false} placement=\"bottom\">\n            <MenuButton>\n              <SubMenuText text={t(\"Governance\")} />\n            </MenuButton>\n\n            <Portal>\n              <MenuList {...DASHBOARD_BOX_PROPS} color=\"#FFF\" minWidth=\"110px\">\n                <SubMenuItem\n                  name={t(\"Snapshot\")}\n                  link=\"https://vote.rari.capital/\"\n                />\n                <SubMenuItem\n                  name={t(\"Forums\")}\n                  link=\"https://forums.rari.capital/\"\n                />\n              </MenuList>\n            </Portal>\n          </Menu>\n        </Box>\n\n        <UtilsLink ml={4} isAuthed={isAuthed} />\n      </Row>\n\n      <AccountButton />\n    </Row>\n  );\n};\n\nexport const UtilsLink = ({\n  isAuthed,\n  ml,\n}: {\n  isAuthed: boolean;\n  ml?: number | string;\n}) => {\n  const { t } = useTranslation();\n\n  return (\n    <Box ml={ml ?? 0}>\n      <Menu autoSelect={false} placement=\"bottom\">\n        <MenuButton>\n          <SubMenuText text={t(\"Utilities\")} parentLink=\"/utils\" />\n        </MenuButton>\n\n        <Portal>\n          <MenuList {...DASHBOARD_BOX_PROPS} color=\"#FFF\" minWidth=\"110px\">\n            {isAuthed && (\n              <SubMenuItem name={t(\"Positions\")} link=\"/utils/positions\" />\n            )}\n\n            <SubMenuItem\n              name={t(\"Interest Rates\")}\n              link=\"/utils/interest-rates\"\n            />\n          </MenuList>\n        </Portal>\n      </Menu>\n    </Box>\n  );\n};\n\nexport const PoolsLink = ({ ml }: { ml?: number | string }) => {\n  const { t } = useTranslation();\n  return (\n    <Box ml={ml ?? 0}>\n      <Menu autoSelect={false} placement=\"bottom\">\n        <MenuButton>\n          <SubMenuText text={t(\"Pools\")} parentLink=\"/pools\" />\n        </MenuButton>\n\n        <Portal>\n          <MenuList {...DASHBOARD_BOX_PROPS} color=\"#FFF\" minWidth=\"110px\">\n            <SubMenuItem name={t(\"USDC Pool\")} link=\"/pools/usdc\" />\n            <SubMenuItem name={t(\"DAI Pool\")} link=\"/pools/dai\" />\n            <SubMenuItem name={t(\"Yield Pool\")} link=\"/pools/yield\" />\n            <SubMenuItem name={t(\"ETH Pool\")} link=\"/pools/eth\" />\n          </MenuList>\n        </Portal>\n      </Menu>\n    </Box>\n  );\n};\n\nexport const SubMenuText = ({\n  text,\n  parentLink,\n}: {\n  text: string;\n  parentLink?: string;\n}) => {\n  const location = useLocation();\n  const { t } = useTranslation();\n  const isOnThisRoute = parentLink\n    ? location.pathname.includes(parentLink)\n    : false;\n\n  return <Text fontWeight={isOnThisRoute ? \"bold\" : \"normal\"}>{t(text)}</Text>;\n};\n\nexport const SubMenuItem = ({ name, link }: { name: string; link: string }) => {\n  return (\n    <MenuItem _focus={{ bg: \"#2b2a2a\" }} _hover={{ bg: \"#2b2a2a\" }}>\n      <Box mx=\"auto\">\n        <HeaderLink name={name} route={link} />\n      </Box>\n    </MenuItem>\n  );\n};\n\nexport const HeaderLink = ({\n  name,\n  route,\n  ml,\n  onMouseOver,\n  onMouseOut,\n}: {\n  name: string;\n  route: string;\n\n  ml?: number | string;\n  onMouseOver?: MouseEventHandler<HTMLAnchorElement>;\n  onMouseOut?: MouseEventHandler<HTMLAnchorElement>;\n}) => {\n  const location = useLocation();\n\n  const isExternal = route.startsWith(\"http\");\n\n  const isOnThisRoute =\n    location.pathname === route ||\n    location.pathname.replace(/\\/+$/, \"\") === route;\n\n  return isExternal ? (\n    <Link\n      href={route}\n      isExternal\n      ml={ml ?? 0}\n      whiteSpace=\"nowrap\"\n      className=\"no-underline\"\n      onMouseOver={onMouseOver}\n      onMouseOut={onMouseOut}\n    >\n      <Text fontWeight={isOnThisRoute ? \"bold\" : \"normal\"}>{name}</Text>\n    </Link>\n  ) : (\n    <Link\n      /* @ts-ignore */\n      as={RouterLink}\n      to={route}\n      ml={ml ?? 0}\n      whiteSpace=\"nowrap\"\n      className=\"no-underline\"\n      onMouseOver={onMouseOver}\n      onMouseOut={onMouseOut}\n    >\n      <Text fontWeight={isOnThisRoute ? \"bold\" : \"normal\"}>{name}</Text>\n    </Link>\n  );\n};\n"
  },
  {
    "path": "src/components/shared/Layout.tsx",
    "content": "//@ts-nocheck\n\nimport { Column } from \"utils/chakraUtils\";\nimport CountdownBanner from \"./CountdownBanner\";\n// import Footer from \"./Footer\";\n\nconst Layout = ({ children }: { children: any }) => {\n  return (\n    <Column height=\"100%\" flex={1}>\n      <CountdownBanner />\n      {children}\n    </Column>\n  );\n};\n\nexport default Layout;\n"
  },
  {
    "path": "src/components/shared/Logos.tsx",
    "content": "// @ts-ignore\n\nimport { Flip } from \"react-awesome-reveal\";\nimport { Box, Image } from \"@chakra-ui/react\";\n\n//PNGS\nimport Logo from \"../../static/small-logo.png\";\nimport FuseLogo from \"../../static/fuseicon.png\";\nimport TransparentLogo from \"../../static/small-transparent-logo.png\";\n\nimport StatsPNGWhite from \"static/positionsIcons/stats.png\";\nimport StatsPNGGreen from \"static/positionsIcons/statsGreen.png\";\nimport EarnPNGWhite from \"static/positionsIcons/earn.png\";\nimport EarnPNGGreen from \"static/positionsIcons/earnGreen.png\";\nimport FusePNGWhite from \"static/positionsIcons/fuse.png\";\nimport FusePNGGreen from \"static/positionsIcons/fuseGreen.png\";\nimport Pool2PNGWhite from \"static/positionsIcons/pool2.png\";\nimport Pool2PNGGreen from \"static/positionsIcons/pool2Green.png\";\nimport TranchesPNGWhite from \"static/positionsIcons/tranches.png\";\nimport TranchesPNGGreen from \"static/positionsIcons/tranchesGreen.png\";\n\nimport { usePoolInfoFromContext } from \"../../hooks/usePoolInfo\";\n\nexport const ExtraSmallTransparentLogo = () => {\n  return <SmallTransparentLogo boxSize=\"20px\" />;\n};\n\nexport const SmallLogo = ({ boxSize }: { boxSize?: string }) => {\n  return (\n    <Box boxSize={boxSize ?? \"37px\"} flexShrink={0}>\n      <Image boxSize={boxSize ?? \"37px\"} src={Logo} />\n    </Box>\n  );\n};\n\nexport const AnimatedSmallLogo = ({ boxSize }: { boxSize?: string }) => {\n  return (\n    <Flip delay={300}>\n      <SmallLogo boxSize={boxSize} />\n    </Flip>\n  );\n};\n\nexport const FuseSmallLogo = ({ boxSize }: { boxSize?: string }) => {\n  return (\n    <Box boxSize={boxSize ?? \"37px\"} flexShrink={0}>\n      <Image boxSize={boxSize ?? \"37px\"} src={FuseLogo} />\n    </Box>\n  );\n};\n\nexport const AnimatedFuseSmallLogo = ({ boxSize }: { boxSize?: string }) => {\n  return (\n    <Flip delay={300}>\n      <FuseSmallLogo boxSize={boxSize} />\n    </Flip>\n  );\n};\n\nexport const SmallTransparentLogo = ({ boxSize }: { boxSize?: string }) => {\n  return (\n    <Box boxSize={boxSize ?? \"37px\"} flexShrink={0}>\n      <Image boxSize={boxSize ?? \"37px\"} src={TransparentLogo} />\n    </Box>\n  );\n};\n\nexport const AnimatedPoolLogo = ({ boxSize }: { boxSize?: string }) => {\n  return (\n    <Flip delay={300}>\n      <PoolLogo boxSize={boxSize} />\n    </Flip>\n  );\n};\n\nexport const PoolLogo = ({ boxSize }: { boxSize?: string }) => {\n  const { poolLogo } = usePoolInfoFromContext();\n\n  return (\n    <Box boxSize={boxSize ?? \"37px\"} flexShrink={0}>\n      <Image boxSize={boxSize ?? \"37px\"} src={poolLogo} />\n    </Box>\n  );\n};\n\nexport const PNGLogo = ({\n  boxSize = \"20px\",\n  Logo = FuseLogo,\n  width = \"20px\",\n  height = \"20px\",\n  ...props\n}: {\n  boxSize?: string;\n  Logo?: any;\n  width?: string;\n  height?: string;\n  props?: any;\n}) => {\n  return (\n    <Box boxSize={boxSize} flexShrink={0}>\n      <Image\n        boxSize={boxSize}\n        src={Logo}\n        width={width}\n        height={height}\n        {...props}\n      />\n    </Box>\n  );\n};\n\nexport const StatsLogoPNGWhite = ({ boxSize }: { boxSize?: string }) => (\n  <PNGLogo boxSize={boxSize} Logo={StatsPNGWhite} />\n);\n\nexport const StatsLogoPNGGreen = ({ boxSize }: { boxSize?: string }) => (\n  <PNGLogo boxSize={boxSize} Logo={StatsPNGGreen} />\n);\n\nexport const EarnLogoPNGWhite = ({ boxSize }: { boxSize?: string }) => (\n  <PNGLogo boxSize={boxSize} Logo={EarnPNGWhite} />\n);\n\nexport const EarnLogoPNGGreen = ({ boxSize }: { boxSize?: string }) => (\n  <PNGLogo boxSize={boxSize} Logo={EarnPNGGreen} />\n);\n\nexport const FuseLogoPNGWhite = ({\n  boxSize,\n  ...props\n}: {\n  boxSize?: string;\n  props?: any;\n}) => <PNGLogo boxSize={boxSize} Logo={FusePNGWhite} {...props} />;\n\nexport const FuseLogoPNGGreen = ({ boxSize }: { boxSize?: string }) => (\n  <PNGLogo boxSize={boxSize} Logo={FusePNGGreen} />\n);\n\nexport const Pool2LogoPNGWhite = ({\n  boxSize,\n  width,\n  height,\n}: {\n  boxSize?: string;\n  width?: string;\n  height?: string;\n}) => (\n  <PNGLogo\n    boxSize={boxSize}\n    Logo={Pool2PNGWhite}\n    width={width}\n    height={height}\n  />\n);\n\nexport const Pool2LogoPNGGreen = ({\n  boxSize,\n  width,\n  height,\n}: {\n  boxSize?: string;\n  width?: string;\n  height?: string;\n}) => (\n  <PNGLogo\n    boxSize={boxSize}\n    Logo={Pool2PNGGreen}\n    width={width}\n    height={height}\n  />\n);\n\nexport const TranchesLogoPNGWhite = ({ boxSize }: { boxSize?: string }) => (\n  <PNGLogo boxSize={boxSize} Logo={TranchesPNGWhite} />\n);\n\nexport const TranchesLogoPNGGreen = ({ boxSize }: { boxSize?: string }) => (\n  <PNGLogo boxSize={boxSize} Logo={TranchesPNGGreen} />\n);\n"
  },
  {
    "path": "src/components/shared/Modal.tsx",
    "content": "import { DASHBOARD_BOX_PROPS } from \"./DashboardBox\";\nimport { Box, Heading, CloseButton } from \"@chakra-ui/react\";\nimport { Row } from \"utils/chakraUtils\";\n\nexport const MODAL_PROPS = {\n  width: { md: \"450px\", base: \"92%\" },\n  color: \"#FFFFFF\",\n  ...DASHBOARD_BOX_PROPS,\n};\n\nexport const ModalTitle = ({ text }: { text: string }) => {\n  return (\n    <Row\n      width=\"100%\"\n      mainAxisAlignment=\"center\"\n      crossAxisAlignment=\"center\"\n      p={4}\n    >\n      <Heading fontSize=\"27px\">{text}</Heading>\n    </Row>\n  );\n};\n\nexport const ModalTitleWithCloseButton = ({\n  text,\n  onClose,\n}: {\n  text: string;\n  onClose: () => any;\n}) => {\n  return (\n    <Row\n      width=\"100%\"\n      mainAxisAlignment=\"space-between\"\n      crossAxisAlignment=\"center\"\n      p={4}\n    >\n      <Box width=\"32px\" />\n      <Heading fontSize=\"27px\" lineHeight=\"1.25em\">\n        {text}\n      </Heading>\n      <CloseButton onClick={onClose} />\n    </Row>\n  );\n};\n\nexport const ModalDivider = ({ ...others }: { [key: string]: any }) => {\n  return <Box h=\"1px\" width=\"100%\" flexShrink={0} bg=\"#272727\" {...others} />;\n};\n"
  },
  {
    "path": "src/components/shared/MovingStat.tsx",
    "content": "import { useEffect, useMemo, useState } from \"react\";\nimport * as React from \"react\";\nimport { useQuery } from \"react-query\";\nimport CaptionedStat, { CaptionedStatProps } from \"./CaptionedStat\";\nimport { ABILLY } from \"constants/homepage\";\n\nexport function useInterval(callback: () => any, delay: number) {\n  const intervalId = React.useRef<null | number>(null);\n  const savedCallback = React.useRef(callback);\n  React.useEffect(() => {\n    savedCallback.current = callback;\n  });\n  React.useEffect(() => {\n    const tick = () => savedCallback.current();\n    if (typeof delay === \"number\") {\n      intervalId.current = window.setInterval(tick, delay);\n      return () => {\n        window.clearInterval(intervalId.current!);\n      };\n    }\n  }, [delay]);\n  return intervalId.current;\n}\n\ntype RefetchMovingStatProps = Omit<CaptionedStatProps, \"stat\"> & {\n  queryKey: string;\n  /** In milliseconds like: 1000, 500, 20, 10, 221 */\n  interval: number;\n  fetch: () => Promise<string>;\n  loadingPlaceholder: string;\n};\n\nexport const RefetchMovingStat = React.memo(\n  ({\n    interval,\n    loadingPlaceholder,\n    queryKey,\n    fetch,\n    ...statProps\n  }: RefetchMovingStatProps) => {\n    const { data } = useQuery(queryKey, fetch, {\n      refetchInterval: interval,\n    });\n\n    return <CaptionedStat {...statProps} stat={data ?? loadingPlaceholder} />;\n  }\n);\n\ntype APYMovingStatProps = Omit<CaptionedStatProps, \"stat\"> & {\n  startingAmount: number;\n\n  /** This should be a percent like: 0.1, 0.08, 0.12, 0.192 */\n  apy: number;\n\n  /** This should be in milliseconds like: 1000, 200, 100, 20 */\n  interval: number;\n\n  formatStat: (num: number) => string;\n};\n\nexport const APYMovingStat = React.memo(\n  ({\n    startingAmount,\n    formatStat,\n    interval,\n    apy,\n    ...statProps\n  }: APYMovingStatProps) => {\n    const increasePerInterval = useMemo(() => {\n      const percentIncreasePerMillisecond = apy / 365 / 24 / 60 / 60 / 1000;\n\n      const percentIncreasePerInterval =\n        percentIncreasePerMillisecond * interval;\n\n      return percentIncreasePerInterval;\n    }, [interval, apy]);\n\n    const [currentStat, setCurrentStat] = useState(startingAmount);\n\n    const formattedStat = useMemo(\n      () => formatStat(currentStat),\n      [formatStat, currentStat]\n    );\n\n    useInterval(() => {\n      setCurrentStat((past) => past + past * increasePerInterval);\n    }, interval);\n\n    return <CaptionedStat {...statProps} stat={formattedStat} />;\n  }\n);\n\ntype APYWithRefreshMovingProps = Omit<\n  Omit<APYMovingStatProps, \"interval\">,\n  \"startingAmount\"\n> &\n  Omit<Omit<RefetchMovingStatProps, \"interval\">, \"fetch\"> & {\n    fetch: () => Promise<number>;\n    fetchInterval: number;\n    apyInterval: number;\n  };\n\nexport const APYWithRefreshMovingStat = React.memo(\n  ({\n    queryKey,\n    formatStat,\n    fetchInterval,\n    apyInterval,\n    loadingPlaceholder,\n    fetch,\n    apy,\n    ...statProps\n  }: APYWithRefreshMovingProps) => {\n    const increasePerInterval = useMemo(() => {\n      const percentIncreasePerMillisecond = apy / 365 / 24 / 60 / 60 / 1000;\n\n      const percentIncreasePerInterval =\n        percentIncreasePerMillisecond * apyInterval;\n\n      return percentIncreasePerInterval;\n    }, [apyInterval, apy]);\n\n    const [currentStat, setCurrentStat] = useState(0);\n\n    const formattedStat = useMemo(\n      () => formatStat(currentStat),\n      [formatStat, currentStat]\n    );\n\n    useInterval(() => {\n      setCurrentStat((past) => past + past * increasePerInterval);\n    }, apyInterval);\n\n    const { data } = useQuery(queryKey, fetch, {\n      refetchInterval: fetchInterval,\n    });\n\n    useEffect(() => {\n      if (data) {\n        setCurrentStat(data);\n      }\n    }, [data]);\n\n    const celebrate = useMemo(() => currentStat > ABILLY, [currentStat]);\n\n    return (\n      <CaptionedStat\n        {...statProps}\n        stat={\n          !data\n            ? loadingPlaceholder\n            : celebrate\n            ? `${formattedStat}`\n            : formattedStat\n        }\n      />\n    );\n  }\n);\n"
  },
  {
    "path": "src/components/shared/PoolsPerformance.tsx",
    "content": "import { Box, Text } from \"@chakra-ui/react\";\nimport {\n  useSpacedLayout,\n  PixelSize,\n  ResponsivePixelSize,\n  PercentageSize,\n  Row,\n  Center,\n} from \"utils/chakraUtils\";\nimport { useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { PoolReturnChartOptions } from \"../../utils/chartOptions\";\n\nimport Chart from \"react-apexcharts\";\n\nimport { usePoolAPY } from \"../../hooks/usePoolAPY\";\n\nimport { SimpleTooltip } from \"./SimpleTooltip\";\nimport { PropagateLoader } from \"react-spinners\";\nimport { InfoIcon } from \"@chakra-ui/icons\";\nimport { Pool } from \"../../utils/poolUtils\";\n\nconst PoolsPerformanceChart = ({ size }: { size: number }) => {\n  const {\n    childSizes: [topPadding, statsSize, chartSize],\n  } = useSpacedLayout({\n    parentHeight: size,\n    spacing: 0,\n    childSizes: [\n      new PixelSize(15),\n      new ResponsivePixelSize({\n        desktop: 20,\n        mobile: 30,\n      }),\n      new PercentageSize(1),\n      // This accounts for 10px of bottom padding\n      new PixelSize(10),\n    ],\n  });\n\n  const { t } = useTranslation();\n\n  const ethAPY = usePoolAPY(Pool.ETH);\n  const stableAPY = usePoolAPY(Pool.USDC);\n  const daiAPY = usePoolAPY(Pool.DAI);\n  const yieldAPY = usePoolAPY(Pool.YIELD);\n\n  const points = useMemo(() => {\n    if (ethAPY && stableAPY && yieldAPY && daiAPY) {\n      const ethAPYPercentPerDay = parseFloat(ethAPY) / 100 / 365;\n      const stableAPYPercentPerDay = parseFloat(stableAPY) / 100 / 365;\n      const yieldAPYPercentPerDay = parseFloat(yieldAPY) / 100 / 365;\n      const daiAPYPercentPerDay = parseFloat(daiAPY) / 100 / 365;\n\n      let now = new Date();\n\n      let ethBalance = 10000;\n      let stableBalance = 10000;\n      let yieldBalance = 10000;\n      let daiBalance = 10000;\n\n      let stablePoints = [];\n      let yieldPoints = [];\n      let ethPoints = [];\n      let daiPoints = [];\n\n      let i = 1;\n\n      const dayInterval = 5;\n\n      while (i < 365) {\n        ethBalance =\n          ethBalance +\n          ethBalance *\n            (ethAPYPercentPerDay * dayInterval) *\n            (Math.random() * 2);\n        stableBalance =\n          stableBalance +\n          stableBalance *\n            (stableAPYPercentPerDay * dayInterval) *\n            (Math.random() * 2);\n        yieldBalance =\n          yieldBalance +\n          yieldBalance *\n            (yieldAPYPercentPerDay * dayInterval) *\n            (Math.random() * 2);\n        daiBalance =\n          daiBalance +\n          daiBalance *\n            (daiAPYPercentPerDay * dayInterval) *\n            (Math.random() * 2);\n\n        now.setDate(now.getDate() + dayInterval);\n\n        const formattedDate =\n          now.getMonth() + 1 + \"/\" + now.getDate() + \"/\" + now.getFullYear();\n\n        stablePoints.push({\n          x: formattedDate,\n\n          y: stableBalance,\n        });\n\n        yieldPoints.push({\n          x: formattedDate,\n\n          y: yieldBalance,\n        });\n\n        ethPoints.push({\n          x: formattedDate,\n\n          y: ethBalance,\n        });\n\n        daiPoints.push({\n          x: formattedDate,\n\n          y: daiBalance,\n        });\n\n        i += dayInterval;\n      }\n\n      return [\n        {\n          name: \"Yield Pool\",\n          data: yieldPoints,\n        },\n        {\n          name: \"Stable Pool\",\n          data: stablePoints,\n        },\n        {\n          name: \"DAI Pool\",\n          data: daiPoints,\n        },\n        {\n          name: \"ETH Pool\",\n          data: ethPoints,\n        },\n      ];\n    } else {\n      return null;\n    }\n  }, [yieldAPY, stableAPY, ethAPY, daiAPY]);\n\n  return (\n    <>\n      <Row\n        color=\"#FFFFFF\"\n        mainAxisAlignment={{ md: \"flex-start\", base: \"center\" }}\n        crossAxisAlignment=\"center\"\n        px={4}\n        mt={topPadding.asPxString()}\n        height={statsSize.asPxString()}\n        width=\"100%\"\n      >\n        <SimpleTooltip\n          label={t(\n            \"This chart is generated using the APYs of each pool (shown at the bottom of this page). It introduces a random variance in the APY each day, with a max of 2x the current pool APY, and a minimum of 0% APY. It does not account for large changes in APY (greater than 2x), divergence loss in the Yield Pool, or take into account ETH price. The ETH Pool simulation is not denominated in ETH, instead it simulates returns on USD using the current APY of the ETH Pool. In the ETH pool you are exposed to the price movements of ETH (which is not shown or accounted for in this simulation).\"\n          )}\n        >\n          <Text\n            fontSize=\"xs\"\n            textAlign=\"center\"\n            textTransform=\"uppercase\"\n            letterSpacing=\"wide\"\n            color=\"#858585\"\n          >\n            {t(\"1 Year of Returns Simulated Using Current Yields\")}\n            <InfoIcon name=\"info\" ml=\"5px\" boxSize=\"9px\" mb=\"3px\" />\n          </Text>\n        </SimpleTooltip>\n      </Row>\n\n      <Box height={chartSize.asPxString()} overflow=\"hidden\">\n        {!points ? (\n          <Center expand>\n            <PropagateLoader size={20} color=\"#FFFFFF\" loading />\n          </Center>\n        ) : (\n          <Chart\n            options={PoolReturnChartOptions}\n            type=\"line\"\n            width=\"100%\"\n            height=\"100%\"\n            series={points}\n          />\n        )}\n      </Box>\n    </>\n  );\n};\n\nexport default PoolsPerformanceChart;\n"
  },
  {
    "path": "src/components/shared/ProgressBar.tsx",
    "content": "import { BoxProps, Box } from \"@chakra-ui/react\";\n\ninterface Props {\n  percentageFilled: number;\n}\n\nconst ProgressBar = ({\n  percentageFilled,\n\n  ...others\n}: Props & BoxProps) => {\n  return (\n    <Box bg=\"#4D4D4D\" width=\"100%\" height=\"10px\" borderRadius=\"6px\" {...others}>\n      <Box\n        bg=\"#FFFFFF\"\n        width={percentageFilled * 100 + \"%\"}\n        height=\"10px\"\n        borderRadius=\"6px\"\n      />\n    </Box>\n  );\n};\n\nexport default ProgressBar;\n"
  },
  {
    "path": "src/components/shared/SimpleTooltip.tsx",
    "content": "import { Tooltip } from \"@chakra-ui/react\";\nimport { ReactNode } from \"react\";\n\nexport const SimpleTooltip = ({\n  label,\n  children,\n  placement,\n}: {\n  label: string;\n  placement?:\n    | \"top\"\n    | \"right\"\n    | \"bottom\"\n    | \"left\"\n    | \"auto\"\n    | \"auto-start\"\n    | \"auto-end\"\n    | \"top-start\"\n    | \"top-end\"\n    | \"bottom-start\"\n    | \"bottom-end\"\n    | \"right-start\"\n    | \"right-end\"\n    | \"left-start\"\n    | \"left-end\";\n  children: ReactNode;\n}) => {\n  return (\n    <Tooltip\n      p={1}\n      hasArrow\n      bg=\"#000\"\n      textAlign=\"center\"\n      zIndex={999999999}\n      placement={placement ?? \"top\"}\n      aria-label={label}\n      label={label}\n    >\n      {children}\n    </Tooltip>\n  );\n};\n"
  },
  {
    "path": "src/components/shared/SliderWithLabel.tsx",
    "content": "import {\n  Slider,\n  SliderTrack,\n  SliderFilledTrack,\n  SliderThumb,\n  Text,\n} from \"@chakra-ui/react\";\nimport { Row } from \"utils/chakraUtils\";\n\nexport const SliderWithLabel = ({\n  value,\n  setValue,\n  formatValue,\n  min,\n  max,\n  step,\n  isDisabled,\n  ...others\n}: {\n  min?: number;\n  max?: number;\n  step?: number;\n  value: number;\n  isDisabled?: boolean;\n  setValue: (value: number) => any;\n  formatValue?: (value: number) => string;\n  [key: string]: any;\n}) => {\n  return (\n    <Row mainAxisAlignment=\"flex-start\" crossAxisAlignment=\"center\" {...others}>\n      <Text fontWeight=\"bold\" mr={2}>\n        {formatValue ? formatValue(value) : value}\n      </Text>\n      <Slider\n        width=\"190px\"\n        colorScheme=\"white\"\n        onChange={setValue}\n        value={value}\n        min={min ?? 0}\n        max={max ?? 100}\n        step={step ?? 1}\n        isDisabled={isDisabled}\n      >\n        <SliderTrack>\n          <SliderFilledTrack />\n        </SliderTrack>\n        <SliderThumb />\n      </Slider>\n    </Row>\n  );\n};\n"
  },
  {
    "path": "src/components/shared/SwitchCSS.tsx",
    "content": "export const SwitchCSS = ({\n  symbol,\n  color,\n}: {\n  symbol: string;\n  color: string | undefined | null;\n}) => {\n  return (\n    <style>\n      {`  \n  .${symbol + \"-switch\"} > .chakra-switch__track[data-checked] {\n    background-color: ${\n      color ? (color === \"#FFFFFF\" ? \"#282727\" : color) : \"#282727\"\n    } !important;\n  }\n  .${symbol + \"-switch\"} .chakra-switch__input {\n    /* Fixes a bug in the FusePoolPage with the switches creating bottom padding */\n    position: static !important;\n    height: 0px !important;\n    width: 0px !important;\n    display: none !important;\n  }\n  `}\n    </style>\n  );\n};\n"
  },
  {
    "path": "src/components/shared/TransactionStepper.tsx",
    "content": "// Chakra and UI\nimport { Box } from \"@chakra-ui/layout\";\nimport { Row } from \"utils/chakraUtils\";\nimport { Circle } from \"@chakra-ui/layout\";\nimport { Spinner } from \"@chakra-ui/spinner\";\n\nconst TransactionStepper = ({\n    activeStep,\n    tokenData,\n    steps,\n  }: {\n    steps: string[];\n    tokenData: any;\n    activeStep: number;\n  }) => {\n    return (\n      <Box\n        width=\"100%\"\n        h=\"10%\"\n        d=\"flex\"\n        mb={4}\n        flexDirection=\"column\"\n        alignItems=\"center\"\n        justifyContent=\"center\"\n        // bg=\"pink\"\n      >\n          <Row\n            mainAxisAlignment=\"space-around\"\n            crossAxisAlignment=\"center\"\n            width=\"90%\"\n          >\n            {steps.map((step, index) => (\n              <Circle\n                size=\"40px\"\n                color=\"white\"\n                key={index}\n                opacity={activeStep === index ? \"1\" : \"0.7\"}\n                bg={activeStep > index ? \"gray\" : tokenData.color}\n              >\n                {activeStep === index ? <Spinner /> : index + 1}\n              </Circle>\n            ))}\n          </Row>\n      </Box>\n    );\n  };\nexport default TransactionStepper"
  },
  {
    "path": "src/components/shared/TranslateButton.tsx",
    "content": "import { Select, SelectProps } from \"@chakra-ui/react\";\n\nimport { useTranslation } from \"react-i18next\";\n\nexport const LanguageSelect = (extraProps: SelectProps) => {\n  const { i18n } = useTranslation();\n\n  return (\n    <Select\n      value={i18n.language}\n      onChange={(event) => {\n        i18n.changeLanguage(event.target.value);\n        localStorage.setItem(\"rariLang\", event.target.value);\n      }}\n      fontWeight=\"bold\"\n      width=\"100%\"\n      {...extraProps}\n    >\n      <option className=\"black-bg-option\" value=\"en\">\n        English\n      </option>\n      <option className=\"black-bg-option\" value=\"zh-CN\">\n        简体中文\n      </option>\n      <option className=\"black-bg-option\" value=\"zh-TW\">\n        中國傳統的\n      </option>\n    </Select>\n  );\n};\n"
  },
  {
    "path": "src/constants/homepage.ts",
    "content": "// Logos\nimport FuseLogo from \"static/fuseicon.png\";\nimport { FusePoolMetric } from \"utils/fetchFusePoolData\";\nimport { Pool } from \"utils/poolUtils\";\n\n/* Fuse Pools Marquee */\nexport interface HomepageFusePool {\n  id: number;\n  title?: string;\n  subtitle?: string;\n}\n\nexport const HOMEPAGE_FUSE_POOLS: HomepageFusePool[] = [\n  {\n    id: 1,\n    // title: \"Pool 1\",\n    // subtitle: \"Pool 1\",\n  },\n  {\n    id: 2,\n    // title: \"Pool 2\",\n    // subtitle: \"Pool 2\",\n  },\n\n  {\n    id: 4,\n    // title: \"Pool 4\",\n    // subtitle: \"Pool 4\",\n  },\n  {\n    id: 5,\n    // title: \"Pool 5\",\n    // subtitle: \"Pool 5\",\n  },\n  {\n    id: 1,\n    // title: \"Pool 1\",\n    // subtitle: \"Pool 1\",\n  },\n  {\n    id: 2,\n    // title: \"Pool 2\",\n    // subtitle: \"Pool 2\",\n  },\n\n  {\n    id: 4,\n    // title: \"Pool 4\",\n    // subtitle: \"Pool 4\",\n  },\n  {\n    id: 5,\n    // title: \"Pool 5\",\n    // subtitle: \"Pool 5\",\n  },\n];\n\n/* Opportunities */\nexport enum HomepageOpportunityType {\n  EarnVault,\n  FusePool,\n  EarnPage,\n  FusePage,\n  Pool2Page,\n  TranchesPage,\n}\n\nexport interface HomepageOpportunity {\n  type: HomepageOpportunityType;\n  title: string;\n  subtitle: string;\n  icon: string;\n  bgColor: string;\n  // Conditional params\n  vaultType?: Pool;\n  fusePoolId?: number;\n  fuseMetric?: FusePoolMetric;\n}\n\nexport const HOMEPAGE_OPPORTUNIES: HomepageOpportunity[] = [\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"ETH Pool\",\n    subtitle: \"Earn interest on ETH deposits\",\n    bgColor: \"#A5A7ED\",\n    icon: FuseLogo,\n    vaultType: Pool.ETH,\n  },\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"DAI Pool\",\n    subtitle: \"Earn interest on DAI deposits\",\n    bgColor: \"#FFA700\",\n    icon: FuseLogo,\n    vaultType: Pool.DAI,\n  },\n  {\n    type: HomepageOpportunityType.FusePool,\n    title: \"Tetranode's Pool\",\n    subtitle: \"Lend RGT and borrow against it\",\n    bgColor: \"#00BB28\",\n    icon: FuseLogo,\n    fusePoolId: 6,\n    fuseMetric: FusePoolMetric.TotalSuppliedUSD,\n  },\n  {\n    type: HomepageOpportunityType.FusePool,\n    title: \"Rari DAO Fuse Pool\",\n    subtitle: \"Lend and borrow top community assets\",\n    bgColor: \"#00BEFF\",\n    icon: FuseLogo,\n    fusePoolId: 3,\n    fuseMetric: FusePoolMetric.TotalSuppliedUSD,\n  },\n  {\n    type: HomepageOpportunityType.EarnPage,\n    title: \"Earn\",\n    subtitle: \"Sustainable yield made easy\",\n    bgColor: \"#6041FC\",\n    icon: FuseLogo,\n  },\n  {\n    type: HomepageOpportunityType.FusePage,\n    title: \"Fuse\",\n    subtitle: \"The first open interest rate market protocol\",\n    bgColor: \"#E6303A\",\n    icon: FuseLogo,\n  },\n  {\n    type: HomepageOpportunityType.Pool2Page,\n    title: \"Pool2\",\n    subtitle: \"Rewards for Rari Capital LPs\",\n    bgColor: \"#00BBA8\",\n    icon: FuseLogo,\n  },\n  {\n    type: HomepageOpportunityType.TranchesPage,\n    title: \"Tranches\",\n    subtitle: \"Tranche yields across Earn Pools\",\n    bgColor: \"#F45C30\",\n    icon: FuseLogo,\n  },\n];\n\nexport const HOMEPAGE_EARN_VAULTS: HomepageOpportunity[] = [\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"USDC Pool\",\n    subtitle: \"Earn interest on USDC deposits\",\n    bgColor: \"#1079FD\",\n    icon: FuseLogo,\n    vaultType: Pool.USDC,\n  },\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"ETH Pool\",\n    subtitle: \"Earn interest on ETH Deposits\",\n    bgColor: \"#A5A7ED\",\n    icon: FuseLogo,\n    vaultType: Pool.ETH,\n  },\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"Yield Pool\",\n    subtitle: \"Earn interest on YIEYieldLD deposits\",\n    bgColor: \"#101111\",\n    icon: FuseLogo,\n    vaultType: Pool.YIELD,\n  },\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"USDC Pool\",\n    subtitle: \"Earn interest on USDC deposits\",\n    bgColor: \"#1079FD\",\n    icon: FuseLogo,\n    vaultType: Pool.USDC,\n  },\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"ETH Pool\",\n    subtitle: \"Earn interest on DAI deposits\",\n    bgColor: \"#A5A7ED\",\n    icon: FuseLogo,\n    vaultType: Pool.ETH,\n  },\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"Yield Pool\",\n    subtitle: \"Earn interest on Yield deposits\",\n    bgColor: \"#101111\",\n    icon: FuseLogo,\n    vaultType: Pool.YIELD,\n  },\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"USDC Pool\",\n    subtitle: \"Earn interest on USDC deposits\",\n    bgColor: \"#1079FD\",\n    icon: FuseLogo,\n    vaultType: Pool.USDC,\n  },\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"ETH Pool\",\n    subtitle: \"Earn interest on DAI deposits\",\n    bgColor: \"#A5A7ED\",\n    icon: FuseLogo,\n    vaultType: Pool.ETH,\n  },\n  {\n    type: HomepageOpportunityType.EarnVault,\n    title: \"Yield Pool\",\n    subtitle: \"Earn interest on Yield deposits\",\n    bgColor: \"#101111\",\n    icon: FuseLogo,\n    vaultType: Pool.YIELD,\n  },\n];\n\nexport const ABILLY = 1e9;\n"
  },
  {
    "path": "src/constants/networks.ts",
    "content": "export enum ChainID {\n  MAINNET = 1,\n  ROPSTEN = 3,\n  RINKEBY = 4,\n  GOERLI = 5,\n  KOVAN = 42,\n  //\n  ARBITRUM = 42161,\n  ARBITRUM_TESTNET = 421611,\n  //\n  OPTIMISM = 10,\n  //\n  FANTOM = 250,\n}\n\nexport const isSupportedChainId = (chainId: number) => {\n  const isSupported = Object.values(ChainID).includes(chainId);\n//   console.log(Object.values(chainId), chainId, { isSupported });\n  return isSupported;\n};\n\nexport const coingeckoNetworkPath = {\n  [ChainID.MAINNET]: \"ethereum\",\n  [ChainID.ARBITRUM]: \"arbitrum-one\",\n  [ChainID.ARBITRUM_TESTNET]: \"arbitrum-one\",\n  [ChainID.OPTIMISM]: \"optimistic-ethereum\",\n  [ChainID.FANTOM]: \"fantom\",\n};\n\nexport const alchemyURL = `https://eth-mainnet.alchemyapi.io/v2/2Mt-6brbJvTA4w9cpiDtnbTo6qOoySnN`;\n\nexport const networkData: Record<string, any> = {\n  [ChainID.MAINNET]: {\n    name: \"Ethereum (Mainnet)\",\n    shortName: \"Mainnet\",\n    color: \"#a557fe\",\n    enabled: true,\n    rpc: `https://eth-mainnet.alchemyapi.io/v2/2Mt-6brbJvTA4w9cpiDtnbTo6qOoySnN`,\n  },\n  [ChainID.ARBITRUM]: {\n    color: \"#a557fe\",\n    name: \"Arbitrum One\",\n    shortName: \"Arbitrum\",\n    enabled: true,\n    rpc: `https://arb-mainnet.g.alchemy.com/v2/rNfYbx5O5Ng09hw9s9YE-huxzVNaWWbX`,\n  },\n  [ChainID.ARBITRUM_TESTNET]: {\n    color: \"#a557fe\",\n    name: \"Arbitrum One\",\n    shortName: \"Arbitrum\",\n    enabled: true,\n    rpc: `https://arb-rinkeby.g.alchemy.com/v2/PkZ7ilUhTBT6tHUsgToel62IOcuyKcwb`,\n  },\n  [ChainID.KOVAN]: {\n    color: \"#a557fe\",\n    name: \"Ethereum (Kovan Testnet)\",\n    shortName: \"Kovan\",\n    enabled: true,\n    rpc: `https://kovan.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161`,\n  },\n};\n"
  },
  {
    "path": "src/constants/pools.ts",
    "content": "import { Pool } from \"utils/poolUtils\";\n\n// Icons\nimport EthIcon from \"static/ethicon.png\";\nimport StableIcon from \"static/stableicon.png\";\nimport YieldIcon from \"static/yieldicon.png\";\n\nexport interface PoolInterface {\n  type: Pool;\n  name: string;\n  title: string;\n  caption: string;\n  logo: any;\n}\n\nexport const pools: PoolInterface[] = [\n  {\n    type: Pool.USDC,\n    title: \"Stable\",\n    name: \"Stable Pool\",\n    caption: \"Earn interest on stablecoins by providing liquidity to Fuse pools.\",\n    logo: StableIcon,\n  },\n  {\n    type: Pool.YIELD,\n    title: \"Yield\",\n    name: \"Yield Pool\",\n    caption: \"Please withdraw funds. Pool is no longer in use.\",\n    logo: YieldIcon,\n  },\n  {\n    type: Pool.ETH,\n    title: \"ETH\",\n    name: \"ETH Pool\",\n    caption: \"Please withdraw funds. Pool is no longer in use.\",\n    logo: EthIcon,\n  },\n];\n"
  },
  {
    "path": "src/constants/saffron.ts",
    "content": "export const SaffronStrategyAddress =\n  \"0x75a154c5177a631f32771B4cAb9466bd777C3291\";\nexport const SaffronPoolAddress = \"0xa4e5251EC719c733381491E54FaF1cE1d98DA133\";\n"
  },
  {
    "path": "src/constants/tokenData.ts",
    "content": "import { ChainID } from \"./networks\";\n\ninterface TokenDataOverride {\n  symbol?: string;\n  name?: string;\n  logoURL?: string;\n  color?: string;\n}\n\nexport const TokenDataOverrides: {\n  [chainId: number]: {\n    [tokenId: string]: TokenDataOverride;\n  };\n} = {\n  [ChainID.MAINNET]: {\n    // FTX\n    \"0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9\": {\n      symbol: \"FTT\",\n      name: \"FTX Token\",\n    },\n    // OT-aUSDC\n    \"0x8fcb1783bf4b71a51f702af0c266729c4592204a\": {\n      // OT token names are too long.\n      symbol: \"OT-aUSDC22\",\n      name: \"OT-aUSDC DEC22-20\",\n    },\n    // OT-cDAI22\n    \"0x3d4e7f52efafb9e0c70179b688fc3965a75bcfea\": {\n      // OT token names are too long.\n      symbol: \"OT-cDAI22\",\n      name: \"OT-cDAI DEC22-20\",\n    },\n    // xSDT\n    \"0xaC14864ce5A98aF3248Ffbf549441b04421247D3\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/xSDT.png\",\n    },\n    // sd3Crv\n    \"0xB17640796e4c27a39AF51887aff3F8DC0daF9567\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/sd3Crv.png\",\n    },\n    // sdeursCRV\n    \"0xCD6997334867728ba14d7922f72c893fcee70e84\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/sdeursCRV.png\",\n    },\n    // linkCRV\n    \"0xFD4D8a17df4C27c1dD245d153ccf4499e806C87D\": {\n      name: \"linkCRV Gauge Deposit\",\n      symbol: \"[G]linkCRV\",\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/crvLINKGauge.png\",\n    },\n    // wstETH\n    \"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0\": {\n      name: \"Wrapped Staked Ether\",\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/wstETH.png\",\n    },\n    // sOHM\n    \"0x04f2694c8fcee23e8fd0dfea1d4f5bb8c352111f\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/sOHM.png\",\n    },\n    //   SKIP G-UNI\n    // VCRED\n    \"0xe7b982f901b47d6fa21f5d1f3ad4b64c105060bf\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/spacechain/vcred-token/main/bee-256-256.png\",\n    },\n\n    // Handlefi\n    // fxAUD\n    \"0x7E141940932E3D13bfa54B224cb4a16510519308\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/fxAUDDarkLogo.png\",\n    },\n    // fxEUD\n    \"0x116172b2482c5dc3e6f445c16ac13367ac3fcd35\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/fxEURDarkLogo.png\",\n    },\n\n    // fxPHP\n    \"0x3d147cd9ac957b2a5f968de9d1c6b9d0872286a0\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/fxPHPDarkLogo.png\",\n    },\n\n    // Tokemak\n    // tTOKE\n    \"0xa760e26aA76747020171fCF8BdA108dFdE8Eb930\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/tTOKE.png\",\n    },\n    // tUSDC\n    \"0x04bDA0CF6Ad025948Af830E75228ED420b0e860d\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/tUSDC.png\",\n    },\n    // tWETH\n    \"0xD3D13a578a53685B4ac36A1Bab31912D2B2A2F36\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/tWETH.png\",\n    },\n    \"0x1b429e75369ea5cd84421c1cc182cee5f3192fd3\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/UniV2.png\",\n    },\n    \"0x8858A739eA1dd3D80FE577EF4e0D03E88561FaA3\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/tSUSHI.png\",\n    },\n    // txJP\n    \"0x961dD84059505D59f82cE4fb87D3c09bec65301d\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/TXJP.png\",\n    },\n    //Fei3rcv\n    \"0x06cb22615BA53E60D67Bf6C341a0fD5E718E1655\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD533a949740bb3306d119CC777fa900bA034cd52/logo.png\",\n      symbol: \"FEI3CRV\",\n    },\n    //D3-f\n    \"0xbaaa1f5dba42c3389bdbc2c9d2de134f5cd0dc89\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/d3.jpg\",\n      symbol: \"D3\",\n    },\n    //D3-f\n    \"0xBaaa1F5DbA42C3389bDbc2c9D2dE134F5cD0Dc89\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/d3.jpg\",\n      symbol: \"D3\",\n    },\n    //D3-f\n    \"0x3D1556e84783672f2a3bd187a592520291442539\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/G-UNI.png\",\n    },\n    // G-UNI\n    \"0xCf84a3dC12319531E3deBD48C86E68eAeAfF224a\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/master/src/static/tokens/G-UNI.png\",\n    },\n    // Wormhole UST\n    \"0xa693B19d2931d498c5B318dF961919BB4aee87a5\": {\n      name: \"Wormhole UST\",\n      symbol: \"USTw\",\n      logoURL:\n        \"https://raw.githubusercontent.com/sushiswap/icons/master/token/ust.jpg\",\n    },\n    // Terra UST\n    \"0xa47c8bf37f92abed4a126bda807a7b7498661acd\": {\n      name: \"Terra UST\",\n      symbol: \"UST\",\n      logoURL: \"https://miro.medium.com/max/1000/1*NQsDZz1XgwOik3PpejCALQ.png\",\n    },\n    // FODL\n    \"0x7e05540A61b531793742fde0514e6c136b5fbAfE\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/Rari-Capital/rari-dApp/l2tokendata/src/static/tokens/FODL.png\",\n    },\n    // stkAAVE\n    \"0x4da27a545c0c5B758a6BA100e3a049001de870f5\": {\n      logoURL:\n        \"https://storage.googleapis.com/zapper-fi-assets/tokens/ethereum/0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.png\",\n    },\n    // ICHI oneBTC\n    \"0xEc4325F0518584F0774b483c215F65474EAbD27F\": {\n      logoURL: \"https://cdn.discordapp.com/attachments/953712381886861372/957671684515696660/logo.png\",\n      symbol: \"oneBTC\"\n    },\n    // ICHI oneUNI\n    \"0x8290D7a64F25e6b5002d98367E8367c1b532b534\": {\n      logoURL: \"https://cdn.discordapp.com/attachments/953712381886861372/957671604060553257/logo.png\",\n      symbol: \"oneUNI\"\n    },\n    // ICHI oneUNI\n    \"0xfaeCcee632912c42a7c88c3544885A8D455408FA\": {\n      logoURL: \"https://cdn.discordapp.com/attachments/953712381886861372/956944983515086959/ICHI_Uni.png\",\n      symbol: \"oneUNI_LP\"\n    },\n    // ICHI oneBTC Angel Vault LP\n    \"0x5318c21c96256ce4b73c27D405147df97d28E0Be\": {\n      logoURL: \"https://cdn.discordapp.com/attachments/953712381886861372/956945051240513596/ICHI_BTC.png\",\n      symbol: \"oneBTC_LP\"\n    },\n    // FOX\n    \"0xc770EEfAd204B5180dF6a14Ee197D99d808ee52d\": {\n      symbol: \"FOX\"\n    },\n    // oneFOX\n    \"0x03352D267951E96c6F7235037C5DFD2AB1466232\": {\n      symbol: \"oneFOX\"\n    },\n    // oneFOX ICHI Angel Vault LP\n    \"0x779F9BAd1f4B1Ef5198AD9361DBf3791F9e0D596\": {\n      name: \"oneFOX Angel Vault LP\",\n      logoURL: \"https://cdn.discordapp.com/attachments/954083960454000711/960193552732782652/OneFOX_Angel_Vault_LP.png\",\n      symbol: \"oneFOX ICHI LP\"\n    },\n    // UNI-v2 WETH-Fox LP\n    \"0x470e8de2eBaef52014A47Cb5E6aF86884947F08c\": {\n      logoURL: \"https://cdn.discordapp.com/attachments/954083960454000711/960196275008073818/FOX-WETH_UniswapV2_LP.png\",\n      name: \"FOX-ETH UniV2 LP\",\n      symbol: \"FOX-ETH UniV2 LP\",\n    }\n  },\n  [ChainID.ARBITRUM]: {\n    \"0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x853d955aCEf822Db058eb8505911ED77F175b99e/logo.png\",\n    },\n    \"0x4A717522566C7A09FD2774cceDC5A8c43C5F9FD2\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/sushiswap/assets/master/blockchains/ethereum/assets/0x956F47F50A910163D8BF957Cf5846D573E7f87CA/logo.png\",\n    },\n  },\n  [ChainID.KOVAN]: {\n    // RAI\n    \"0x76b06a2f6df6f0514e7bec52a9afb3f603b477cd\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/sushiswap/icons/master/token/rai.jpg\",\n    },\n    // WETH\n    \"0xd0a1e359811322d97991e03f863a0c30c2cf029c\": {\n      logoURL:\n        \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xd0A1E359811322d97991E03f863a0C30C2cF029C/logo.png\",\n    },\n  },\n};\n"
  },
  {
    "path": "src/context/AddAssetContext.tsx",
    "content": "import { RETRY_FLAG } from \"components/pages/Fuse/Modals/AddAssetModal/AssetSettings\";\nimport { CTokenData } from \"hooks/fuse/useCTokenData\";\nimport { OracleDataType } from \"hooks/fuse/useOracleData\";\nimport { TokenData } from \"hooks/useTokenData\";\nimport { useContext, createContext } from \"react\";\n\nexport type AddAssetContextData = {\n  // Initial props from parent\n  mode: \"Editing\" | \"Adding\";\n  cTokenAddress: string | undefined;\n  comptrollerAddress: string;\n  oracleData: OracleDataType | undefined;\n  tokenAddress: string;\n  poolOracleAddress: string;\n  poolOracleModel: string | undefined;\n  tokenData: TokenData;\n\n  // Deploying\n  isDeploying: boolean;\n  setIsDeploying: (x: boolean) => void;\n\n  // Asset's general configurations.\n  adminFee: number;\n  setAdminFee: (x: number) => void;\n  reserveFactor: number;\n  setReserveFactor: (x: number) => void;\n  isBorrowPaused: boolean;\n  setIsBorrowPaused: (x: boolean) => void;\n  collateralFactor: number;\n  setCollateralFactor: (x: number) => void;\n\n  // IRM stuff\n  interestRateModel: any;\n  setInterestRateModel: (x: any) => void;\n  curves: any;\n\n  // Oracle Configuration\n  oracleTouched: boolean;\n  setOracleTouched: (x: boolean) => void;\n  activeOracleModel: string;\n  setActiveOracleModel: (x: string) => void;\n  oracleAddress: string;\n  setOracleAddress: (x: string) => void;\n\n  // Univ3 stuff\n  feeTier: number;\n  setFeeTier: (x: number) => void;\n  uniV3BaseTokenAddress: string;\n  setUniV3BaseTokenAddress: (x: string) => void;\n  uniV3BaseTokenOracle: string;\n  setUniV3BaseTokenOracle: (x: string) => void;\n  baseTokenActiveOracleName: string;\n  setBaseTokenActiveOracleName: (x: string) => void;\n  uniV3BaseTokenHasOracle: boolean;\n  setUniV3BaseTokenHasOracle: (x: boolean) => void;\n\n  activeUniSwapPair: string;\n  setActiveUniSwapPair: (x: string) => void;\n\n  shouldShowUniV3BaseTokenOracleForm: boolean; // show\n\n  // More Oracle stuff\n  defaultOracle: string;\n  setDefaultOracle: (x: string) => void;\n  customOracleForToken: string;\n  setCustomOracleForToken: (x: string) => void;\n  priceForAsset: number | undefined;\n  setPriceForAsset: (x: number) => void;\n  hasDefaultOracle: boolean;\n  hasCustomOracleForToken: boolean;\n  hasPriceForAsset: boolean;\n\n  // UI Flow Stages\n  stage: number;\n  setStage: (x: number) => void;\n  handleSetStage: (x: number) => void;\n\n  // Stepper\n  activeStep: number;\n  setActiveStep: (x: number) => void;\n  increaseActiveStep: (step: string) => void;\n\n  // Retries\n  retryFlag: RETRY_FLAG;\n  setRetryFlag: (x: RETRY_FLAG) => void;\n  needsRetry: boolean;\n  setNeedsRetry: (x: boolean) => void;\n\n  // Edit data\n  cTokenData: CTokenData | undefined;\n};\n\nexport const AddAssetContext = createContext<AddAssetContextData | undefined>(\n  undefined\n);\n\nexport function useAddAssetContext() {\n  const context = useContext(AddAssetContext);\n\n  if (context === undefined) {\n    throw new Error(\n      `useAddAssetContext must be used within a AddAssetContextProvider`\n    );\n  }\n\n  return context;\n}\n"
  },
  {
    "path": "src/context/PoolContext.tsx",
    "content": "import { createContext, useContext, ReactNode } from \"react\";\nimport { Pool } from \"../utils/poolUtils\";\n\nexport const PoolTypeContext = createContext<Pool | undefined>(undefined);\n\nexport const PoolTypeProvider = ({\n  pool,\n  children,\n}: {\n  pool: Pool;\n  children: ReactNode;\n}) => {\n  return (\n    <PoolTypeContext.Provider value={pool}>{children}</PoolTypeContext.Provider>\n  );\n};\n\nexport const usePoolType = () => {\n  const poolType = useContext(PoolTypeContext);\n\n  if (poolType === undefined) {\n    throw new Error(`usePoolType must be used within a PoolTypeProvider`);\n  }\n\n  return poolType;\n};\n"
  },
  {
    "path": "src/context/RariContext.tsx",
    "content": "import {\n  createContext,\n  useContext,\n  useState,\n  useCallback,\n  useEffect,\n  useMemo,\n  ReactNode,\n} from \"react\";\n\nimport { useQueryClient } from \"react-query\";\nimport { useTranslation } from \"react-i18next\";\nimport { DASHBOARD_BOX_PROPS } from \"../components/shared/DashboardBox\";\n\nimport Rari from \"../rari-sdk/index\";\n\nimport LogRocket from \"logrocket\";\nimport { useToast } from \"@chakra-ui/react\";\nimport Fuse from \"../fuse-sdk/src\";\nimport {\n  chooseBestWeb3Provider,\n  initFuseWithProviders,\n  alchemyURL,\n} from \"../utils/web3Providers\";\nimport { useLocation } from \"react-router-dom\";\nimport WalletLink from \"walletlink\";\n\nasync function launchModalLazy(\n  t: (text: string, extra?: any) => string,\n  cacheProvider: boolean = true\n) {\n  // WalletLink provider doesn't work when dynamically imported\n  const [WalletConnectProvider, Web3Modal] = await Promise.all([\n    import(\"@walletconnect/web3-provider\"),\n    import(\"web3modal\"),\n  ]);\n\n  const providerOptions = {\n    injected: {\n      display: {\n        description: t(\"Connect with a browser extension\"),\n      },\n      package: null,\n    },\n    walletconnect: {\n      package: WalletConnectProvider.default,\n      options: {\n        rpc: {\n          1: alchemyURL,\n        },\n      },\n      display: {\n        description: t(\"Scan with a wallet to connect\"),\n      },\n    },\n    walletlink: {\n      package: WalletLink,\n      options: {\n        appName: \"Rari Capital\",\n        appLogoUrl: \"/logo512.png\",\n        rpc: alchemyURL,\n      },\n    },\n  };\n\n  if (!cacheProvider) {\n    localStorage.removeItem(\"WEB3_CONNECT_CACHED_PROVIDER\");\n    localStorage.removeItem(\"walletconnect\");\n  }\n\n  const web3Modal = new Web3Modal.default({\n    cacheProvider,\n    providerOptions,\n    theme: {\n      background: DASHBOARD_BOX_PROPS.backgroundColor,\n      main: \"#FFFFFF\",\n      secondary: \"#858585\",\n      border: DASHBOARD_BOX_PROPS.borderColor,\n      hover: \"#000000\",\n    },\n  });\n\n  return web3Modal.connect();\n}\n\nexport interface RariContextData {\n  rari: Rari;\n  fuse: Fuse;\n  web3ModalProvider: any | null;\n  isAuthed: boolean;\n  login: (cacheProvider?: boolean) => Promise<any>;\n  logout: () => any;\n  address: string;\n  isAttemptingLogin: boolean;\n}\n\nexport const EmptyAddress = \"0x0000000000000000000000000000000000000000\";\n\nexport const RariContext = createContext<RariContextData | undefined>(\n  undefined\n);\n\nexport const RariProvider = ({ children }: { children: ReactNode }) => {\n  const { t } = useTranslation();\n\n  const location = useLocation();\n\n  const [rari, setRari] = useState<Rari>(\n    () => new Rari(chooseBestWeb3Provider())\n  );\n  const [fuse, setFuse] = useState<Fuse>(() => initFuseWithProviders());\n\n  const [isAttemptingLogin, setIsAttemptingLogin] = useState<boolean>(false);\n\n  const toast = useToast();\n\n  // Check the user's network:\n  useEffect(() => {\n    Promise.all([rari.web3.eth.net.getId(), rari.web3.eth.getChainId()]).then(\n      ([netId, chainId]) => {\n        console.log(\"Network ID: \" + netId, \"Chain ID: \" + chainId);\n\n        // Don't show \"wrong network\" toasts if dev\n        if (process.env.NODE_ENV === \"development\") {\n          return;\n        }\n\n        if (netId !== 1 || chainId !== 1) {\n          // setTimeout(() => {\n          //   toast({\n          //     title: \"Wrong network!\",\n          //     description:\n          //       \"You are on the wrong network! Switch to the mainnet and reload this page!\",\n          //     status: \"warning\",\n          //     position: \"top-right\",\n          //     duration: 300000,\n          //     isClosable: true,\n          //   });\n          // }, 1500);\n        }\n      }\n    );\n  }, [rari, toast]);\n\n  const [address, setAddress] = useState<string>(EmptyAddress);\n\n  const [web3ModalProvider, setWeb3ModalProvider] = useState<any | null>(null);\n\n  const queryClient = useQueryClient();\n\n  const setRariAndAddressFromModal = useCallback(\n    (modalProvider) => {\n      const rariInstance = new Rari(modalProvider);\n      const fuseInstance = initFuseWithProviders(modalProvider);\n      window.Fuse = Fuse as any;\n\n      setRari(rariInstance);\n      setFuse(fuseInstance);\n\n      rariInstance.web3.eth.getAccounts().then((addresses) => {\n        if (addresses.length === 0) {\n          console.log(\"Address array was empty. Reloading!\");\n          window.location.reload();\n        }\n\n        const address = addresses[0];\n        const requestedAddress = new URLSearchParams(location.search).get(\n          \"address\"\n        );\n\n        console.log(\"Setting Logrocket user to new address: \" + address);\n        LogRocket.identify(address);\n\n        console.log(\"Requested address: \", requestedAddress);\n        setAddress(requestedAddress ?? address);\n      });\n    },\n    [setRari, setAddress, location.search]\n  );\n\n  const login = useCallback(\n    async (cacheProvider: boolean = true) => {\n      try {\n        setIsAttemptingLogin(true);\n        const provider = await launchModalLazy(t, cacheProvider);\n        setWeb3ModalProvider(provider);\n        setRariAndAddressFromModal(provider);\n        setIsAttemptingLogin(false);\n      } catch (err) {\n        setIsAttemptingLogin(false);\n        return console.error(err);\n      }\n    },\n    [setWeb3ModalProvider, setRariAndAddressFromModal, setIsAttemptingLogin, t]\n  );\n\n  const refetchAccountData = useCallback(() => {\n    console.log(\"New account, clearing the queryClient!\");\n\n    setRariAndAddressFromModal(web3ModalProvider);\n\n    queryClient.clear();\n  }, [setRariAndAddressFromModal, web3ModalProvider, queryClient]);\n\n  const logout = useCallback(() => {\n    setWeb3ModalProvider((past: any) => {\n      if (past?.off) {\n        past.off(\"accountsChanged\", refetchAccountData);\n        past.off(\"chainChanged\", refetchAccountData);\n      }\n\n      return null;\n    });\n\n    localStorage.removeItem(\"WEB3_CONNECT_CACHED_PROVIDER\");\n    localStorage.removeItem(\"walletconnect\");\n\n    setAddress(EmptyAddress);\n  }, [setWeb3ModalProvider, refetchAccountData]);\n\n  useEffect(() => {\n    if (web3ModalProvider !== null && web3ModalProvider.on) {\n      web3ModalProvider.on(\"accountsChanged\", refetchAccountData);\n      web3ModalProvider.on(\"chainChanged\", refetchAccountData);\n    }\n\n    return () => {\n      if (web3ModalProvider?.off) {\n        web3ModalProvider.off(\"accountsChanged\", refetchAccountData);\n        web3ModalProvider.off(\"chainChanged\", refetchAccountData);\n      }\n    };\n  }, [web3ModalProvider, refetchAccountData]);\n\n  // Automatically open the web3modal if they have previously logged in on the site:\n  useEffect(() => {\n    if (localStorage.WEB3_CONNECT_CACHED_PROVIDER) {\n      login();\n    }\n  }, [login]);\n\n  const value = useMemo(\n    () => ({\n      web3ModalProvider,\n      rari,\n      fuse,\n      isAuthed: address !== EmptyAddress,\n      login,\n      logout,\n      address,\n      isAttemptingLogin,\n    }),\n    [rari, web3ModalProvider, login, logout, address, fuse, isAttemptingLogin]\n  );\n\n  return <RariContext.Provider value={value}>{children}</RariContext.Provider>;\n};\n\nexport function useRari() {\n  const context = useContext(RariContext);\n\n  if (context === undefined) {\n    throw new Error(`useRari must be used within a RariProvider`);\n  }\n\n  return context;\n}\n"
  },
  {
    "path": "src/fuse-sdk/.browserslistrc",
    "content": "> 0.25%\nnot dead\n"
  },
  {
    "path": "src/fuse-sdk/.gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": "src/fuse-sdk/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript v1 declaration files\ntypings/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n.env.test\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n\n# Next.js build output\n.next\n\n# Nuxt.js build / generate output\n.nuxt\ndist\n\n# Gatsby files\n.cache/\n# Comment in the public line in if your project uses Gatsby and *not* Next.js\n# https://nextjs.org/blog/next-9-1#public-directory-support\n# public\n\n# vuepress build output\n.vuepress/dist\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# TernJS port file\n.tern-port\n"
  },
  {
    "path": "src/fuse-sdk/LICENSE",
    "content": "COPYRIGHT © 2020 RARI CAPITAL, INC. ALL RIGHTS RESERVED.\n\nNo one is permitted to use the software for any purpose without the explicit permission of David Lucid of Rari Capital, Inc.\n\nThis license is liable to change at any time at the sole discretion of David Lucid of Rari Capital, Inc.\n"
  },
  {
    "path": "src/fuse-sdk/README.md",
    "content": "# Rari Capital: Fuse JavaScript SDK\n\nCalling all DeFi developers: Rari Capital's SDK is now available for easy implementation of our smart contract APIs! Simply install the SDK and instantiate the `Fuse` class. See [here for the Fuse dApp](https://github.com/Rari-Capital/fuse-dapp) or [here for the Fuse contracts](https://github.com/Rari-Capital/fuse-contracts).\n\n## Installation\n\n### Node.js\n\nInstall the SDK as a dependency of your project:\n\n```\nnpm install --save @Rari-Capital/fuse-sdk\n```\n\nImport the `fuse-sdk` package:\n\n```\nconst Fuse = require(\"@Rari-Capital/fuse-sdk\");\n```\n\n### Browser\n\nInclude the prebuilt `dist/fuse.window.js` in your HTML to expose the `Fuse` class on the `window` object:\n\n```\n<script src=\"dist/fuse.window.js\">\n```\n\n## Instantiation\n\nThe `Fuse` class is instantiated with a Web3 provider as the sole constructor parameter.\n\n### Node.js\n\n```\nvar fuse = new Fuse(\"http://localhost:8545\");\n```\n\n### Browser\n\n```\nvar fuse = new Fuse(window.ethereum || \"http://localhost:8545\");\n```\n\n## `Fuse` Class API\n\nThe `Fuse` class is not very useful unless instantiated, except for a couple objects:\n\n### SDK web3.js Class: `Fuse.Web3`\n\nAccess the underlying web3.js class used by the SDK.\n\n### SDK web3.js Class: `Fuse.BN`\n\nAccess the underlying `BN` class used by the SDK. (Alias for `Fuse.Web3.utils.BN`.)\n\n## `Fuse` Instance API\n\nThe following objects are available on instances of the `Fuse` class:\n\n### Deploy Fuse Pool: `Fuse.deployPool(poolName, isPrivate, closeFactor, maxAssets, liquidationIncentive, priceOracle, options)`\n\nDeploys a new Fuse pool and registers it in the `FusePoolDirectory`.\n\n### Deploy Asset to Fuse Pool: `Fuse.deployAsset(conf, collateralFactor, options)`\n\nDeploys a new asset to an existing Fuse pool.\n\n### Compute Fuse Pool Contract Address: `Fuse.getCreate2Address(creatorAddress, salt, byteCode)`\n\nReturns the `Unitroller` contract (the proxy for the `Comptroller` implementation contract) address from the `creatorAddress` (the `FusePoolDirectory` contract address that deployed the pool), the `salt` (the pool name), and the `Unitroller` proxy contract bytecode.\n\n### SDK web3.js Instance: `Fuse.web3`\n\nAccess the underlying web3.js instance used by the SDK.\n\n## Examples\n\n### Deploy New Fuse Pool\n\n```\n// Set parameters\nvar poolName = \"Compound Finance\";\nvar enforceWhitelist = false;\nvar closeFactor = Web3.utils.toBN(0.051e18);\nvar liquidationIncentive = Web3.utils.toBN(1e18);\nvar priceOracle = \"ChainlinkPriceOracle\"; // Or set to an address to use an existing price oracle\nvar priceOracleConf = {}; // No conf necessary for ChainlinkPriceOracle\n\n// Deploy new Fuse pool\ntry {\n    var [poolAddress, receipt] = await fuse.deployPool(poolName, enforceWhitelist, closeFactor, liquidationIncentive, priceOracle, priceOracleConf, { from: \"0x0000000000000000000000000000000000000000\" });\n} catch (error) {\n    return console.error(error);\n}\n\n// Log deployed pool contract address and transaction receipt\nconsole.log(\"Deployed Fuse pool contract address:\", poolAddress);\nconsole.log(\"Deployment transaction receipt:\", receipt);\n```\n\n### Deploy Asset to Fuse Pool\n\n```\n// Set parameters\nvar conf = {\n    underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\", // Leave blank for ETH\n    comptroller: \"0x0000000000000000000000000000000000000000\", // Fuse pool contract address\n    interestRateModel: \"WhitePaperInterestRateModel\", // Or set to an address to use an existing interest rate model\n    name: \"Compound DAI\",\n    symbol: \"cDAI\",\n};\n\nvar collateralFactor = Web3.utils.toBN(0.5e18);\nvar reserveFactor = Web3.utils.toBN(0.1e18);\nvar adminFee = Web3.utils.toBN(0.05e18);\n\n// Deploy new Fuse pool\ntry {\n    var [poolAddress, receipt] = await App.fuse.deployAsset(conf, collateralFactor, reserveFactor, adminFee, { from: \"0x0000000000000000000000000000000000000000\" });\n} catch (error) {\n    return console.error(error);\n}\n\n// Log deployed pool asset contract address and transaction receipt\nconsole.log(\"Deployed Fuse pool asset contract address:\", poolAddress);\nconsole.log(\"Deployment transaction receipt:\", receipt);\n```\n\n## Development\n\nTo build the production browser distribution bundle, run `npm run build`. To build the development browser distribution bundle, run `npm run dev`.\n\n## License\n\nSee `LICENSE`.\n\n## Credits\n\nFuse's SDK is developed by [David Lucid](https://github.com/davidlucid) of Rari Capital. Find out more about Rari Capital at [rari.capital](https://rari.capital).\n"
  },
  {
    "path": "src/fuse-sdk/package.json",
    "content": "{\n  \"name\": \"fuse-sdk\",\n  \"version\": \"1.2.0\",\n  \"description\": \"JavaScript SDK for easy implementation of Fuse by Rari Capital.\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"test\": \"mocha\",\n    \"dev\": \"webpack --mode development\",\n    \"build\": \"webpack --mode production\",\n    \"minify-contracts\": \"node scripts/minify-contracts.js\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Rari-Capital/fuse-sdk.git\"\n  },\n  \"author\": \"David Lucid <david@rari.capital>\",\n  \"license\": \"SEE LICENSE IN LICENSE\",\n  \"bugs\": {\n    \"url\": \"https://github.com/Rari-Capital/fuse-sdk/issues\"\n  },\n  \"homepage\": \"https://github.com/Rari-Capital/fuse-sdk#readme\",\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.11.6\",\n    \"@babel/preset-env\": \"^7.11.5\",\n    \"assert\": \"^2.0.0\",\n    \"babel-loader\": \"^8.1.0\",\n    \"big.js\": \"^6.0.3\",\n    \"buffer\": \"^5.6.0\",\n    \"compression-webpack-plugin\": \"^7.1.2\",\n    \"core-js\": \"^3.6.5\",\n    \"crypto-browserify\": \"^3.12.0\",\n    \"electron\": \"^10.1.5\",\n    \"global\": \"^4.4.0\",\n    \"https-browserify\": \"^1.0.0\",\n    \"mocha\": \"^8.2.1\",\n    \"os-browserify\": \"^0.3.0\",\n    \"process\": \"^0.11.10\",\n    \"regenerator-runtime\": \"^0.13.7\",\n    \"stream-browserify\": \"^3.0.0\",\n    \"stream-http\": \"^3.1.1\",\n    \"terser-webpack-plugin\": \"^5.0.0\",\n    \"url\": \"^0.11.0\",\n    \"util\": \"^0.12.3\",\n    \"webpack\": \"^5.1.3\",\n    \"webpack-cli\": \"^4.0.0\"\n  },\n  \"dependencies\": {\n    \"@truffle/hdwallet-provider\": \"^1.2.3\",\n    \"axios\": \"^0.20.0\",\n    \"web3\": \"^1.3.0\"\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/scripts/minify-contracts.js",
    "content": "const fs = require(\"fs\");\n\nvar compoundContracts = require(__dirname +\n  \"/../src/contracts/compound-protocol.json\").contracts;\n/* var openOracleContracts = require(__dirname +\n  \"/../src/contracts/open-oracle.json\").contracts; */\n\nvar minContracts = {};\nvar usedContractAbiKeys = [\n  \"contracts/Comptroller.sol:Comptroller\",\n  \"contracts/Unitroller.sol:Unitroller\",\n  \"contracts/CEtherDelegate.sol:CEtherDelegate\",\n  \"contracts/CEtherDelegator.sol:CEtherDelegator\",\n  \"contracts/EIP20Interface.sol:EIP20Interface\",\n  \"contracts/CErc20Delegate.sol:CErc20Delegate\",\n  \"contracts/CErc20Delegator.sol:CErc20Delegator\",\n  \"contracts/CTokenInterfaces.sol:CTokenInterface\",\n  \"contracts/WhitePaperInterestRateModel.sol:WhitePaperInterestRateModel\",\n  \"contracts/JumpRateModel.sol:JumpRateModel\",\n  \"contracts/DAIInterestRateModelV2.sol:DAIInterestRateModelV2\", // DAIInterestRateModelV2 NOT IN USE\n  \"contracts/RewardsDistributorDelegate.sol:RewardsDistributorDelegate\",\n  \"contracts/RewardsDistributorDelegator.sol:RewardsDistributorDelegator\",\n  // \"contracts/JumpRateModelV2.sol:JumpRateModelV2\",\n  // \"contracts/ReactiveJumpRateModelV2.sol:ReactiveJumpRateModelV2\",\n];\nif (process.env.NODE_ENV === \"development\") usedContractAbiKeys.push(\"contracts/SimplePriceOracle.sol:SimplePriceOracle\");\nfor (const contractKey of usedContractAbiKeys) {\n  if (!minContracts[contractKey]) minContracts[contractKey] = {};\n  minContracts[contractKey].abi = compoundContracts[contractKey].abi;\n}\nvar usedContractBinKeys = [\n  \"contracts/Unitroller.sol:Unitroller\",\n  \"contracts/CEtherDelegator.sol:CEtherDelegator\",\n  \"contracts/CErc20Delegator.sol:CErc20Delegator\",\n  \"contracts/WhitePaperInterestRateModel.sol:WhitePaperInterestRateModel\",\n  \"contracts/JumpRateModel.sol:JumpRateModel\",\n  \"contracts/DAIInterestRateModelV2.sol:DAIInterestRateModelV2\", // DAIInterestRateModelV2 NOT IN USE\n  \"contracts/RewardsDistributorDelegator.sol:RewardsDistributorDelegator\",\n  // \"contracts/JumpRateModelV2.sol:JumpRateModelV2\",\n  // \"contracts/ReactiveJumpRateModelV2.sol:ReactiveJumpRateModelV2\",\n];\nif (process.env.NODE_ENV === \"development\") usedContractBinKeys = usedContractBinKeys.concat([\n  \"contracts/Comptroller.sol:Comptroller\",\n  \"contracts/CEtherDelegate.sol:CEtherDelegate\",\n  \"contracts/CErc20Delegate.sol:CErc20Delegate\",\n  \"contracts/RewardsDistributorDelegate.sol:RewardsDistributorDelegate\",\n  \"contracts/SimplePriceOracle.sol:SimplePriceOracle\",\n]);\nfor (const contractKey of usedContractBinKeys) {\n  if (!minContracts[contractKey]) minContracts[contractKey] = {};\n  minContracts[contractKey].bin = compoundContracts[contractKey].bin;\n}\nfs.writeFileSync(\n  __dirname + \"/../src/contracts/compound-protocol.min.json\",\n  JSON.stringify({ contracts: minContracts })\n);\n\n/* minContracts = {};\nvar usedContractAbiKeys = [\n  \"contracts/Uniswap/UniswapAnchoredView.sol:UniswapAnchoredView\",\n  \"contracts/OpenOraclePriceData.sol:OpenOraclePriceData\",\n  \"contracts/Uniswap/UniswapView.sol:UniswapView\",\n];\nfor (const contractKey of usedContractAbiKeys) {\n  if (!minContracts[contractKey]) minContracts[contractKey] = {};\n  minContracts[contractKey].abi = openOracleContracts[contractKey].abi;\n}\nvar usedContractBinKeys = [\n  \"contracts/Uniswap/UniswapAnchoredView.sol:UniswapAnchoredView\",\n  \"contracts/Uniswap/UniswapView.sol:UniswapView\",\n];\nfor (const contractKey of usedContractBinKeys) {\n  if (!minContracts[contractKey]) minContracts[contractKey] = {};\n  minContracts[contractKey].bin = openOracleContracts[contractKey].bin;\n}\nfs.writeFileSync(\n  __dirname + \"/../src/contracts/open-oracle.min.json\",\n  JSON.stringify({ contracts: minContracts })\n);\n */\nminContracts = {};\nfs.readdirSync(__dirname + \"/../src/contracts/oracles/\").forEach((file) => {\n  var contract = JSON.parse(\n    fs.readFileSync(__dirname + \"/../src/contracts/oracles/\" + file)\n  );\n  minContracts[contract.contractName] = {\n    abi: contract.abi\n  };\n  if (process.env.NODE_ENV === \"development\") minContracts[contract.contractName].bin = contract.bytecode;\n});\nfs.writeFileSync(\n  __dirname + \"/../src/contracts/oracles.min.json\",\n  JSON.stringify({ contracts: minContracts })\n);\n"
  },
  {
    "path": "src/fuse-sdk/src/abi/FuseFeeDistributor.json",
    "content": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_latestCErc20Delegate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowResign\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"becomeImplementationData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"_latestCEtherDelegate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowResign\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"becomeImplementationData\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"cErc20DelegateWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"cEtherDelegateWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"comptrollerImplementationWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"customInterestFeeRates\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultInterestFeeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSupplyEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxUtilizationRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minBorrowEth\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_defaultInterestFeeRate\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_defaultInterestFeeRate\",\"type\":\"uint256\"}],\"name\":\"_setDefaultInterestFeeRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"erc20Contract\",\"type\":\"address\"}],\"name\":\"_withdrawAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minBorrowEth\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxSupplyEth\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_maxUtilizationRate\",\"type\":\"uint256\"}],\"name\":\"_setPoolLimits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"_callPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"targets\",\"type\":\"address[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"_callPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorData\",\"type\":\"bytes\"}],\"name\":\"deployCEther\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorData\",\"type\":\"bytes\"}],\"name\":\"deployCErc20\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oldImplementations\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"newImplementations\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"statuses\",\"type\":\"bool[]\"}],\"name\":\"_editComptrollerImplementationWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oldImplementations\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"newImplementations\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"allowResign\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"statuses\",\"type\":\"bool[]\"}],\"name\":\"_editCErc20DelegateWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"oldImplementations\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"newImplementations\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"allowResign\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"statuses\",\"type\":\"bool[]\"}],\"name\":\"_editCEtherDelegateWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"}],\"name\":\"latestComptrollerImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"_setLatestComptrollerImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"}],\"name\":\"latestCErc20Delegate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"}],\"name\":\"latestCEtherDelegate\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowResign\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"becomeImplementationData\",\"type\":\"bytes\"}],\"name\":\"_setLatestCEtherDelegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oldImplementation\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowResign\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"becomeImplementationData\",\"type\":\"bytes\"}],\"name\":\"_setLatestCErc20Delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"interestFeeRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"rate\",\"type\":\"int256\"}],\"name\":\"_setCustomInterestFeeRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]\n"
  },
  {
    "path": "src/fuse-sdk/src/abi/FusePoolDirectory.json",
    "content": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"admins\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"AdminWhitelistUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"struct FusePoolDirectory.FusePool\",\"name\":\"pool\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"adminWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deployerWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enforceDeployerWhitelist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"poolExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"pools\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_enforceDeployerWhitelist\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"_deployerWhitelist\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enforce\",\"type\":\"bool\"}],\"name\":\"_setDeployerWhitelistEnforcement\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"deployers\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"_editDeployerWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enforceWhitelist\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"closeFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidationIncentive\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"priceOracle\",\"type\":\"address\"}],\"name\":\"deployPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllPools\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPublicPools\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getPoolsByAccount\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getBookmarks\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"}],\"name\":\"bookmarkPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setPoolName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"admins\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"_editAdminWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"whitelistedAdmin\",\"type\":\"bool\"}],\"name\":\"getPublicPoolsByVerification\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]\n"
  },
  {
    "path": "src/fuse-sdk/src/abi/FusePoolLens.json",
    "content": "[{\"inputs\":[],\"name\":\"directory\",\"outputs\":[{\"internalType\":\"contract FusePoolDirectory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"contract FusePoolDirectory\",\"name\":\"_directory\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPublicPoolsWithData\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"underlyingTokens\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"underlyingSymbols\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"whitelistedAdmin\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLens.FusePoolData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"whitelistedAdmin\",\"type\":\"bool\"}],\"name\":\"getPublicPoolsByVerificationWithData\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"underlyingTokens\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"underlyingSymbols\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"whitelistedAdmin\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLens.FusePoolData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getPoolsByAccountWithData\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"underlyingTokens\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"underlyingSymbols\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"whitelistedAdmin\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLens.FusePoolData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Comptroller\",\"name\":\"comptroller\",\"type\":\"address\"}],\"name\":\"getPoolSummary\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Comptroller\",\"name\":\"comptroller\",\"type\":\"address\"}],\"name\":\"getPoolAssetsWithData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"cToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"underlyingDecimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyRatePerBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRatePerBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"membership\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"exchangeRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"collateralFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fuseFee\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"borrowGuardianPaused\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLens.FusePoolAsset[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxHealth\",\"type\":\"uint256\"}],\"name\":\"getPublicPoolUsersWithData\",\"outputs\":[{\"internalType\":\"contract Comptroller[]\",\"name\":\"\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"health\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"cToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"underlyingDecimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyRatePerBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRatePerBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"membership\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"exchangeRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"collateralFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fuseFee\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"borrowGuardianPaused\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLens.FusePoolAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"}],\"internalType\":\"struct FusePoolLens.FusePoolUser[][]\",\"name\":\"\",\"type\":\"tuple[][]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Comptroller[]\",\"name\":\"comptrollers\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"maxHealth\",\"type\":\"uint256\"}],\"name\":\"getPoolUsersWithData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"health\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"cToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"underlyingDecimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyRatePerBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRatePerBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"membership\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"exchangeRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"collateralFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fuseFee\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"borrowGuardianPaused\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLens.FusePoolAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"}],\"internalType\":\"struct FusePoolLens.FusePoolUser[][]\",\"name\":\"\",\"type\":\"tuple[][]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Comptroller\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxHealth\",\"type\":\"uint256\"}],\"name\":\"getPoolUsersWithData\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalCollateral\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"health\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"cToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"underlyingName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"underlyingSymbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"underlyingDecimals\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyRatePerBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowRatePerBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"borrowBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"liquidity\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"membership\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"exchangeRate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"underlyingPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"collateralFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveFactor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"adminFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fuseFee\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"borrowGuardianPaused\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLens.FusePoolAsset[]\",\"name\":\"assets\",\"type\":\"tuple[]\"}],\"internalType\":\"struct FusePoolLens.FusePoolUser[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getPoolsBySupplier\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getPoolsBySupplierWithData\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"underlyingTokens\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"underlyingSymbols\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"whitelistedAdmin\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLens.FusePoolData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getUserSummary\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Comptroller\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getPoolUserSummary\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getWhitelistedPoolsByAccount\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getWhitelistedPoolsByAccountWithData\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"comptroller\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"blockPosted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestampPosted\",\"type\":\"uint256\"}],\"internalType\":\"struct FusePoolDirectory.FusePool[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalBorrow\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"underlyingTokens\",\"type\":\"address[]\"},{\"internalType\":\"string[]\",\"name\":\"underlyingSymbols\",\"type\":\"string[]\"},{\"internalType\":\"bool\",\"name\":\"whitelistedAdmin\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLens.FusePoolData[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]\n"
  },
  {
    "path": "src/fuse-sdk/src/abi/FusePoolLensSecondary.json",
    "content": "[{\"inputs\":[],\"name\":\"directory\",\"outputs\":[{\"internalType\":\"contract FusePoolDirectory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"contract FusePoolDirectory\",\"name\":\"_directory\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Comptroller\",\"name\":\"comptroller\",\"type\":\"address\"}],\"name\":\"getPoolOwnership\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"cToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"adminHasRights\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"fuseAdminHasRights\",\"type\":\"bool\"}],\"internalType\":\"struct FusePoolLensSecondary.CTokenOwnership[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract CToken\",\"name\":\"cTokenModify\",\"type\":\"address\"}],\"name\":\"getMaxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"contract CToken\",\"name\":\"cTokenModify\",\"type\":\"address\"}],\"name\":\"getMaxBorrow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract Comptroller\",\"name\":\"comptroller\",\"type\":\"address\"}],\"name\":\"getRewardSpeedsByPool\",\"outputs\":[{\"internalType\":\"contract CToken[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"contract RewardsDistributor[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"\",\"type\":\"uint256[][]\"},{\"internalType\":\"uint256[][]\",\"name\":\"\",\"type\":\"uint256[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"contract Comptroller[]\",\"name\":\"comptrollers\",\"type\":\"address[]\"}],\"name\":\"getRewardSpeedsByPools\",\"outputs\":[{\"internalType\":\"contract CToken[][]\",\"name\":\"\",\"type\":\"address[][]\"},{\"internalType\":\"contract RewardsDistributor[][]\",\"name\":\"\",\"type\":\"address[][]\"},{\"internalType\":\"address[][]\",\"name\":\"\",\"type\":\"address[][]\"},{\"internalType\":\"uint256[][][]\",\"name\":\"\",\"type\":\"uint256[][][]\"},{\"internalType\":\"uint256[][][]\",\"name\":\"\",\"type\":\"uint256[][][]\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"holder\",\"type\":\"address\"},{\"internalType\":\"contract RewardsDistributor[]\",\"name\":\"distributors\",\"type\":\"address[]\"}],\"name\":\"getUnclaimedRewardsByDistributors\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"contract CToken[][]\",\"name\":\"\",\"type\":\"address[][]\"},{\"internalType\":\"uint256[2][][]\",\"name\":\"\",\"type\":\"uint256[2][][]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"supplier\",\"type\":\"address\"}],\"name\":\"getRewardsDistributorsBySupplier\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"contract Comptroller[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"contract RewardsDistributor[][]\",\"name\":\"\",\"type\":\"address[][]\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true}]\n"
  },
  {
    "path": "src/fuse-sdk/src/abi/FuseSafeLiquidator.json",
    "content": "[{\"stateMutability\":\"payable\",\"type\":\"receive\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"contract CEther\",\"name\":\"cEther\",\"type\":\"address\"},{\"internalType\":\"contract CErc20\",\"name\":\"cErc20Collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minOutputAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"exchangeSeizedTo\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router02\",\"name\":\"uniswapV2Router\",\"type\":\"address\"},{\"internalType\":\"contract IRedemptionStrategy[]\",\"name\":\"redemptionStrategies\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"strategyData\",\"type\":\"bytes[]\"}],\"name\":\"safeLiquidate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract CErc20\",\"name\":\"cErc20\",\"type\":\"address\"},{\"internalType\":\"contract CToken\",\"name\":\"cTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minOutputAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"exchangeSeizedTo\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router02\",\"name\":\"uniswapV2Router\",\"type\":\"address\"},{\"internalType\":\"contract IRedemptionStrategy[]\",\"name\":\"redemptionStrategies\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"strategyData\",\"type\":\"bytes[]\"}],\"name\":\"safeLiquidate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract CErc20\",\"name\":\"cErc20\",\"type\":\"address\"},{\"internalType\":\"contract CToken\",\"name\":\"cTokenCollateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minProfitAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"exchangeProfitTo\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router02\",\"name\":\"uniswapV2RouterForBorrow\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router02\",\"name\":\"uniswapV2RouterForCollateral\",\"type\":\"address\"},{\"internalType\":\"contract IRedemptionStrategy[]\",\"name\":\"redemptionStrategies\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"strategyData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"ethToCoinbase\",\"type\":\"uint256\"}],\"name\":\"safeLiquidateToTokensWithFlashLoan\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"borrower\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"repayAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract CEther\",\"name\":\"cEther\",\"type\":\"address\"},{\"internalType\":\"contract CErc20\",\"name\":\"cErc20Collateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minProfitAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"exchangeProfitTo\",\"type\":\"address\"},{\"internalType\":\"contract IUniswapV2Router02\",\"name\":\"uniswapV2RouterForCollateral\",\"type\":\"address\"},{\"internalType\":\"contract IRedemptionStrategy[]\",\"name\":\"redemptionStrategies\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"strategyData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"ethToCoinbase\",\"type\":\"uint256\"}],\"name\":\"safeLiquidateToEthWithFlashLoan\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"uniswapV2Call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"underlyingCollateral\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingCollateralSeized\",\"type\":\"uint256\"},{\"internalType\":\"contract IRedemptionStrategy\",\"name\":\"strategy\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"strategyData\",\"type\":\"bytes\"}],\"name\":\"redeemCustomCollateral\",\"outputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]\n"
  },
  {
    "path": "src/fuse-sdk/src/abi/InitializableClones.json",
    "content": "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"instance\",\"type\":\"address\"}],\"name\":\"Deployed\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"master\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"initializer\",\"type\":\"bytes\"}],\"name\":\"clone\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"instance\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]\n"
  },
  {
    "path": "src/fuse-sdk/src/abi/UniswapV3Pool.slim.json",
    "content": "[{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"}],\"name\":\"increaseObservationCardinalityNext\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slot0\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"internalType\":\"uint16\",\"name\":\"observationIndex\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinality\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"observationCardinalityNext\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"feeProtocol\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/compound-protocol.min.json",
    "content": "{\"contracts\":{\"contracts/Comptroller.sol:Comptroller\":{\"abi\":\"[{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"action\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"pauseState\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"ActionPaused\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"action\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"pauseState\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"ActionPaused\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"rewardsDistributor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddedRewardsDistributor\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"enabled\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"AutoImplementationsToggled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"error\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"info\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"detail\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Failure\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"MarketEntered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"MarketExited\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"MarketListed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"MarketUnlisted\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newBorrowCap\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewBorrowCap\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldBorrowCapGuardian\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newBorrowCapGuardian\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewBorrowCapGuardian\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldCloseFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newCloseFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewCloseFactor\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldCollateralFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newCollateralFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewCollateralFactor\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldLiquidationIncentiveMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newLiquidationIncentiveMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewLiquidationIncentive\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldPauseGuardian\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newPauseGuardian\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewPauseGuardian\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"oldPriceOracle\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"newPriceOracle\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewPriceOracle\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newSupplyCap\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewSupplyCap\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"enforce\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"WhitelistEnforcementChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"distributor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_addRewardsDistributor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"_afterNonReentrant\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract Unitroller\\\",\\\"name\\\":\\\"unitroller\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_become\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"_becomeImplementation\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"_beforeNonReentrant\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"_borrowGuardianPaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isCEther\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"constructorData\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"collateralFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_deployMarket\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"_mintGuardianPaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newBorrowCapGuardian\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setBorrowCapGuardian\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"state\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"_setBorrowPaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newCloseFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setCloseFactor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newCollateralFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setCollateralFactor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newLiquidationIncentiveMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setLiquidationIncentive\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken[]\\\",\\\"name\\\":\\\"cTokens\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"newBorrowCaps\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"_setMarketBorrowCaps\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken[]\\\",\\\"name\\\":\\\"cTokens\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"newSupplyCaps\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"_setMarketSupplyCaps\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"state\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"_setMintPaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newPauseGuardian\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setPauseGuardian\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"newOracle\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setPriceOracle\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"state\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"_setSeizePaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"state\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"_setTransferPaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"enforce\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"_setWhitelistEnforcement\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"suppliers\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"bool[]\\\",\\\"name\\\":\\\"statuses\\\",\\\"type\\\":\\\"bool[]\\\"}],\\\"name\\\":\\\"_setWhitelistStatuses\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"enabled\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"_toggleAutoImplementations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_unsupportMarket\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"accountAssets\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"adminHasRights\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"allBorrowers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"allMarkets\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"autoImplementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"borrowAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"borrowCapGuardian\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"borrowCaps\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"borrowGuardianPaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"borrowVerify\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"accountBorrowsNew\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"borrowWithinLimits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"cTokensByUnderlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"checkMembership\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"closeFactorMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"comptrollerImplementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"enforceWhitelist\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"cTokens\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"enterMarkets\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenAddress\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"exitMarket\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"fuseAdminHasRights\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountLiquidity\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"getAllBorrowers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"getAllMarkets\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract CToken[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAssetsIn\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract CToken[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenModify\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemTokens\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getHypotheticalAccountLiquidity\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"getRewardsDistributors\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"getWhitelist\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isComptroller\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isDeprecated\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenBorrowed\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"liquidateBorrowAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenBorrowed\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"actualRepayAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"seizeTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"liquidateBorrowVerify\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenBorrowed\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"actualRepayAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"liquidateCalculateSeizeTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"liquidationIncentiveMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"markets\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isListed\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"collateralFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"minter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mintAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"mintGuardianPaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"minter\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"actualMintAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mintVerify\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"exchangeRateMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"accountTokens\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mintWithinLimits\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"oracle\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"pauseGuardian\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"pendingAdmin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"pendingComptrollerImplementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"redeemer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"redeemAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"redeemer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"redeemVerify\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"payer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"repayBorrowAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"payer\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"actualRepayAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowerIndex\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"repayBorrowVerify\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"rewardsDistributors\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenBorrowed\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"seizeTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"seizeAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"seizeGuardianPaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenBorrowed\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"seizeTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"seizeVerify\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"suppliers\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"supplyCaps\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"src\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"transferTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transferAllowed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"transferGuardianPaused\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"src\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"transferTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transferVerify\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"whitelist\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"whitelistArray\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\"},\"contracts/Unitroller.sol:Unitroller\":{\"abi\":\"[{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"hasRights\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"AdminRightsToggled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"error\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"info\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"detail\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Failure\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"hasRights\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"FuseAdminRightsToggled\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldAdmin\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewAdmin\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldImplementation\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newImplementation\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewImplementation\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldPendingAdmin\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newPendingAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewPendingAdmin\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldPendingImplementation\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newPendingImplementation\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewPendingImplementation\\\",\\\"type\\\":\\\"event\\\"},{\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"fallback\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"_acceptAdmin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"_acceptImplementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newPendingAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setPendingAdmin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newPendingImplementation\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setPendingImplementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"hasRights\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"_toggleAdminRights\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"hasRights\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"_toggleFuseAdminRights\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"adminHasRights\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"comptrollerImplementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"fuseAdminHasRights\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"pendingAdmin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"pendingComptrollerImplementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\"bin\":\"60806040526001805460ff60a81b1960ff60a01b19909116600160a01b1716600160a81b17905534801561003257600080fd5b50600080546001600160a01b03191633179055610ae1806100546000396000f3fe6080604052600436106100a75760003560e01c8063bb82aa5e11610064578063bb82aa5e14610437578063c1e803341461044c578063dcfbc0c714610461578063e992a04114610476578063e9c714f2146104a9578063f851a440146104be576100a7565b80630225ab9d1461032b5780630a755ec21461036957806326782247146103925780632f1069ba146103c35780636f63af0b146103d8578063b71d1a0c14610404575b3330146102a85760408051600481526024810182526020810180516001600160e01b0316633757348b60e21b1781529151815160009360609330939092909182918083835b6020831061010b5780518252601f1990920191602091820191016100ec565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d806000811461016b576040519150601f19603f3d011682016040523d82523d6000602084013e610170565b606091505b5091509150600082156101975781806020019051602081101561019257600080fd5b505190505b80156102a4576002546040805163bbcdd6d360e01b81526001600160a01b0390921660048301525160009173a731585ab05fc9f83555cf9bff8f58ee94e18f859163bbcdd6d391602480820192602092909190829003018186803b1580156101fe57600080fd5b505afa158015610212573d6000803e3d6000fd5b505050506040513d602081101561022857600080fd5b50516002549091506001600160a01b038083169116146102a257600280546001600160a01b038381166001600160a01b0319831617928390556040805192821680845293909116602083015280517fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9281900390910190a1505b505b5050505b6002546040516000916001600160a01b031690829036908083838082843760405192019450600093509091505080830381855af49150503d806000811461030b576040519150601f19603f3d011682016040523d82523d6000602084013e610310565b606091505b505090506040513d6000823e818015610327573d82f35b3d82fd5b34801561033757600080fd5b506103576004803603602081101561034e57600080fd5b503515156104d3565b60408051918252519081900360200190f35b34801561037557600080fd5b5061037e61056f565b604080519115158252519081900360200190f35b34801561039e57600080fd5b506103a761057f565b604080516001600160a01b039092168252519081900360200190f35b3480156103cf57600080fd5b5061037e61058e565b3480156103e457600080fd5b50610357600480360360208110156103fb57600080fd5b5035151561059e565b34801561041057600080fd5b506103576004803603602081101561042757600080fd5b50356001600160a01b031661063a565b34801561044357600080fd5b506103a76106bd565b34801561045857600080fd5b506103576106cc565b34801561046d57600080fd5b506103a76107c7565b34801561048257600080fd5b506103576004803603602081101561049957600080fd5b50356001600160a01b03166107d6565b3480156104b557600080fd5b506103576108f6565b3480156104ca57600080fd5b506103a76109dc565b60006104dd6109eb565b6104f4576104ed60016005610a46565b905061056a565b60015460ff600160a81b90910416151582151514156105145760006104ed565b60018054831515600160a81b810260ff60a81b199092169190911790915560408051918252517f10f9a0a95673b0837d1dce21fd3bffcb6d760435e9b5300b75a271182f75f8229181900360200190a160005b90505b919050565b600154600160a81b900460ff1681565b6001546001600160a01b031681565b600154600160a01b900460ff1681565b60006105a86109eb565b6105b8576104ed60016005610a46565b60015460ff600160a01b90910416151582151514156105d85760006104ed565b60018054831515600160a01b90810260ff60a01b199092169190911791829055604080519190920460ff161515815290517fabb56a15fd39488c914b324690b88f30d7daec63d2131ca0ef47e5739068c86e9181900360200190a16000610567565b60006106446109eb565b610654576104ed60016010610a46565b600180546001600160a01b038481166001600160a01b0319831681179093556040805191909216808252602082019390935281517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9929181900390910190a160005b9392505050565b6002546001600160a01b031681565b6003546000906001600160a01b0316331415806106f257506003546001600160a01b0316155b1561070957610702600180610a46565b90506107c4565b60028054600380546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a92908290030190a1600354604080516001600160a01b038085168252909216602083015280517fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d8159281900390910190a160005b925050505b90565b6003546001600160a01b031681565b60006107e06109eb565b6107f0576104ed60016012610a46565b60025460408051639d244f9f60e01b81526001600160a01b03928316600482015291841660248301525173a731585ab05fc9f83555cf9bff8f58ee94e18f8591639d244f9f916044808301926020929190829003018186803b15801561085557600080fd5b505afa158015610869573d6000803e3d6000fd5b505050506040513d602081101561087f57600080fd5b5051610891576104ed60016011610a46565b600380546001600160a01b038481166001600160a01b0319831617928390556040805192821680845293909116602083015280517fe945ccee5d701fc83f9b8aa8ca94ea4219ec1fcbd4f4cab4f0ea57c5c3e1d8159281900390910190a160006106b6565b6001546000906001600160a01b031633141580610911575033155b156109225761070260016000610a46565b60008054600180546001600160a01b038082166001600160a01b031980861682179687905590921690925560408051938316808552949092166020840152815190927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92908290030190a1600154604080516001600160a01b038085168252909216602083015280517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99281900390910190a160006107bf565b6000546001600160a01b031681565b600080546001600160a01b031633148015610a0f5750600154600160a81b900460ff165b80610a4157503373a731585ab05fc9f83555cf9bff8f58ee94e18f85148015610a415750600154600160a01b900460ff165b905090565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836015811115610a7557fe5b83601b811115610a8157fe5b604080519283526020830191909152600082820152519081900360600190a18260158111156106b657fefea265627a7a72315820a5cf9491a370c17ee98b3c08c728cc0ddad83bd43ca76c92dc106835bfccb25664736f6c63430005110032\"},\"contracts/CEtherDelegate.sol:CEtherDelegate\":{\"abi\":\"[{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"cashPrior\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"interestAccumulated\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowIndex\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"totalBorrows\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AccrueInterest\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Approval\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"accountBorrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"totalBorrows\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Borrow\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"error\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"info\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"detail\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Failure\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"seizeTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"LiquidateBorrow\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"minter\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Mint\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldAdminFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newAdminFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewAdminFee\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"oldComptroller\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"newComptroller\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewComptroller\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldFuseFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newFuseFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewFuseFee\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldImplementation\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newImplementation\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewImplementation\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"oldInterestRateModel\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"newInterestRateModel\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewMarketInterestRateModel\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldReserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newReserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewReserveFactor\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"redeemer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Redeem\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"payer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"accountBorrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"totalBorrows\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"RepayBorrow\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"benefactor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"addAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTotalReserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ReservesAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"admin\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reduceAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTotalReserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ReservesReduced\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Transfer\\\",\\\"type\\\":\\\"event\\\"},{\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"fallback\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"_becomeImplementation\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"_prepare\\\",\\\"outputs\\\":[],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reduceAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_reduceReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newAdminFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setAdminFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"implementation_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"allowResign\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"becomeImplementationData\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"_setImplementationSafe\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"newInterestRateModel\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setInterestRateModel\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"_setNameAndSymbol\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newReserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setReserveFactor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"withdrawAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_withdrawAdminFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"withdrawAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_withdrawFuseFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"accrualBlockNumber\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"accrueInterest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"adminFeeMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"allowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"approve\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOfUnderlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"borrow\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"borrowBalanceCurrent\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"borrowBalanceStored\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"borrowIndex\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"borrowRatePerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"comptroller\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"decimals\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"exchangeRateCurrent\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"exchangeRateStored\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"fuseFeeMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountSnapshot\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"getCash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"implementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"comptroller_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"interestRateModel_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"initialExchangeRateMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"decimals_\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserveFactorMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"adminFeeMantissa_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"comptroller_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"interestRateModel_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserveFactorMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"adminFeeMantissa_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"interestRateModel\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isCEther\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isCToken\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"liquidateBorrow\\\",\\\"outputs\\\":[],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"mint\\\",\\\"outputs\\\":[],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"protocolSeizeShareMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"redeem\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"redeemUnderlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"repayBorrow\\\",\\\"outputs\\\":[],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"repayBorrowBehalf\\\",\\\"outputs\\\":[],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"reserveFactorMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"seizeTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"seize\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"supplyRatePerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"symbol\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalAdminFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalBorrows\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"totalBorrowsCurrent\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalFuseFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalSupply\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transfer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"src\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transferFrom\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"underlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\"},\"contracts/CEtherDelegator.sol:CEtherDelegator\":{\"abi\":\"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"comptroller_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"interestRateModel_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"implementation_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"becomeImplementationData\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserveFactorMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"adminFeeMantissa_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"fallback\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"implementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\"bin\":\"608060405234801561001057600080fd5b50604051610785380380610785833981810160405261010081101561003457600080fd5b8151602083015160408085018051915193959294830192918464010000000082111561005f57600080fd5b90830190602082018581111561007457600080fd5b825164010000000081118282018810171561008e57600080fd5b82525081516020918201929091019080838360005b838110156100bb5781810151838201526020016100a3565b50505050905090810190601f1680156100e85780820380516001836020036101000a031916815260200191505b506040526020018051604051939291908464010000000082111561010b57600080fd5b90830190602082018581111561012057600080fd5b825164010000000081118282018810171561013a57600080fd5b82525081516020918201929091019080838360005b8381101561016757818101518382015260200161014f565b50505050905090810190601f1680156101945780820380516001836020036101000a031916815260200191505b506040818152602083015192018051929491939192846401000000008211156101bc57600080fd5b9083019060208201858111156101d157600080fd5b82516401000000008111828201881017156101eb57600080fd5b82525081516020918201929091019080838360005b83811015610218578181015183820152602001610200565b50505050905090810190601f1680156102455780820380516001836020036101000a031916815260200191505b5060405260200180519060200190929190805190602001909291905050506103ba8489898989878760405160240180876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b031681526020018060200180602001858152602001848152602001838103835287818151815260200191508051906020019080838360005b838110156102ed5781810151838201526020016102d5565b50505050905090810190601f16801561031a5780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561034d578181015183820152602001610335565b50505050905090810190601f16801561037a5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b03908116631e70b25560e21b1790915290995061049c16975050505050505050565b5061048e848560008660405160240180846001600160a01b03166001600160a01b031681526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561042557818101518382015260200161040d565b50505050905090810190601f1680156104525780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b039081166350d85b7360e01b1790915290955061049c169350505050565b50505050505050505061055e565b606060006060846001600160a01b0316846040518082805190602001908083835b602083106104dc5780518252601f1990920191602091820191016104bd565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461053c576040519150601f19603f3d011682016040523d82523d6000602084013e610541565b606091505b50915091506000821415610556573d60208201fd5b949350505050565b6102188061056d6000396000f3fe60806040526004361061001e5760003560e01c80635c60da1b146100e1575b6000546040805160048152602481019091526020810180516001600160e01b031663076de25160e21b17905261005d916001600160a01b031690610112565b50600080546040516001600160a01b0390911690829036908083838082843760405192019450600093509091505080830381855af49150503d80600081146100c1576040519150601f19603f3d011682016040523d82523d6000602084013e6100c6565b606091505b505090506040513d6000823e8180156100dd573d82f35b3d82fd5b3480156100ed57600080fd5b506100f66101d4565b604080516001600160a01b039092168252519081900360200190f35b606060006060846001600160a01b0316846040518082805190602001908083835b602083106101525780518252601f199092019160209182019101610133565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101b2576040519150601f19603f3d011682016040523d82523d6000602084013e6101b7565b606091505b509150915060008214156101cc573d60208201fd5b949350505050565b6000546001600160a01b03168156fea265627a7a723158208e3e63485e5f7ae8cba3fa394e12885c029940469c7a173b8ff7745fabdad3b364736f6c63430005110032\"},\"contracts/EIP20Interface.sol:EIP20Interface\":{\"abi\":\"[{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Approval\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Transfer\\\",\\\"type\\\":\\\"event\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"allowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"remaining\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"approve\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"success\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"balance\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"decimals\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"symbol\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalSupply\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transfer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"success\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"src\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transferFrom\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"success\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}]\"},\"contracts/CErc20Delegate.sol:CErc20Delegate\":{\"abi\":\"[{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"cashPrior\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"interestAccumulated\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowIndex\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"totalBorrows\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AccrueInterest\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Approval\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"accountBorrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"totalBorrows\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Borrow\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"error\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"info\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"detail\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Failure\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"seizeTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"LiquidateBorrow\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"minter\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Mint\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldAdminFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newAdminFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewAdminFee\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"oldComptroller\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"newComptroller\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewComptroller\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldFuseFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newFuseFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewFuseFee\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldImplementation\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newImplementation\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewImplementation\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"oldInterestRateModel\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"newInterestRateModel\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewMarketInterestRateModel\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldReserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newReserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewReserveFactor\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"redeemer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Redeem\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"payer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"accountBorrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"totalBorrows\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"RepayBorrow\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"benefactor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"addAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTotalReserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ReservesAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"admin\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reduceAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTotalReserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ReservesReduced\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Transfer\\\",\\\"type\\\":\\\"event\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"_becomeImplementation\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"compLikeDelegatee\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_delegateCompLikeTo\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"_prepare\\\",\\\"outputs\\\":[],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reduceAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_reduceReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newAdminFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setAdminFee\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"implementation_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"allowResign\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"becomeImplementationData\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"_setImplementationSafe\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"newInterestRateModel\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setInterestRateModel\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_name\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"_symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"_setNameAndSymbol\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newReserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setReserveFactor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"withdrawAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_withdrawAdminFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"withdrawAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_withdrawFuseFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"accrualBlockNumber\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"accrueInterest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"adminFeeMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"allowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"approve\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOfUnderlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"borrow\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"borrowBalanceCurrent\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"borrowBalanceStored\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"borrowIndex\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"borrowRatePerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"comptroller\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"decimals\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"exchangeRateCurrent\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"exchangeRateStored\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"fuseFeeMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountSnapshot\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"getCash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"implementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"comptroller_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"interestRateModel_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"initialExchangeRateMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"decimals_\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserveFactorMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"adminFeeMantissa_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"comptroller_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"interestRateModel_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserveFactorMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"adminFeeMantissa_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"interestRateModel\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isCEther\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isCToken\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"contract CTokenInterface\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"liquidateBorrow\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"mint\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"protocolSeizeShareMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"redeem\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"redeemUnderlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"repayBorrow\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"repayBorrowBehalf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"reserveFactorMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"seizeTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"seize\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"supplyRatePerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"symbol\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalAdminFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalBorrows\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"totalBorrowsCurrent\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalFuseFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalSupply\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transfer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"src\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transferFrom\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"underlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\"},\"contracts/CErc20Delegator.sol:CErc20Delegator\":{\"abi\":\"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"comptroller_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"interestRateModel_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"name_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol_\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"implementation_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"becomeImplementationData\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserveFactorMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"adminFeeMantissa_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"fallback\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"implementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\"bin\":\"608060405234801561001057600080fd5b506040516107f53803806107f5833981810160405261012081101561003457600080fd5b81516020830151604080850151606086018051925194969395919493918201928464010000000082111561006757600080fd5b90830190602082018581111561007c57600080fd5b825164010000000081118282018810171561009657600080fd5b82525081516020918201929091019080838360005b838110156100c35781810151838201526020016100ab565b50505050905090810190601f1680156100f05780820380516001836020036101000a031916815260200191505b506040526020018051604051939291908464010000000082111561011357600080fd5b90830190602082018581111561012857600080fd5b825164010000000081118282018810171561014257600080fd5b82525081516020918201929091019080838360005b8381101561016f578181015183820152602001610157565b50505050905090810190601f16801561019c5780820380516001836020036101000a031916815260200191505b506040818152602083015192018051929491939192846401000000008211156101c457600080fd5b9083019060208201858111156101d957600080fd5b82516401000000008111828201881017156101f357600080fd5b82525081516020918201929091019080838360005b83811015610220578181015183820152602001610208565b50505050905090810190601f16801561024d5780820380516001836020036101000a031916815260200191505b50604081815260208381015193909101516001600160a01b03808e1660248501908152818e166044860152908c16606485015260c4840185905260e4840182905260e0608485019081528b516101048601528b519597509195506103b59489948f948f948f948f948f948d948d949260a4830192610124019189019080838360005b838110156102e75781810151838201526020016102cf565b50505050905090810190601f1680156103145780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561034757818101518382015260200161032f565b50505050905090810190601f1680156103745780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b0390811663a0b0d28960e01b17909152909a506104981698505050505050505050565b50610489848560008660405160240180846001600160a01b03166001600160a01b031681526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610420578181015183820152602001610408565b50505050905090810190601f16801561044d5780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529190526020810180516001600160e01b039081166350d85b7360e01b17909152909550610498169350505050565b5050505050505050505061055a565b606060006060846001600160a01b0316846040518082805190602001908083835b602083106104d85780518252601f1990920191602091820191016104b9565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114610538576040519150601f19603f3d011682016040523d82523d6000602084013e61053d565b606091505b50915091506000821415610552573d60208201fd5b949350505050565b61028c806105696000396000f3fe60806040526004361061001e5760003560e01c80635c60da1b1461011e575b341561005b5760405162461bcd60e51b81526004018080602001828103825260378152602001806102216037913960400191505060405180910390fd5b6000546040805160048152602481019091526020810180516001600160e01b031663076de25160e21b17905261009a916001600160a01b03169061014f565b50600080546040516001600160a01b0390911690829036908083838082843760405192019450600093509091505080830381855af49150503d80600081146100fe576040519150601f19603f3d011682016040523d82523d6000602084013e610103565b606091505b505090506040513d6000823e81801561011a573d82f35b3d82fd5b34801561012a57600080fd5b50610133610211565b604080516001600160a01b039092168252519081900360200190f35b606060006060846001600160a01b0316846040518082805190602001908083835b6020831061018f5780518252601f199092019160209182019101610170565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146101ef576040519150601f19603f3d011682016040523d82523d6000602084013e6101f4565b606091505b50915091506000821415610209573d60208201fd5b949350505050565b6000546001600160a01b03168156fe43457263323044656c656761746f723a66616c6c6261636b3a2063616e6e6f742073656e642076616c756520746f2066616c6c6261636ba265627a7a7231582005c7822f7294a2303680b0d2b051bee472cd65b928fd92bacf345e29e5b26c9f64736f6c63430005110032\"},\"contracts/CTokenInterfaces.sol:CTokenInterface\":{\"abi\":\"[{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"cashPrior\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"interestAccumulated\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowIndex\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"totalBorrows\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AccrueInterest\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Approval\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrowAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"accountBorrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"totalBorrows\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Borrow\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"error\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"info\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"detail\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Failure\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cTokenCollateral\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"seizeTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"LiquidateBorrow\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"minter\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"mintTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Mint\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldAdminFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newAdminFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewAdminFee\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"oldComptroller\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"newComptroller\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewComptroller\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldFuseFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newFuseFeeMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewFuseFee\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"oldInterestRateModel\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"newInterestRateModel\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewMarketInterestRateModel\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldReserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newReserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewReserveFactor\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"redeemer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"redeemTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Redeem\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"payer\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"repayAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"accountBorrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"totalBorrows\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"RepayBorrow\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"benefactor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"addAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTotalReserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ReservesAdded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"admin\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reduceAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTotalReserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ReservesReduced\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"from\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"to\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"Transfer\\\",\\\"type\\\":\\\"event\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reduceAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_reduceReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"newInterestRateModel\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setInterestRateModel\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newReserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setReserveFactor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"accrualBlockNumber\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"accrueInterest\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"adminFeeMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"allowance\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"approve\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"balanceOfUnderlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"borrowBalanceCurrent\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"borrowBalanceStored\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"borrowIndex\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"borrowRatePerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"comptroller\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ComptrollerInterface\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"decimals\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"exchangeRateCurrent\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"exchangeRateStored\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"fuseFeeMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"account\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getAccountSnapshot\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"getCash\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"interestRateModel\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract InterestRateModel\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isCEther\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isCToken\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"protocolSeizeShareMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"reserveFactorMantissa\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"liquidator\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"seizeTokens\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"seize\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"supplyRatePerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"symbol\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalAdminFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalBorrows\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"totalBorrowsCurrent\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalFuseFees\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"totalSupply\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transfer\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"src\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"transferFrom\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}]\"},\"contracts/WhitePaperInterestRateModel.sol:WhitePaperInterestRateModel\":{\"abi\":\"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseRatePerYear\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"multiplierPerYear\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseRatePerBlock\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"multiplierPerBlock\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewInterestParams\\\",\\\"type\\\":\\\"event\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"baseRatePerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"blocksPerYear\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"cash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getBorrowRate\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"cash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserves\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getSupplyRate\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isInterestRateModel\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"multiplierPerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"cash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"utilizationRate\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}]\",\"bin\":\"608060405234801561001057600080fd5b506040516106da3803806106da8339818101604052604081101561003357600080fd5b508051602091820151909161005690839062201480906102ee6100bc821b17901c565b60015561007181622014806100bc602090811b6102ee17901c565b600081905560015460408051918252602082019290925281517ff35fa19c15e9ba782633a5df62a98b20217151addc68e3ff2cd623a48d37ec27929181900390910190a150506101ad565b600061010483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061010b60201b60201c565b9392505050565b600081836101975760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561015c578181015183820152602001610144565b50505050905090810190601f1680156101895780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816101a357fe5b0495945050505050565b61051e806101bc6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638726bb891161005b5780638726bb8914610102578063a385fb961461010a578063b816881614610112578063f14039de146101415761007d565b806315f24053146100825780632191f92a146100bd5780636e71e2d8146100d9575b600080fd5b6100ab6004803603606081101561009857600080fd5b5080359060208101359060400135610149565b60408051918252519081900360200190f35b6100c56101a3565b604080519115158252519081900360200190f35b6100ab600480360360608110156100ef57600080fd5b50803590602081013590604001356101a8565b6100ab6101fa565b6100ab610200565b6100ab6004803603608081101561012857600080fd5b5080359060208101359060408101359060600135610207565b6100ab610286565b6000806101578585856101a8565b905061019860015461018c670de0b6b3a76400006101806000548661028c90919063ffffffff16565b9063ffffffff6102ee16565b9063ffffffff61033016565b9150505b9392505050565b600181565b6000826101b75750600061019c565b6101f26101da836101ce878763ffffffff61033016565b9063ffffffff61038a16565b61018085670de0b6b3a764000063ffffffff61028c16565b949350505050565b60005481565b6220148081565b600080610222670de0b6b3a76400008463ffffffff61038a16565b90506000610231878787610149565b90506000610251670de0b6b3a7640000610180848663ffffffff61028c16565b905061027a670de0b6b3a76400006101808361026e8c8c8c6101a8565b9063ffffffff61028c16565b98975050505050505050565b60015481565b60008261029b575060006102e8565b828202828482816102a857fe5b04146102e55760405162461bcd60e51b81526004018080602001828103825260218152602001806104c96021913960400191505060405180910390fd5b90505b92915050565b60006102e583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506103cc565b6000828201838110156102e5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006102e583836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f770081525061046e565b600081836104585760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561041d578181015183820152602001610405565b50505050905090810190601f16801561044a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161046457fe5b0495945050505050565b600081848411156104c05760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561041d578181015183820152602001610405565b50505090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820d7ed282393c691f2f858e79745054ed91c1373b005408a97cc27ec24a020f12d64736f6c63430005110032\"},\"contracts/JumpRateModel.sol:JumpRateModel\":{\"abi\":\"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseRatePerYear\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"multiplierPerYear\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"jumpMultiplierPerYear\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"kink_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseRatePerBlock\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"multiplierPerBlock\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"jumpMultiplierPerBlock\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"kink\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewInterestParams\\\",\\\"type\\\":\\\"event\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"baseRatePerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"blocksPerYear\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"cash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getBorrowRate\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"cash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserves\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserveFactorMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getSupplyRate\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isInterestRateModel\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"jumpMultiplierPerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"kink\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"multiplierPerBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"cash\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"borrows\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reserves\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"utilizationRate\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}]\",\"bin\":\"608060405234801561001057600080fd5b506040516107cb3803806107cb8339818101604052608081101561003357600080fd5b5080516020808301516040840151606090940151929390929091610065908590622014809061039e6100fd821b17901c565b60015561008083622014806100fd602090811b61039e17901c565b60005561009b82622014806100fd602090811b61039e17901c565b60028190556003829055600154600054604080519283526020830191909152818101929092526060810183905290517f6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d9181900360800190a1505050506101ee565b600061014583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061014c60201b60201c565b9392505050565b600081836101d85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561019d578181015183820152602001610185565b50505050905090810190601f1680156101ca5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816101e457fe5b0495945050505050565b6105ce806101fd6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a385fb9611610066578063a385fb9614610120578063b816881614610128578063b9f9850a14610157578063f14039de1461015f578063fd2da3391461016757610093565b806315f24053146100985780632191f92a146100d35780636e71e2d8146100ef5780638726bb8914610118575b600080fd5b6100c1600480360360608110156100ae57600080fd5b508035906020810135906040013561016f565b60408051918252519081900360200190f35b6100db610247565b604080519115158252519081900360200190f35b6100c16004803603606081101561010557600080fd5b508035906020810135906040013561024c565b6100c161029e565b6100c16102a4565b6100c16004803603608081101561013e57600080fd5b50803590602081013590604081013590606001356102ab565b6100c161032a565b6100c1610330565b6100c1610336565b60008061017d85858561024c565b905060035481116101cf576101c76001546101bb670de0b6b3a76400006101af6000548661033c90919063ffffffff16565b9063ffffffff61039e16565b9063ffffffff6103e016565b915050610240565b60006101fa6001546101bb670de0b6b3a76400006101af60005460035461033c90919063ffffffff16565b905060006102136003548461043a90919063ffffffff16565b905061023a826101bb670de0b6b3a76400006101af6002548661033c90919063ffffffff16565b93505050505b9392505050565b600181565b60008261025b57506000610240565b61029661027e83610272878763ffffffff6103e016565b9063ffffffff61043a16565b6101af85670de0b6b3a764000063ffffffff61033c16565b949350505050565b60005481565b6220148081565b6000806102c6670de0b6b3a76400008463ffffffff61043a16565b905060006102d587878761016f565b905060006102f5670de0b6b3a76400006101af848663ffffffff61033c16565b905061031e670de0b6b3a76400006101af836103128c8c8c61024c565b9063ffffffff61033c16565b98975050505050505050565b60025481565b60015481565b60035481565b60008261034b57506000610398565b8282028284828161035857fe5b04146103955760405162461bcd60e51b81526004018080602001828103825260218152602001806105796021913960400191505060405180910390fd5b90505b92915050565b600061039583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061047c565b600082820183811015610395576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061039583836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f770081525061051e565b600081836105085760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156104cd5781810151838201526020016104b5565b50505050905090810190601f1680156104fa5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161051457fe5b0495945050505050565b600081848411156105705760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156104cd5781810151838201526020016104b5565b50505090039056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a72315820375abf5287217b63f170d67dace88d9f89a882f8f7c75446af1dd1c34cb76ce664736f6c63430005110032\"},\"contracts/RewardsDistributorDelegate.sol:RewardsDistributorDelegate\":{\"abi\":\"[{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newSpeed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"CompBorrowSpeedUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"CompGranted\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newSpeed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"CompSupplySpeedUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"contributor\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newSpeed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ContributorCompSpeedUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"compDelta\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"compBorrowIndex\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DistributedBorrowerComp\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"supplier\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"compDelta\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"compSupplyIndex\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"DistributedSupplierComp\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldAdmin\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewAdmin\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldPendingAdmin\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newPendingAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewPendingAdmin\\\",\\\"type\\\":\\\"event\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"_acceptAdmin\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"recipient\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_grantComp\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"compSpeed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setCompBorrowSpeed\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken[]\\\",\\\"name\\\":\\\"cTokens\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"supplySpeeds\\\",\\\"type\\\":\\\"uint256[]\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"borrowSpeeds\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"name\\\":\\\"_setCompSpeeds\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"compSpeed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setCompSupplySpeed\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"contributor\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"compSpeed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"_setContributorCompSpeed\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newPendingAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setPendingAdmin\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"allMarkets\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"holder\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract CToken[]\\\",\\\"name\\\":\\\"cTokens\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"claimRewards\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"holders\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"contract CToken[]\\\",\\\"name\\\":\\\"cTokens\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"borrowers\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"suppliers\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"claimRewards\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"holder\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"claimRewards\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"compAccrued\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"compBorrowSpeeds\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"compBorrowState\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint224\\\",\\\"name\\\":\\\"index\\\",\\\"type\\\":\\\"uint224\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"block\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"compBorrowerIndex\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"compContributorSpeeds\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"compInitialIndex\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint224\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint224\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"compSupplierIndex\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"compSupplySpeeds\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"compSupplyState\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint224\\\",\\\"name\\\":\\\"index\\\",\\\"type\\\":\\\"uint224\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"block\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"borrower\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"flywheelPreBorrowerAction\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"supplier\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"flywheelPreSupplierAction\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"src\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"dst\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"flywheelPreTransferAction\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"getAllMarkets\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract CToken[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"getBlockNumber\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"implementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_rewardToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isRewardsDistributor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"lastContributorBlock\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"pendingAdmin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"rewardToken\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"contributor\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"updateContributorRewards\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}]\"},\"contracts/RewardsDistributorDelegator.sol:RewardsDistributorDelegator\":{\"abi\":\"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"admin_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"rewardToken_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"implementation_\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldImplementation\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newImplementation\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewImplementation\\\",\\\"type\\\":\\\"event\\\"},{\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"fallback\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"implementation_\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"_setImplementation\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"implementation\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"pendingAdmin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\"bin\":\"60806040523480156200001157600080fd5b50604051620008ad380380620008ad833981016040819052620000349162000221565b600080546001600160a01b03191633179055604051620000949082906200006090859060240162000388565b60408051601f198184030181529190526020810180516001600160e01b0390811663189acdbd60e31b17909152620000d016565b620000a8816001600160e01b036200014c16565b5050600080546001600160a01b0319166001600160a01b039290921691909117905562000448565b60006060836001600160a01b031683604051620000ee919062000373565b600060405180830381855af49150503d80600081146200012b576040519150601f19603f3d011682016040523d82523d6000602084013e62000130565b606091505b5091509150600082141562000146573d60208201fd5b50505050565b6000546001600160a01b03163314620001825760405162461bcd60e51b81526004016200017990620003b7565b60405180910390fd5b6001600160a01b038116620001ab5760405162461bcd60e51b81526004016200017990620003c9565b600280546001600160a01b038381166001600160a01b031983161792839055604051918116927fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a9262000202928592169062000398565b60405180910390a15050565b80516200021b816200042e565b92915050565b6000806000606084860312156200023757600080fd5b60006200024586866200020e565b935050602062000258868287016200020e565b92505060406200026b868287016200020e565b9150509250925092565b6200028081620003ed565b82525050565b60006200029382620003db565b6200029f8185620003df565b9350620002b1818560208601620003ff565b9290920192915050565b6000620002ca603b83620003e4565b6000805160206200088d83398151915281527f74496d706c656d656e746174696f6e3a2061646d696e206f6e6c790000000000602082015260400192915050565b60006200031a604f83620003e4565b6000805160206200088d83398151915281527f74496d706c656d656e746174696f6e3a20696e76616c696420696d706c656d6560208201526e6e746174696f6e206164647265737360881b604082015260600192915050565b600062000381828462000286565b9392505050565b602081016200021b828462000275565b60408101620003a8828562000275565b62000381602083018462000275565b602080825281016200021b81620002bb565b602080825281016200021b816200030b565b5190565b919050565b90815260200190565b60006001600160a01b0382166200021b565b60005b838110156200041c57818101518382015260200162000402565b83811115620001465750506000910152565b6200043981620003ed565b81146200044557600080fd5b50565b61043580620004586000396000f3fe60806040526004361061003f5760003560e01c806326782247146100ba5780635c60da1b146100e5578063bb913f41146100fa578063f851a4401461011c575b6002546040516000916001600160a01b03169061005f9083903690610353565b600060405180830381855af49150503d806000811461009a576040519150601f19603f3d011682016040523d82523d6000602084013e61009f565b606091505b505090506040513d6000823e8180156100b6573d82f35b3d82fd5b3480156100c657600080fd5b506100cf610131565b6040516100dc9190610360565b60405180910390f35b3480156100f157600080fd5b506100cf610140565b34801561010657600080fd5b5061011a610115366004610229565b61014f565b005b34801561012857600080fd5b506100cf610209565b6001546001600160a01b031681565b6002546001600160a01b031681565b6000546001600160a01b031633146101825760405162461bcd60e51b815260040161017990610390565b60405180910390fd5b6001600160a01b0381166101a85760405162461bcd60e51b8152600401610179906103a0565b600280546001600160a01b038381166001600160a01b031983161792839055604051918116927fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a926101fd928592169061036e565b60405180910390a15050565b6000546001600160a01b031681565b8035610223816103db565b92915050565b60006020828403121561023b57600080fd5b60006102478484610218565b949350505050565b610258816103be565b82525050565b600061026a83856103b0565b93506102778385846103cf565b50500190565b600061028a603b836103b5565b7f526577617264734469737472696275746f7244656c656761746f723a3a5f736581527f74496d706c656d656e746174696f6e3a2061646d696e206f6e6c790000000000602082015260400192915050565b60006102e9604f836103b5565b7f526577617264734469737472696275746f7244656c656761746f723a3a5f736581527f74496d706c656d656e746174696f6e3a20696e76616c696420696d706c656d6560208201526e6e746174696f6e206164647265737360881b604082015260600192915050565b600061024782848661025e565b60208101610223828461024f565b6040810161037c828561024f565b610389602083018461024f565b9392505050565b602080825281016102238161027d565b60208082528101610223816102dc565b919050565b90815260200190565b60006001600160a01b038216610223565b82818337506000910152565b6103e4816103be565b81146103ef57600080fd5b5056fea365627a7a72315820fbca6ea2be5c0e74ab9e79befb1bb784f0a291ee2fb047afbb24bd43a4a8f3626c6578706572696d656e74616cf564736f6c63430005110040526577617264734469737472696275746f7244656c656761746f723a3a5f7365\"}}}"
  },
  {
    "path": "src/fuse-sdk/src/contracts/open-oracle.json",
    "content": "{\n  \"contracts\": {\n    \"contracts/OpenOracleData.sol:OpenOracleData\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"608060405234801561001057600080fd5b506102bb806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063482a619314610030575b600080fd5b61004361003e3660046101c1565b610059565b6040516100509190610253565b60405180910390f35b600080600080848060200190518101906100739190610184565b925092509250600086805190602001206040516020016100939190610222565b604051602081830303815290604052805190602001209050600181838686604051600081526020016040526040516100ce9493929190610267565b6020604051602081039080840390855afa1580156100f0573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b600082601f830112610116578081fd5b813567ffffffffffffffff8082111561012d578283fd5b604051601f8301601f19168101602001828111828210171561014d578485fd5b60405282815292508284830160200186101561016857600080fd5b8260208601602083013760006020848301015250505092915050565b600080600060608486031215610198578283fd5b8351925060208401519150604084015160ff811681146101b6578182fd5b809150509250925092565b600080604083850312156101d3578182fd5b823567ffffffffffffffff808211156101ea578384fd5b6101f686838701610106565b9350602085013591508082111561020b578283fd5b5061021885828601610106565b9150509250929050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b6001600160a01b0391909116815260200190565b93845260ff929092166020840152604083015260608201526080019056fea26469706673582212202451c0eb9b8ec38c85ea55c1358ad78906a30240333582432856224bbd9cb17b64736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"Compound Labs, Inc.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"source(bytes,bytes)\\\":{\\\"details\\\":\\\"Comparing to a claimed address would add nothing,  as the caller could simply perform the recover and claim that address.\\\",\\\"params\\\":{\\\"message\\\":\\\"The data that was presumably signed\\\",\\\"signature\\\":\\\"The fingerprint of the data + private key\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The source address which signed the message, presumably\\\"}}},\\\"title\\\":\\\"The Open Oracle Data Base Contract\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"source(bytes,bytes)\\\":{\\\"notice\\\":\\\"Recovers the source address which signed a message\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/OpenOracleData.sol\\\":\\\"OpenOracleData\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/OpenOracleData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\npragma experimental ABIEncoderV2;\\\\n\\\\n/**\\\\n * @title The Open Oracle Data Base Contract\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOracleData {\\\\n    /**\\\\n     * @notice The event emitted when a source writes to its storage\\\\n     */\\\\n    //event Write(address indexed source, <Key> indexed key, string kind, uint64 timestamp, <Value> value);\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    //function put(bytes calldata message, bytes calldata signature) external returns (<Key> memory);\\\\n\\\\n    /**\\\\n     * @notice Read a single key with a pre-defined type signature from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the encoded value (defaults to (0, 0x))\\\\n     */\\\\n    //function get(address source, <Key> key) external view returns (uint, <Value>);\\\\n\\\\n    /**\\\\n     * @notice Recovers the source address which signed a message\\\\n     * @dev Comparing to a claimed address would add nothing,\\\\n     *  as the caller could simply perform the recover and claim that address.\\\\n     * @param message The data that was presumably signed\\\\n     * @param signature The fingerprint of the data + private key\\\\n     * @return The source address which signed the message, presumably\\\\n     */\\\\n    function source(bytes memory message, bytes memory signature) public pure returns (address) {\\\\n        (bytes32 r, bytes32 s, uint8 v) = abi.decode(signature, (bytes32, bytes32, uint8));\\\\n        bytes32 hash = keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", keccak256(message)));\\\\n        return ecrecover(hash, v, r, s);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xce1c5e0af5d2642d2b35559b5ca24c1ad0bcf08ffb7dfd92b0f2121b5b3d4faa\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/OpenOraclePriceData.sol:OpenOraclePriceData\": {\n      \"abi\": \"[{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"priorTimestamp\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"messageTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"blockTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NotWritten\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"source\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Write\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"source\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"get\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"source\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"put\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"608060405234801561001057600080fd5b50610bbe806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806338636e9a14610051578063482a61931461018457806376977a3a146102c9578063fc2525ab14610363575b600080fd5b61010f6004803603604081101561006757600080fd5b810190602081018135600160201b81111561008157600080fd5b82018360208201111561009357600080fd5b803590602001918460018302840111600160201b831117156100b457600080fd5b919390929091602081019035600160201b8111156100d157600080fd5b8201836020820111156100e357600080fd5b803590602001918460018302840111600160201b8311171561010457600080fd5b509092509050610410565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610149578181015183820152602001610131565b50505050905090810190601f1680156101765780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ad6004803603604081101561019a57600080fd5b810190602081018135600160201b8111156101b457600080fd5b8201836020820111156101c657600080fd5b803590602001918460018302840111600160201b831117156101e757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561023957600080fd5b82018360208201111561024b57600080fd5b803590602001918460018302840111600160201b8311171561026c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610446945050505050565b604080516001600160a01b039092168252519081900360200190f35b610347600480360360408110156102df57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561030957600080fd5b82018360208201111561031b57600080fd5b803590602001918460018302840111600160201b8311171561033c57600080fd5b509092509050610533565b604080516001600160401b039092168252519081900360200190f35b6103e16004803603604081101561037957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103a357600080fd5b8201836020820111156103b557600080fd5b803590602001918460018302840111600160201b831117156103d657600080fd5b50909250905061058c565b60405180836001600160401b03168152602001826001600160401b031681526020019250505060405180910390f35b606060008060606000610425898989896105fb565b9350935093509350610439848484846108c8565b9998505050505050505050565b60008060008084806020019051606081101561046157600080fd5b5080516020808301516040938401518a518b84012085517f19457468657265756d205369676e6564204d6573736167653a0a33320000000081860152603c8082019290925286518082039092018252605c81018088528251928601929092206000909252607c810180885282905260ff8316609c82015260bc810186905260dc8101849052955194985091965094509260019260fc8083019392601f198301929081900390910190855afa15801561051d573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b6001600160a01b0383166000908152602081905260408082209051849084908083838082843791909101948552505060405192839003602001909220546001600160401b03600160401b90910416925050509392505050565b6000806000806000876001600160a01b03166001600160a01b0316815260200190815260200160002085856040518083838082843791909101948552505060405192839003602001909220546001600160401b038082169650600160401b909104169350505050935093915050565b600080606060008061067689898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a908190840183828082843760009201919091525061044692505050565b905060606000606060008c8c608081101561069057600080fd5b810190602081018135600160201b8111156106aa57600080fd5b8201836020820111156106bc57600080fd5b803590602001918460018302840111600160201b831117156106dd57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160401b03853516959094909350604081019250602001359050600160201b81111561074057600080fd5b82018360208201111561075257600080fd5b803590602001918460018302840111600160201b8311171561077357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516570726963657360d01b60208083019190915282516006818403018152602683019093528251928101929092208a519a9e50989c50939a5093356001600160401b0316985095968b96506046909201945084935050908401908083835b602083106108275780518252601f199092019160209182019101610808565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120146108b4576040805162461bcd60e51b815260206004820152601d60248201527f4b696e64206f662064617461206d757374206265202770726963657327000000604482015290519081900360640190fd5b939c919b5099509197509095505050505050565b6001600160a01b038416600090815260208181526040808320905185516060949387929182918401908083835b602083106109145780518252601f1990920191602091820191016108f5565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922080549093506001600160401b0390811690881611915050801561096e575042610e1001856001600160401b0316105b801561098257506001600160a01b03861615155b15610b32576040518060400160405280866001600160401b03168152602001846001600160401b0316815250600080886001600160a01b03166001600160a01b03168152602001908152602001600020856040518082805190602001908083835b60208310610a025780518252601f1990920191602091820191016109e3565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520865181549784015167ffffffffffffffff199098166001600160401b03918216176fffffffffffffffff00000000000000001916600160401b988216989098029790971790558a861685830152948816948401949094525050606080825286519082015285516001600160a01b038916927f4d3f5aa96531b83f5389343ecd20cd8ac1fba33b64634c1b547a4d85d31540d39288928a92899291829160808301919087019080838360005b83811015610af1578181015183820152602001610ad9565b50505050905090810190601f168015610b1e5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2610b7e565b8054604080516001600160401b03928316815291871660208301524282820152517f7d218dba44a461fb2d7b5fe792128439313d3c48c86d4c3e4981a8eaca831a769181900360600190a15b509194935050505056fea26469706673582212200a9857a039c12a50fa7ff7475813aba2ae946d186bd535a97621faa65cdfb70064736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"priorTimestamp\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"messageTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"blockTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NotWritten\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"source\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Write\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"source\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"get\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"source\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"put\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"Compound Labs, Inc.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"get(address,string)\\\":{\\\"params\\\":{\\\"key\\\":\\\"The selector for the value to return\\\",\\\"source\\\":\\\"The verifiable author of the data\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The claimed Unix timestamp for the data and the price value (defaults to (0, 0))\\\"}},\\\"getPrice(address,string)\\\":{\\\"params\\\":{\\\"key\\\":\\\"The selector for the value to return\\\",\\\"source\\\":\\\"The verifiable author of the data\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The price value (defaults to 0)\\\"}},\\\"put(bytes,bytes)\\\":{\\\"params\\\":{\\\"message\\\":\\\"The payload containing the timestamp, and (key, value) pairs\\\",\\\"signature\\\":\\\"The cryptographic signature of the message payload, authorizing the source to write\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The keys that were written\\\"}},\\\"source(bytes,bytes)\\\":{\\\"details\\\":\\\"Comparing to a claimed address would add nothing,  as the caller could simply perform the recover and claim that address.\\\",\\\"params\\\":{\\\"message\\\":\\\"The data that was presumably signed\\\",\\\"signature\\\":\\\"The fingerprint of the data + private key\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The source address which signed the message, presumably\\\"}}},\\\"stateVariables\\\":{\\\"data\\\":{\\\"details\\\":\\\"The most recent authenticated data from all sources.  This is private because dynamic mapping keys preclude auto-generated getters.\\\"}},\\\"title\\\":\\\"The Open Oracle Price Data Contract\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"NotWritten(uint64,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the timestamp on a price is invalid and it is not written to storage\\\"},\\\"Write(address,string,uint64,uint64)\\\":{\\\"notice\\\":\\\"The event emitted when a source writes to its storage\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"get(address,string)\\\":{\\\"notice\\\":\\\"Read a single key from an authenticated source\\\"},\\\"getPrice(address,string)\\\":{\\\"notice\\\":\\\"Read only the value for a single key from an authenticated source\\\"},\\\"put(bytes,bytes)\\\":{\\\"notice\\\":\\\"Write a bunch of signed datum to the authenticated storage mapping\\\"},\\\"source(bytes,bytes)\\\":{\\\"notice\\\":\\\"Recovers the source address which signed a message\\\"}},\\\"notice\\\":\\\"Values stored in this contract should represent a USD price with 6 decimals precision\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/OpenOraclePriceData.sol\\\":\\\"OpenOraclePriceData\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/OpenOracleData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\npragma experimental ABIEncoderV2;\\\\n\\\\n/**\\\\n * @title The Open Oracle Data Base Contract\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOracleData {\\\\n    /**\\\\n     * @notice The event emitted when a source writes to its storage\\\\n     */\\\\n    //event Write(address indexed source, <Key> indexed key, string kind, uint64 timestamp, <Value> value);\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    //function put(bytes calldata message, bytes calldata signature) external returns (<Key> memory);\\\\n\\\\n    /**\\\\n     * @notice Read a single key with a pre-defined type signature from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the encoded value (defaults to (0, 0x))\\\\n     */\\\\n    //function get(address source, <Key> key) external view returns (uint, <Value>);\\\\n\\\\n    /**\\\\n     * @notice Recovers the source address which signed a message\\\\n     * @dev Comparing to a claimed address would add nothing,\\\\n     *  as the caller could simply perform the recover and claim that address.\\\\n     * @param message The data that was presumably signed\\\\n     * @param signature The fingerprint of the data + private key\\\\n     * @return The source address which signed the message, presumably\\\\n     */\\\\n    function source(bytes memory message, bytes memory signature) public pure returns (address) {\\\\n        (bytes32 r, bytes32 s, uint8 v) = abi.decode(signature, (bytes32, bytes32, uint8));\\\\n        bytes32 hash = keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", keccak256(message)));\\\\n        return ecrecover(hash, v, r, s);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xce1c5e0af5d2642d2b35559b5ca24c1ad0bcf08ffb7dfd92b0f2121b5b3d4faa\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/OpenOraclePriceData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\n\\\\nimport \\\\\\\"./OpenOracleData.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The Open Oracle Price Data Contract\\\\n * @notice Values stored in this contract should represent a USD price with 6 decimals precision\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOraclePriceData is OpenOracleData {\\\\n    ///@notice The event emitted when a source writes to its storage\\\\n    event Write(address indexed source, string key, uint64 timestamp, uint64 value);\\\\n    ///@notice The event emitted when the timestamp on a price is invalid and it is not written to storage\\\\n    event NotWritten(uint64 priorTimestamp, uint256 messageTimestamp, uint256 blockTimestamp);\\\\n\\\\n    ///@notice The fundamental unit of storage for a reporter source\\\\n    struct Datum {\\\\n        uint64 timestamp;\\\\n        uint64 value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The most recent authenticated data from all sources.\\\\n     *  This is private because dynamic mapping keys preclude auto-generated getters.\\\\n     */\\\\n    mapping(address => mapping(string => Datum)) private data;\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    function put(bytes calldata message, bytes calldata signature) external returns (string memory) {\\\\n        (address source, uint64 timestamp, string memory key, uint64 value) = decodeMessage(message, signature);\\\\n        return putInternal(source, timestamp, key, value);\\\\n    }\\\\n\\\\n    function putInternal(address source, uint64 timestamp, string memory key, uint64 value) internal returns (string memory) {\\\\n        // Only update if newer than stored, according to source\\\\n        Datum storage prior = data[source][key];\\\\n        if (timestamp > prior.timestamp && timestamp < block.timestamp + 60 minutes && source != address(0)) {\\\\n            data[source][key] = Datum(timestamp, value);\\\\n            emit Write(source, key, timestamp, value);\\\\n        } else {\\\\n            emit NotWritten(prior.timestamp, timestamp, block.timestamp);\\\\n        }\\\\n        return key;\\\\n    }\\\\n\\\\n    function decodeMessage(bytes calldata message, bytes calldata signature) internal pure returns (address, uint64, string memory, uint64) {\\\\n        // Recover the source address\\\\n        address source = source(message, signature);\\\\n\\\\n        // Decode the message and check the kind\\\\n        (string memory kind, uint64 timestamp, string memory key, uint64 value) = abi.decode(message, (string, uint64, string, uint64));\\\\n        require(keccak256(abi.encodePacked(kind)) == keccak256(abi.encodePacked(\\\\\\\"prices\\\\\\\")), \\\\\\\"Kind of data must be 'prices'\\\\\\\");\\\\n        return (source, timestamp, key, value);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Read a single key from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the price value (defaults to (0, 0))\\\\n     */\\\\n    function get(address source, string calldata key) external view returns (uint64, uint64) {\\\\n        Datum storage datum = data[source][key];\\\\n        return (datum.timestamp, datum.value);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Read only the value for a single key from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The price value (defaults to 0)\\\\n     */\\\\n    function getPrice(address source, string calldata key) external view returns (uint64) {\\\\n        return data[source][key].value;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16fa7df6cfce0bad70407ef8000b09d8468777a3453f30425ea553117abef4c6\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/OpenOracleView.sol:OpenOracleView\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract OpenOracleData\\\",\\\"name\\\":\\\"data_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"sources_\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"priceData\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract OpenOracleData\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"sources\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"608060405234801561001057600080fd5b506040516102c23803806102c28339818101604052604081101561003357600080fd5b81516020830180516040519294929383019291908464010000000082111561005a57600080fd5b90830190602082018581111561006f57600080fd5b825186602082028301116401000000008211171561008c57600080fd5b82525081516020918201928201910280838360005b838110156100b95781810151838201526020016100a1565b50505050905001604052505050600081511161011c576040805162461bcd60e51b815260206004820152601c60248201527f4d75737420696e697469616c697a65207769746820736f757263657300000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038416179055805161014a906001906020840190610152565b5050506101d6565b8280548282559060005260206000209081019282156101a7579160200282015b828111156101a757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610172565b506101b39291506101b7565b5090565b5b808211156101b35780546001600160a01b03191681556001016101b8565b60de806101e46000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c8063a3663d37146037578063e61a5fe414606d575b600080fd5b605160048036036020811015604b57600080fd5b50356073565b604080516001600160a01b039092168252519081900360200190f35b60516099565b60018181548110607f57fe5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03168156fea2646970667358221220661e79eddb81ec4a3c8cda6ea1240ddc3aebc84ded3cc17dcaf65a15f347f9d264736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract OpenOracleData\\\",\\\"name\\\":\\\"data_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"sources_\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"priceData\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract OpenOracleData\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"sources\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"Compound Labs, Inc.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"According to the protocol, Views must be immutable to be considered conforming.\\\",\\\"params\\\":{\\\"data_\\\":\\\"The address of the oracle data contract which is backing the view\\\",\\\"sources_\\\":\\\"The list of source addresses to include in the aggregate value\\\"}}},\\\"stateVariables\\\":{\\\"sources\\\":{\\\"details\\\":\\\"Note that while it is possible to create a view with dynamic sources,  that would not conform to the Open Oracle Standard specification.\\\"}},\\\"title\\\":\\\"The Open Oracle View Base Contract\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"constructor\\\":\\\"Construct a view given the oracle backing address and the list of sources\\\",\\\"priceData()\\\":{\\\"notice\\\":\\\"The Oracle Data Contract backing this View\\\"},\\\"sources(uint256)\\\":{\\\"notice\\\":\\\"The static list of sources used by this View\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/OpenOracleView.sol\\\":\\\"OpenOracleView\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/OpenOracleData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\npragma experimental ABIEncoderV2;\\\\n\\\\n/**\\\\n * @title The Open Oracle Data Base Contract\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOracleData {\\\\n    /**\\\\n     * @notice The event emitted when a source writes to its storage\\\\n     */\\\\n    //event Write(address indexed source, <Key> indexed key, string kind, uint64 timestamp, <Value> value);\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    //function put(bytes calldata message, bytes calldata signature) external returns (<Key> memory);\\\\n\\\\n    /**\\\\n     * @notice Read a single key with a pre-defined type signature from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the encoded value (defaults to (0, 0x))\\\\n     */\\\\n    //function get(address source, <Key> key) external view returns (uint, <Value>);\\\\n\\\\n    /**\\\\n     * @notice Recovers the source address which signed a message\\\\n     * @dev Comparing to a claimed address would add nothing,\\\\n     *  as the caller could simply perform the recover and claim that address.\\\\n     * @param message The data that was presumably signed\\\\n     * @param signature The fingerprint of the data + private key\\\\n     * @return The source address which signed the message, presumably\\\\n     */\\\\n    function source(bytes memory message, bytes memory signature) public pure returns (address) {\\\\n        (bytes32 r, bytes32 s, uint8 v) = abi.decode(signature, (bytes32, bytes32, uint8));\\\\n        bytes32 hash = keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", keccak256(message)));\\\\n        return ecrecover(hash, v, r, s);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xce1c5e0af5d2642d2b35559b5ca24c1ad0bcf08ffb7dfd92b0f2121b5b3d4faa\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/OpenOracleView.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\n\\\\nimport \\\\\\\"./OpenOracleData.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The Open Oracle View Base Contract\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOracleView {\\\\n    /**\\\\n     * @notice The Oracle Data Contract backing this View\\\\n     */\\\\n    OpenOracleData public priceData;\\\\n\\\\n    /**\\\\n     * @notice The static list of sources used by this View\\\\n     * @dev Note that while it is possible to create a view with dynamic sources,\\\\n     *  that would not conform to the Open Oracle Standard specification.\\\\n     */\\\\n    address[] public sources;\\\\n\\\\n    /**\\\\n     * @notice Construct a view given the oracle backing address and the list of sources\\\\n     * @dev According to the protocol, Views must be immutable to be considered conforming.\\\\n     * @param data_ The address of the oracle data contract which is backing the view\\\\n     * @param sources_ The list of source addresses to include in the aggregate value\\\\n     */\\\\n    constructor(OpenOracleData data_, address[] memory sources_) public {\\\\n        require(sources_.length > 0, \\\\\\\"Must initialize with sources\\\\\\\");\\\\n        priceData = data_;\\\\n        sources = sources_;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x1029fda7ff1c2753d86a476156bf0ad1c7fa1a89f6e61f2798adbff7fdcb2680\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/ReporterView.sol:ReporterView\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"priceData_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter_\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"existingPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceGuarded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ReporterInvalidated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_REPORTER_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbol\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbolHash\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"invalidateReporter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"messages\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"symbols\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"priceData\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"priceTimestamps\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporterInvalidated\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"60c06040523480156200001157600080fd5b50604051620025d0380380620025d08339810160408190526200003491620004cc565b60038054336001600160a01b03199091161760ff60a01b1916600160a01b8415150217905560048190558282826200006c836200009f565b5050506001600160601b0319606086811b821660805285901b1660a052620000948362000377565b5050505050620006df565b60005b81518110156200037357600354600160a01b900460ff16620001725760026000838381518110620000cf57fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615620001205760405162461bcd60e51b8152600401620001179062000653565b60405180910390fd5b600960008383815181106200013157fe5b60209081029190910181015181015182528101919091526040016000205460ff1615620001725760405162461bcd60e51b8152600401620001179062000613565b60008282815181106200018157fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115620001fb57fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106200026d57fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160026000848481518110620002b057fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008054905003600860008484815181106200030d57fe5b6020026020010151602001518152602001908152602001600020819055506001600960008484815181106200033e57fe5b6020908102919091018101518101518252810191909152604001600020805460ff1916911515919091179055600101620000a2565b5050565b60005b815181101562000373576200038e620003d6565b8282815181106200039b57fe5b602002602001015190506000816040015111620003cc5760405162461bcd60e51b81526004016200011790620005d1565b506001016200037a565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b80516200042081620006c6565b92915050565b805180151581146200042057600080fd5b600060e0828403121562000449578081fd5b6200045560e06200069f565b905081516200046481620006c6565b8082525060208201516020820152604082015160408201526060820151600581106200048f57600080fd5b606082015260808281015190820152620004ad8360a0840162000413565b60a0820152620004c18360c0840162000426565b60c082015292915050565b600080600080600060a08688031215620004e4578081fd5b8551620004f181620006c6565b809550506020808701516200050681620006c6565b60408801519095506001600160401b038082111562000523578384fd5b818901915089601f83011262000537578384fd5b81518181111562000546578485fd5b6200055584858302016200069f565b818152848101925083850160e0808402860187018e101562000575578788fd5b8795505b83861015620005a5576200058e8e8362000437565b855260019590950194938601939081019062000579565b50508097505050505050620005be876060880162000426565b9150608086015190509295509295909350565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b6020808252603190820152600080516020620025b08339815191526040820152703a3434b99039bcb6b137b6103430b9b41760791b606082015260800190565b6020808252603e90820152600080516020620025b083398151915260408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b6040518181016001600160401b0381118282101715620006be57600080fd5b604052919050565b6001600160a01b0381168114620006dc57600080fd5b50565b60805160601c60a05160601c611e8e62000722600039806102f0528061064e52806106de5280610fb152508061077d52806107cb5280610f825250611e8e6000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80638a003888116100c3578063e073a2411161007c578063e073a2411461029d578063e61a5fe4146102a5578063ecc1e984146102ad578063f851a440146102c0578063fc57d4df146102c8578063fe2c6198146102db57610158565b80638a003888146102495780638aba91b41461025c5780638e499bcf1461026f5780638f283970146102775780639f5996311461028a578063d1b353b41461024157610158565b80634da21942116101155780634da21942146101f657806360846bc61461020957806363a9acc91461021c578063651ed78814610231578063656b0fd11461023957806369aa3ac61461024157610158565b8063010ec4411461015d5780631a1252041461017b57806322ddeb7d1461019b578063276c2cba146101bb5780632d1c668f146101ce578063482a6193146101e3575b600080fd5b6101656102ee565b6040516101729190611924565b60405180910390f35b61018e6101893660046116b8565b610312565b6040516101729190611cee565b6101ae6101a93660046116b8565b610367565b6040516101729190611d56565b61018e6101c936600461176e565b610379565b6101e16101dc3660046115ec565b6103b6565b005b6101656101f136600461170d565b6103f5565b61018e61020436600461151e565b6104a2565b6101ae6102173660046116b8565b6104b5565b6102246104c7565b604051610172919061195c565b6102246104cc565b6102246104d5565b6101ae6104e5565b61018e6102573660046116b8565b6104f1565b6101e161026a36600461170d565b6105ca565b6101ae610710565b6101e161028536600461151e565b610716565b61018e61029836600461151e565b610762565b6101ae610775565b61016561077b565b6101e16102bb366004611556565b61079f565b610165610989565b6101ae6102d636600461151e565b610998565b6101ae6102e936600461176e565b610a60565b7f000000000000000000000000000000000000000000000000000000000000000081565b61031a61133f565b600061032583610a85565b9050600019811461034157610339816104f1565b915050610362565b60405162461bcd60e51b815260040161035990611af4565b60405180910390fd5b919050565b60066020526000908152604090205481565b61038161133f565b6103b08260405160200161039591906118b6565b60405160208183030381529060405280519060200120610312565b92915050565b6003546001600160a01b031633146103e05760405162461bcd60e51b815260040161035990611b24565b6103e981610ad2565b6103f281610d90565b50565b6000806000808480602001905181019061040f91906116d0565b9250925092506000868051906020012060405160200161042f91906118d2565b6040516020818303038152906040528051906020012090506001818386866040516000815260200160405260405161046a9493929190611967565b6020604051602081039080840390855afa15801561048c573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b6104aa61133f565b600061032583610de7565b60056020526000908152604090205481565b600181565b60075460ff1681565b600354600160a01b900460ff1681565b670de0b6b3a764000081565b6104f961133f565b610501610710565b821061051f5760405162461bcd60e51b815260040161035990611af4565b6000828154811061052c57fe5b60009182526020918290206040805160e081018252600690930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154909190606083019060ff16600481111561058657fe5b600481111561059157fe5b8152600482015460208201526005909101546001600160a01b0381166040830152600160a01b900460ff16151560609091015292915050565b6060828060200190518101906105e091906117dc565b5090506040516020016105f290611903565b604051602081830303815290604052805190602001208160405160200161061991906118b6565b604051602081830303815290604052805190602001201461064c5760405162461bcd60e51b815260040161035990611c3f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661068084846103f5565b6001600160a01b0316146106a65760405162461bcd60e51b815260040161035990611b5b565b6007805460ff191660011790556040517f98a13f7b181a3a1f99c871e7a3507d4a037d386d157279f978e0d555ae9fe74d90610703907f000000000000000000000000000000000000000000000000000000000000000090611924565b60405180910390a1505050565b60005490565b6003546001600160a01b031633146107405760405162461bcd60e51b815260040161035990611b24565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61076a61133f565b600061032583610e2b565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b8483146107be5760405162461bcd60e51b815260040161035990611cab565b60005b858110156108b2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338636e9a88888481811061080457fe5b90506020028101906108169190611d5f565b88888681811061082257fe5b90506020028101906108349190611d5f565b6040518563ffffffff1660e01b81526004016108539493929190611985565b600060405180830381600087803b15801561086d57600080fd5b505af1158015610881573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108a991908101906117a9565b506001016107c1565b5060005b81811015610980576109788383838181106108cd57fe5b90506020028101906108df9190611da4565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061097192508791508690508581811061092557fe5b90506020028101906109379190611da4565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061037992505050565b6001610f23565b6001016108b6565b50505050505050565b6003546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109d357600080fd5b505afa1580156109e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0b919061169c565b15610a1f5750670de0b6b3a7640000610362565b610a2761133f565b610a3083610762565b90508060400151610a51670de0b6b3a7640000610a4c84611128565b611305565b81610a5857fe5b049392505050565b6000610a6a61133f565b610a7383610379565b9050610a7e81611128565b9392505050565b6000805b600054811015610ac85760008181548110610aa057fe5b906000526020600020906006020160010154831415610ac0579050610362565b600101610a89565b5060001992915050565b60005b8151811015610d8c57600354600160a01b900460ff16610b925760026000838381518110610aff57fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615610b445760405162461bcd60e51b815260040161035990611bab565b60096000838381518110610b5457fe5b60209081029190910181015181015182528101919091526040016000205460ff1615610b925760405162461bcd60e51b815260040161035990611a1b565b6000828281518110610ba057fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115610c1957fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b031990941693909317919091169190911790556000805483516000199190910191600191859085908110610c8a57fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160026000848481518110610ccc57fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060016000805490500360086000848481518110610d2857fe5b602002602001015160200151815260200190815260200160002081905550600160096000848481518110610d5857fe5b6020908102919091018101518101518252810191909152604001600020805460ff1916911515919091179055600101610ad5565b5050565b60005b8151811015610d8c57610da461133f565b828281518110610db057fe5b602002602001015190506000816040015111610dde5760405162461bcd60e51b8152600401610359906119d9565b50600101610d93565b6001600160a01b03811660009081526002602052604081205460ff16610e0f576000196103b0565b506001600160a01b031660009081526001602052604090205490565b60006103b0826001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6957600080fd5b505afa158015610e7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea1919061169c565b610f1b57826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610ede57600080fd5b505afa158015610ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f16919061153a565b610f1e565b60005b610de7565b600282606001516004811115610f3557fe5b14610f525760405162461bcd60e51b815260040161035990611c08565b600083604051602001610f6591906118b6565b6040516020818303038152906040528051906020012090506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc2525ab7f0000000000000000000000000000000000000000000000000000000000000000886040518363ffffffff1660e01b8152600401610fee929190611938565b604080518083038186803b15801561100557600080fd5b505afa158015611019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103d919061182c565b60075467ffffffffffffffff92831694509116915060ff16156110a857600083815260056020526040908190205490517f27d52709c47286ff00de1178261d21424453b7d6c881850b02ee009d9b07ca639161109b918991906119b7565b60405180910390a1611120565b600083815260056020526040902054811415806110c25750835b15611120576000838152600560209081526040808320849055600690915290819020839055517f159e83f4712ba2552e68be9d848e49bf6dd35c24f19564ffd523b6549450a2f49061111790889084906119b7565b60405180910390a15b505050505050565b600060405160200161113990611915565b60405160208183030381529060405280519060200120826020015114156111695750670de0b6b3a7640000610362565b60028260600151600481111561117b57fe5b14156112575760006005600060405160200161119690611915565b604051602081830303815290604052805190602001208152602001908152602001600020549050600081116111dd5760405162461bcd60e51b815260040161035990611a6c565b6004541561121d576004546020808501516000908152600690915260409020540142111561121d5760405162461bcd60e51b815260040161035990611c74565b80611247600560008660200151815260200190815260200160002054670de0b6b3a7640000611305565b8161124e57fe5b04915050610362565b60018260600151600481111561126957fe5b14156112e25760006005600060405160200161128490611915565b604051602081830303815290604052805190602001208152602001908152602001600020549050600081116112cb5760405162461bcd60e51b815260040161035990611a6c565b806112478460800151670de0b6b3a7640000611305565b6000826060015160048111156112f457fe5b141561036257506080810151610362565b600082611314575060006103b0565b8282028284828161132157fe5b0414610a7e5760405162461bcd60e51b815260040161035990611abd565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b80356103b081611e35565b60008083601f840112611398578182fd5b50813567ffffffffffffffff8111156113af578182fd5b60208301915083602080830285010111156113c957600080fd5b9250929050565b80356103b081611e4a565b600082601f8301126113eb578081fd5b81356113fe6113f982611de1565b611dba565b915080825283602082850101111561141557600080fd5b8060208401602084013760009082016020015292915050565b600082601f83011261143e578081fd5b815161144c6113f982611de1565b915080825283602082850101111561146357600080fd5b611474816020840160208601611e05565b5092915050565b600060e0828403121561148c578081fd5b61149660e0611dba565b905081356114a381611e35565b8082525060208201356020820152604082013560408201526060820135600581106114cd57600080fd5b6060820152608082810135908201526114e98360a0840161137c565b60a08201526114fb8360c084016113d0565b60c082015292915050565b805167ffffffffffffffff811681146103b057600080fd5b60006020828403121561152f578081fd5b8135610a7e81611e35565b60006020828403121561154b578081fd5b8151610a7e81611e35565b6000806000806000806060878903121561156e578182fd5b863567ffffffffffffffff80821115611585578384fd5b6115918a838b01611387565b909850965060208901359150808211156115a9578384fd5b6115b58a838b01611387565b909650945060408901359150808211156115cd578384fd5b506115da89828a01611387565b979a9699509497509295939492505050565b600060208083850312156115fe578182fd5b823567ffffffffffffffff80821115611615578384fd5b818501915085601f830112611628578384fd5b813581811115611636578485fd5b6116438485830201611dba565b818152848101925083850160e0808402860187018a1015611662578788fd5b8795505b8386101561168e576116788a8361147b565b8552600195909501949386019390810190611666565b509098975050505050505050565b6000602082840312156116ad578081fd5b8151610a7e81611e4a565b6000602082840312156116c9578081fd5b5035919050565b6000806000606084860312156116e4578283fd5b8351925060208401519150604084015160ff81168114611702578182fd5b809150509250925092565b6000806040838503121561171f578182fd5b823567ffffffffffffffff80821115611736578384fd5b611742868387016113db565b93506020850135915080821115611757578283fd5b50611764858286016113db565b9150509250929050565b60006020828403121561177f578081fd5b813567ffffffffffffffff811115611795578182fd5b6117a1848285016113db565b949350505050565b6000602082840312156117ba578081fd5b815167ffffffffffffffff8111156117d0578182fd5b6117a18482850161142e565b600080604083850312156117ee578182fd5b825167ffffffffffffffff811115611804578283fd5b6118108582860161142e565b925050602083015161182181611e35565b809150509250929050565b6000806040838503121561183e578182fd5b6118488484611506565b91506118578460208501611506565b90509250929050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526118a2816020860160208601611e05565b601f01601f19169290920160200192915050565b600082516118c8818460208701611e05565b9190910192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b65726f7461746560d01b815260060190565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b6001600160a01b03831681526040602082018190526000906117a19083018461188a565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b600060408252611999604083018688611860565b82810360208401526119ac818587611860565b979650505050505050565b6000604082526119ca604083018561188a565b90508260208301529392505050565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526031908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f72206040820152703a3434b99039bcb6b137b6103430b9b41760791b606082015260800190565b60208082526031908201527f455448207072696365206e6f74207365742c2063616e6e6f7420636f6e7665726040820152700e840cce4deda40aaa68840e8de408aa89607b1b606082015260800190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526017908201527f6d73672e73656e646572206973206e6f742061646d696e000000000000000000604082015260600190565b60208082526030908201527f696e76616c69646174696f6e206d657373616765206d75737420636f6d65206660408201526f3937b6903a3432903932b837b93a32b960811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b6020808252601f908201527f6f6e6c79207265706f72746572207072696365732067657420706f7374656400604082015260600190565b6020808252818101527f696e76616c6964206d657373616765206d7573742062652027726f7461746527604082015260600190565b60208082526018908201527f5265706f72746572207072696365206973207374616c652e0000000000000000604082015260600190565b60208082526023908201527f6d6573736167657320616e64207369676e617475726573206d75737420626520604082015262313a3160e81b606082015260800190565b81516001600160a01b0390811682526020808401519083015260408084015190830152606083015160e08301919060058110611d2657fe5b80606085015250608084015160808401528060a08501511660a08401525060c0830151151560c083015292915050565b90815260200190565b6000808335601e19843603018112611d75578283fd5b83018035915067ffffffffffffffff821115611d8f578283fd5b6020019150368190038213156113c957600080fd5b6000808335601e19843603018112611d75578182fd5b60405181810167ffffffffffffffff81118282101715611dd957600080fd5b604052919050565b600067ffffffffffffffff821115611df7578081fd5b50601f01601f191660200190565b60005b83811015611e20578181015183820152602001611e08565b83811115611e2f576000848401525b50505050565b6001600160a01b03811681146103f257600080fd5b80151581146103f257600080fdfea26469706673582212205c1d48489fb8da3b5a3e84afa31603c33538510d7f7e3cef7c003fa8a2de1be064736f6c634300060c0033546f6b656e20636f6e66696720616c72656164792065786973747320666f7220\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"priceData_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter_\\\",\\\"type\\\":\\\"address\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"existingPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceGuarded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ReporterInvalidated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_REPORTER_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbol\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbolHash\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"invalidateReporter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"messages\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"symbols\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"priceData\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"priceTimestamps\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporterInvalidated\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"params\\\":{\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\"}},\\\"constructor\\\":{\\\"params\\\":{\\\"_canAdminOverwrite\\\":\\\"Whether or not existing token configs can be overwritten\\\",\\\"_maxSecondsBeforePriceIsStale\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\",\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\",\\\"priceData_\\\":\\\"The OpenOraclePriceData contract to use\\\",\\\"reporter_\\\":\\\"The reporter whose prices are to be used\\\"}},\\\"getTokenConfig(uint256)\\\":{\\\"params\\\":{\\\"i\\\":\\\"The index of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByCToken(address)\\\":{\\\"params\\\":{\\\"cToken\\\":\\\"The address of the cToken of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigBySymbol(string)\\\":{\\\"params\\\":{\\\"symbol\\\":\\\"The symbol of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigBySymbolHash(bytes32)\\\":{\\\"params\\\":{\\\"symbolHash\\\":\\\"The keccack256 of the symbol of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The address of the underlying asset of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the PriceOracle interface for Compound v2.\\\",\\\"params\\\":{\\\"cToken\\\":\\\"The cToken address for price retrieval\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals, for the given cToken address\\\"}},\\\"invalidateReporter(bytes,bytes)\\\":{\\\"details\\\":\\\"Only the reporter may sign a message which allows it to invalidate itself.  To be used in cases of emergency, if the reporter thinks their key may be compromised.\\\",\\\"params\\\":{\\\"message\\\":\\\"The data that was presumably signed\\\",\\\"signature\\\":\\\"The fingerprint of the data + private key\\\"}},\\\"postPrices(bytes[],bytes[],string[])\\\":{\\\"details\\\":\\\"We let anyone pay to post anything, but only prices from configured reporter will be stored in the view.\\\",\\\"params\\\":{\\\"messages\\\":\\\"The messages to post to the oracle\\\",\\\"signatures\\\":\\\"The signatures for the corresponding messages\\\",\\\"symbols\\\":\\\"The symbols to compare to anchor for authoritative reading\\\"}},\\\"price(string)\\\":{\\\"params\\\":{\\\"symbol\\\":\\\"The symbol to fetch the price of\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals\\\"}},\\\"source(bytes,bytes)\\\":{\\\"details\\\":\\\"Comparing to a claimed address would add nothing,  as the caller could simply perform the recover and claim that address.\\\",\\\"params\\\":{\\\"message\\\":\\\"The data that was presumably signed\\\",\\\"signature\\\":\\\"The fingerprint of the data + private key\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The source address which signed the message, presumably\\\"}}},\\\"stateVariables\\\":{\\\"_configIndexesBySymbolHash\\\":{\\\"details\\\":\\\"Maps symbol hashes to token config indexes\\\"},\\\"_configPresenceBySymbolHash\\\":{\\\"details\\\":\\\"Maps symbol hashes to booleans indicating if they have token configs\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"PriceGuarded(string,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when new prices are posted but the stored price is not updated due to the reporter being invalidated\\\"},\\\"PriceUpdated(string,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the stored price is updated\\\"},\\\"ReporterInvalidated(address)\\\":{\\\"notice\\\":\\\"The event emitted when reporter invalidates itself\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"notice\\\":\\\"Add new asset(s)\\\"},\\\"admin()\\\":{\\\"notice\\\":\\\"Admin address\\\"},\\\"canAdminOverwrite()\\\":{\\\"notice\\\":\\\"Whether or not existing token configs can be overwritten\\\"},\\\"changeAdmin(address)\\\":{\\\"notice\\\":\\\"Changes the admin\\\"},\\\"constructor\\\":\\\"Construct a uniswap anchored view for a set of token configurations\\\",\\\"ethBaseUnit()\\\":{\\\"notice\\\":\\\"The number of wei in 1 ETH\\\"},\\\"expScale()\\\":{\\\"notice\\\":\\\"A common scaling factor to maintain precision\\\"},\\\"getTokenConfig(uint256)\\\":{\\\"notice\\\":\\\"Get the i-th config, according to the order they were passed in originally\\\"},\\\"getTokenConfigByCToken(address)\\\":{\\\"notice\\\":\\\"Get the config for the cToken\\\"},\\\"getTokenConfigBySymbol(string)\\\":{\\\"notice\\\":\\\"Get the config for symbol\\\"},\\\"getTokenConfigBySymbolHash(bytes32)\\\":{\\\"notice\\\":\\\"Get the config for the symbolHash\\\"},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"notice\\\":\\\"Get the config for an underlying asset\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Get the underlying price of a cToken\\\"},\\\"invalidateReporter(bytes,bytes)\\\":{\\\"notice\\\":\\\"Invalidate the reporter, and fall back to using anchor directly in all cases\\\"},\\\"maxSecondsBeforePriceIsStale()\\\":{\\\"notice\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\"},\\\"numTokens()\\\":{\\\"notice\\\":\\\"The number of tokens this contract actually supports\\\"},\\\"postPrices(bytes[],bytes[],string[])\\\":{\\\"notice\\\":\\\"Post open oracle reporter prices, and recalculate stored price by comparing to anchor\\\"},\\\"price(string)\\\":{\\\"notice\\\":\\\"Get the official price for a symbol\\\"},\\\"priceData()\\\":{\\\"notice\\\":\\\"The Open Oracle Price Data contract\\\"},\\\"priceTimestamps(bytes32)\\\":{\\\"notice\\\":\\\"Official price timestamps by symbol hash\\\"},\\\"prices(bytes32)\\\":{\\\"notice\\\":\\\"Official prices by symbol hash\\\"},\\\"reporter()\\\":{\\\"notice\\\":\\\"The Open Oracle Reporter\\\"},\\\"reporterInvalidated()\\\":{\\\"notice\\\":\\\"Circuit breaker for using anchor price oracle directly, ignoring reporter\\\"},\\\"source(bytes,bytes)\\\":{\\\"notice\\\":\\\"Recovers the source address which signed a message\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/ReporterView.sol\\\":\\\"ReporterView\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/OpenOracleData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\npragma experimental ABIEncoderV2;\\\\n\\\\n/**\\\\n * @title The Open Oracle Data Base Contract\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOracleData {\\\\n    /**\\\\n     * @notice The event emitted when a source writes to its storage\\\\n     */\\\\n    //event Write(address indexed source, <Key> indexed key, string kind, uint64 timestamp, <Value> value);\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    //function put(bytes calldata message, bytes calldata signature) external returns (<Key> memory);\\\\n\\\\n    /**\\\\n     * @notice Read a single key with a pre-defined type signature from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the encoded value (defaults to (0, 0x))\\\\n     */\\\\n    //function get(address source, <Key> key) external view returns (uint, <Value>);\\\\n\\\\n    /**\\\\n     * @notice Recovers the source address which signed a message\\\\n     * @dev Comparing to a claimed address would add nothing,\\\\n     *  as the caller could simply perform the recover and claim that address.\\\\n     * @param message The data that was presumably signed\\\\n     * @param signature The fingerprint of the data + private key\\\\n     * @return The source address which signed the message, presumably\\\\n     */\\\\n    function source(bytes memory message, bytes memory signature) public pure returns (address) {\\\\n        (bytes32 r, bytes32 s, uint8 v) = abi.decode(signature, (bytes32, bytes32, uint8));\\\\n        bytes32 hash = keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", keccak256(message)));\\\\n        return ecrecover(hash, v, r, s);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xce1c5e0af5d2642d2b35559b5ca24c1ad0bcf08ffb7dfd92b0f2121b5b3d4faa\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/OpenOraclePriceData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\n\\\\nimport \\\\\\\"./OpenOracleData.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The Open Oracle Price Data Contract\\\\n * @notice Values stored in this contract should represent a USD price with 6 decimals precision\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOraclePriceData is OpenOracleData {\\\\n    ///@notice The event emitted when a source writes to its storage\\\\n    event Write(address indexed source, string key, uint64 timestamp, uint64 value);\\\\n    ///@notice The event emitted when the timestamp on a price is invalid and it is not written to storage\\\\n    event NotWritten(uint64 priorTimestamp, uint256 messageTimestamp, uint256 blockTimestamp);\\\\n\\\\n    ///@notice The fundamental unit of storage for a reporter source\\\\n    struct Datum {\\\\n        uint64 timestamp;\\\\n        uint64 value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The most recent authenticated data from all sources.\\\\n     *  This is private because dynamic mapping keys preclude auto-generated getters.\\\\n     */\\\\n    mapping(address => mapping(string => Datum)) private data;\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    function put(bytes calldata message, bytes calldata signature) external returns (string memory) {\\\\n        (address source, uint64 timestamp, string memory key, uint64 value) = decodeMessage(message, signature);\\\\n        return putInternal(source, timestamp, key, value);\\\\n    }\\\\n\\\\n    function putInternal(address source, uint64 timestamp, string memory key, uint64 value) internal returns (string memory) {\\\\n        // Only update if newer than stored, according to source\\\\n        Datum storage prior = data[source][key];\\\\n        if (timestamp > prior.timestamp && timestamp < block.timestamp + 60 minutes && source != address(0)) {\\\\n            data[source][key] = Datum(timestamp, value);\\\\n            emit Write(source, key, timestamp, value);\\\\n        } else {\\\\n            emit NotWritten(prior.timestamp, timestamp, block.timestamp);\\\\n        }\\\\n        return key;\\\\n    }\\\\n\\\\n    function decodeMessage(bytes calldata message, bytes calldata signature) internal pure returns (address, uint64, string memory, uint64) {\\\\n        // Recover the source address\\\\n        address source = source(message, signature);\\\\n\\\\n        // Decode the message and check the kind\\\\n        (string memory kind, uint64 timestamp, string memory key, uint64 value) = abi.decode(message, (string, uint64, string, uint64));\\\\n        require(keccak256(abi.encodePacked(kind)) == keccak256(abi.encodePacked(\\\\\\\"prices\\\\\\\")), \\\\\\\"Kind of data must be 'prices'\\\\\\\");\\\\n        return (source, timestamp, key, value);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Read a single key from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the price value (defaults to (0, 0))\\\\n     */\\\\n    function get(address source, string calldata key) external view returns (uint64, uint64) {\\\\n        Datum storage datum = data[source][key];\\\\n        return (datum.timestamp, datum.value);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Read only the value for a single key from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The price value (defaults to 0)\\\\n     */\\\\n    function getPrice(address source, string calldata key) external view returns (uint64) {\\\\n        return data[source][key].value;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16fa7df6cfce0bad70407ef8000b09d8468777a3453f30425ea553117abef4c6\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/ReporterView.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\npragma experimental ABIEncoderV2;\\\\n\\\\nimport \\\\\\\"./OpenOraclePriceData.sol\\\\\\\";\\\\nimport \\\\\\\"./Uniswap/UniswapConfig.sol\\\\\\\";\\\\n\\\\ncontract ReporterView is UniswapConfig {    \\\\n    bool public constant IS_REPORTER_VIEW = true;\\\\n\\\\n    /// @notice The Open Oracle Price Data contract\\\\n    OpenOraclePriceData public immutable priceData;\\\\n\\\\n    /// @notice The number of wei in 1 ETH\\\\n    uint public constant ethBaseUnit = 1e18;\\\\n\\\\n    /// @notice A common scaling factor to maintain precision\\\\n    uint public constant expScale = 1e18;\\\\n\\\\n    /// @notice The Open Oracle Reporter\\\\n    address public immutable reporter;\\\\n\\\\n    /// @notice Official prices by symbol hash\\\\n    mapping(bytes32 => uint) public prices;\\\\n\\\\n    /// @notice Official price timestamps by symbol hash\\\\n    mapping(bytes32 => uint) public priceTimestamps;\\\\n\\\\n    /// @notice Circuit breaker for using anchor price oracle directly, ignoring reporter\\\\n    bool public reporterInvalidated;\\\\n\\\\n    /// @notice The event emitted when new prices are posted but the stored price is not updated due to the reporter being invalidated\\\\n    event PriceGuarded(string symbol, uint existingPrice);\\\\n\\\\n    /// @notice The event emitted when the stored price is updated\\\\n    event PriceUpdated(string symbol, uint newPrice);\\\\n\\\\n    /// @notice The event emitted when reporter invalidates itself\\\\n    event ReporterInvalidated(address reporter);\\\\n\\\\n    bytes32 constant ethHash = keccak256(abi.encodePacked(\\\\\\\"ETH\\\\\\\"));\\\\n    bytes32 constant rotateHash = keccak256(abi.encodePacked(\\\\\\\"rotate\\\\\\\"));\\\\n\\\\n    /// @dev Maps symbol hashes to token config indexes\\\\n    mapping(bytes32 => uint256) internal _configIndexesBySymbolHash;\\\\n\\\\n    /// @dev Maps symbol hashes to booleans indicating if they have token configs\\\\n    mapping(bytes32 => bool) internal _configPresenceBySymbolHash;\\\\n\\\\n    /**\\\\n     * @notice Construct a uniswap anchored view for a set of token configurations\\\\n     * @param priceData_ The OpenOraclePriceData contract to use\\\\n     * @param reporter_ The reporter whose prices are to be used\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\n     */\\\\n    constructor(OpenOraclePriceData priceData_,\\\\n                address reporter_,\\\\n                TokenConfig[] memory configs,\\\\n                bool _canAdminOverwrite,\\\\n                uint256 _maxSecondsBeforePriceIsStale) UniswapConfig(configs, _canAdminOverwrite, _maxSecondsBeforePriceIsStale) public {\\\\n        // Initialize variables\\\\n        priceData = priceData_;\\\\n        reporter = reporter_;\\\\n\\\\n        // Initialize token configs\\\\n        initConfigs(configs);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Initialize token configs\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\n     */\\\\n    function initConfigs(TokenConfig[] memory configs) internal pure {\\\\n        for (uint i = 0; i < configs.length; i++) {\\\\n            TokenConfig memory config = configs[i];\\\\n            require(config.baseUnit > 0, \\\\\\\"baseUnit must be greater than zero\\\\\\\");\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Internal function to add new asset(s)\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\n     */\\\\n    function _add(TokenConfig[] memory configs) internal override {\\\\n        // For each config\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\n            // If !canAdminOverwrite, check for existing configs\\\\n            if (!canAdminOverwrite) {\\\\n                require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\n                require(!_configPresenceBySymbolHash[configs[i].symbolHash], \\\\\\\"Token config already exists for this symbol hash.\\\\\\\");\\\\n            }\\\\n\\\\n            // Add config to state\\\\n            _configs.push(configs[i]);\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\n            _configIndexesBySymbolHash[configs[i].symbolHash] = _configs.length - 1;\\\\n            _configPresenceBySymbolHash[configs[i].symbolHash] = true;\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Add new asset(s)\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\n     */\\\\n    function add(TokenConfig[] memory configs) external {\\\\n        // Check msg.sender == admin\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\n\\\\n        // Add and init token configs\\\\n        _add(configs);\\\\n        initConfigs(configs);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Get the official price for a symbol\\\\n     * @param symbol The symbol to fetch the price of\\\\n     * @return Price denominated in ETH, with 18 decimals\\\\n     */\\\\n    function price(string memory symbol) external view returns (uint) {\\\\n        TokenConfig memory config = getTokenConfigBySymbol(symbol);\\\\n        return priceInternal(config);\\\\n    }\\\\n\\\\n    function priceInternal(TokenConfig memory config) internal view returns (uint) {\\\\n        if (config.symbolHash == ethHash) return ethBaseUnit;\\\\n        if (config.priceSource == PriceSource.REPORTER) {\\\\n            // Prices are stored in terms of USD so we use the ETH/USD price to convert to ETH\\\\n            // if (prices[ethHash] <= 0) postPriceInternal(\\\\\\\"ETH\\\\\\\"); // TODO: Try to post ETH price\\\\n            uint usdPerEth = prices[ethHash];\\\\n            require(usdPerEth > 0, \\\\\\\"ETH price not set, cannot convert from USD to ETH\\\\\\\");\\\\n            // if (prices[config.symbolHash] <= 0) postPriceInternal(config.symbol, config, false); // TODO: Try to post price if not set\\\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= priceTimestamps[config.symbolHash] + maxSecondsBeforePriceIsStale, \\\\\\\"Reporter price is stale.\\\\\\\");\\\\n            return mul(prices[config.symbolHash], ethBaseUnit) / usdPerEth;\\\\n        }\\\\n        if (config.priceSource == PriceSource.FIXED_USD) {\\\\n            // Convert from fixed USD to ETH\\\\n            // if (prices[ethHash] <= 0) postPriceInternal(\\\\\\\"ETH\\\\\\\"); // TODO: Try to post price if not set\\\\n            uint usdPerEth = prices[ethHash];\\\\n            require(usdPerEth > 0, \\\\\\\"ETH price not set, cannot convert from USD to ETH\\\\\\\");\\\\n            return mul(config.fixedPrice, ethBaseUnit) / usdPerEth;\\\\n        }\\\\n        if (config.priceSource == PriceSource.FIXED_ETH) return config.fixedPrice;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Get the underlying price of a cToken\\\\n     * @dev Implements the PriceOracle interface for Compound v2.\\\\n     * @param cToken The cToken address for price retrieval\\\\n     * @return Price denominated in ETH, with 18 decimals, for the given cToken address\\\\n     */\\\\n    function getUnderlyingPrice(address cToken) external view returns (uint) {\\\\n        if (CToken(cToken).isCEther()) return ethBaseUnit;\\\\n        TokenConfig memory config = getTokenConfigByCToken(cToken);\\\\n         // Comptroller needs prices in the format: ${raw price} * 1e(36 - baseUnit)\\\\n         // Since the prices in this view have 18 decimals, we must scale them by 1e(36 - 18 - baseUnit)\\\\n        return mul(1e18, priceInternal(config)) / config.baseUnit;\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Post open oracle reporter prices, and recalculate stored price by comparing to anchor\\\\n     * @dev We let anyone pay to post anything, but only prices from configured reporter will be stored in the view.\\\\n     * @param messages The messages to post to the oracle\\\\n     * @param signatures The signatures for the corresponding messages\\\\n     * @param symbols The symbols to compare to anchor for authoritative reading\\\\n     */\\\\n    function postPrices(bytes[] calldata messages, bytes[] calldata signatures, string[] calldata symbols) external {\\\\n        require(messages.length == signatures.length, \\\\\\\"messages and signatures must be 1:1\\\\\\\");\\\\n\\\\n        // Save the prices\\\\n        for (uint i = 0; i < messages.length; i++) {\\\\n            priceData.put(messages[i], signatures[i]);\\\\n        }\\\\n\\\\n        // Try to update the view storage\\\\n        for (uint i = 0; i < symbols.length; i++) {\\\\n            postPriceInternal(symbols[i], getTokenConfigBySymbol(symbols[i]), true);\\\\n        }\\\\n    }\\\\n\\\\n    function postPriceInternal(string memory symbol) internal {\\\\n        postPriceInternal(symbol, getTokenConfigBySymbol(symbol), false);\\\\n    }\\\\n\\\\n    function postPriceInternal(string memory symbol, TokenConfig memory config, bool forceUpdate) internal {\\\\n        require(config.priceSource == PriceSource.REPORTER, \\\\\\\"only reporter prices get posted\\\\\\\");\\\\n\\\\n        bytes32 symbolHash = keccak256(abi.encodePacked(symbol));\\\\n        (uint timestamp, uint reporterPrice) = priceData.get(reporter, symbol);\\\\n\\\\n        if (reporterInvalidated) {\\\\n            emit PriceGuarded(symbol, prices[symbolHash]);\\\\n        } else if (prices[symbolHash] != reporterPrice || forceUpdate) {\\\\n            prices[symbolHash] = reporterPrice;\\\\n            priceTimestamps[symbolHash] = timestamp;\\\\n            emit PriceUpdated(symbol, reporterPrice);\\\\n        }\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Invalidate the reporter, and fall back to using anchor directly in all cases\\\\n     * @dev Only the reporter may sign a message which allows it to invalidate itself.\\\\n     *  To be used in cases of emergency, if the reporter thinks their key may be compromised.\\\\n     * @param message The data that was presumably signed\\\\n     * @param signature The fingerprint of the data + private key\\\\n     */\\\\n    function invalidateReporter(bytes memory message, bytes memory signature) external {\\\\n        (string memory decodedMessage, ) = abi.decode(message, (string, address));\\\\n        require(keccak256(abi.encodePacked(decodedMessage)) == rotateHash, \\\\\\\"invalid message must be 'rotate'\\\\\\\");\\\\n        require(source(message, signature) == reporter, \\\\\\\"invalidation message must come from the reporter\\\\\\\");\\\\n        reporterInvalidated = true;\\\\n        emit ReporterInvalidated(reporter);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Recovers the source address which signed a message\\\\n     * @dev Comparing to a claimed address would add nothing,\\\\n     *  as the caller could simply perform the recover and claim that address.\\\\n     * @param message The data that was presumably signed\\\\n     * @param signature The fingerprint of the data + private key\\\\n     * @return The source address which signed the message, presumably\\\\n     */\\\\n    function source(bytes memory message, bytes memory signature) public pure returns (address) {\\\\n        (bytes32 r, bytes32 s, uint8 v) = abi.decode(signature, (bytes32, bytes32, uint8));\\\\n        bytes32 hash = keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", keccak256(message)));\\\\n        return ecrecover(hash, v, r, s);\\\\n    }\\\\n\\\\n    /// @dev Overflow proof multiplication\\\\n    function mul(uint a, uint b) internal pure returns (uint) {\\\\n        if (a == 0) return 0;\\\\n        uint c = a * b;\\\\n        require(c / a == b, \\\\\\\"multiplication overflow\\\\\\\");\\\\n        return c;\\\\n    }\\\\n\\\\n    function getSymbolHashIndex(bytes32 symbolHash) internal view returns (uint) {\\\\n        for (uint256 i = 0; i < _configs.length; i++) if (symbolHash == _configs[i].symbolHash) return i;\\\\n        return uint(-1);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Get the config for symbol\\\\n     * @param symbol The symbol of the config to get\\\\n     * @return The config object\\\\n     */\\\\n    function getTokenConfigBySymbol(string memory symbol) public view returns (TokenConfig memory) {\\\\n        return getTokenConfigBySymbolHash(keccak256(abi.encodePacked(symbol)));\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Get the config for the symbolHash\\\\n     * @param symbolHash The keccack256 of the symbol of the config to get\\\\n     * @return The config object\\\\n     */\\\\n    function getTokenConfigBySymbolHash(bytes32 symbolHash) public view returns (TokenConfig memory) {\\\\n        uint index = getSymbolHashIndex(symbolHash);\\\\n        if (index != uint(-1)) {\\\\n            return getTokenConfig(index);\\\\n        }\\\\n\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xef59ccbd91956d49e6d8cb76d1f63b8efe865a5a48dda6b5afdded5ec9f10502\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapConfig.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport { CToken, CErc20 } from \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\ncontract UniswapConfig {\\\\r\\\\n    /// @dev Describe how to interpret the fixedPrice in the TokenConfig.\\\\r\\\\n    enum PriceSource {\\\\r\\\\n        FIXED_ETH, /// implies the fixedPrice is a constant multiple of the ETH price (which varies)\\\\r\\\\n        FIXED_USD, /// implies the fixedPrice is a constant multiple of the USD price (which is 1)\\\\r\\\\n        REPORTER,  /// implies the price is set by the reporter (only available on UniswapAnchoredView)\\\\r\\\\n        TWAP,      /// implies the price is set by TWAPs (only available on UniswapView)\\\\r\\\\n        UNISWAP    /// implies the price is set by the direct Uniswap price (only available on UniswapDirectView)\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Describe how the USD price should be determined for an asset.\\\\r\\\\n    ///  There should be 1 TokenConfig object for each supported asset, passed in the constructor.\\\\r\\\\n    struct TokenConfig {\\\\r\\\\n        address underlying;\\\\r\\\\n        bytes32 symbolHash;\\\\r\\\\n        uint256 baseUnit;\\\\r\\\\n        PriceSource priceSource;\\\\r\\\\n        uint256 fixedPrice;\\\\r\\\\n        address uniswapMarket;\\\\r\\\\n        bool isUniswapReversed;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Token config objects\\\\r\\\\n    TokenConfig[] internal _configs;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to token config indexes\\\\r\\\\n    mapping(address => uint256) internal _configIndexesByUnderlying;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to booleans indicating if they have token configs\\\\r\\\\n    mapping(address => bool) internal _configPresenceByUnderlying;\\\\r\\\\n    \\\\r\\\\n    /// @notice Admin address\\\\r\\\\n    address public admin;\\\\r\\\\n    \\\\r\\\\n    /// @notice Whether or not existing token configs can be overwritten\\\\r\\\\n    bool public canAdminOverwrite;\\\\r\\\\n\\\\r\\\\n    /// @notice The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n    uint256 public maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct an immutable store of configs into the contract data\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\r\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n     */\\\\r\\\\n    constructor(TokenConfig[] memory configs, bool _canAdminOverwrite, uint256 _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        admin = msg.sender;\\\\r\\\\n        canAdminOverwrite = _canAdminOverwrite;\\\\r\\\\n        maxSecondsBeforePriceIsStale = _maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n        // Add configs\\\\r\\\\n        _add(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Internal function to add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function _add(TokenConfig[] memory configs) internal virtual {\\\\r\\\\n        // For each config\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // If !canAdminOverwrite, check for existing config\\\\r\\\\n            if (!canAdminOverwrite) require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Add config to state\\\\r\\\\n            _configs.push(configs[i]);\\\\r\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\r\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice Changes the admin\\\\r\\\\n    function changeAdmin(address newAdmin) external {\\\\r\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n        admin = newAdmin;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice The number of tokens this contract actually supports\\\\r\\\\n    function numTokens() public view returns (uint256) {\\\\r\\\\n        return _configs.length;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by cToken address\\\\r\\\\n    function getCTokenIndex(address cToken) internal view returns (uint) {\\\\r\\\\n        return getUnderlyingIndex(CToken(cToken).isCEther() ? address(0) : CErc20(cToken).underlying());\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by underlying ERC20 token address\\\\r\\\\n    function getUnderlyingIndex(address underlying) internal view returns (uint) {\\\\r\\\\n        return _configPresenceByUnderlying[underlying] ? _configIndexesByUnderlying[underlying] : uint(-1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the i-th config, according to the order they were passed in originally\\\\r\\\\n     * @param i The index of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfig(uint i) public view returns (TokenConfig memory) {\\\\r\\\\n        require(i < numTokens(), \\\\\\\"token config not found\\\\\\\");\\\\r\\\\n        return _configs[i];\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for the cToken\\\\r\\\\n     * @param cToken The address of the cToken of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByCToken(address cToken) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getCTokenIndex(cToken);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for an underlying asset\\\\r\\\\n     * @param underlying The address of the underlying asset of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByUnderlying(address underlying) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getUnderlyingIndex(underlying);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x5cdbac709449ecaa73d9bc7e628d5e78fcda19a579fce7a8afc5ee62dbf33fa0\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapAnchoredView.sol:UniswapAnchoredView\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"priceData_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorToleranceMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_isSecure\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchor\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceGuarded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ReporterInvalidated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_ANCHORED_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbol\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbolHash\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"invalidateReporter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isSecure\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"lowerBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"messages\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"symbols\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"priceData\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"priceTimestamps\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporterInvalidated\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"upperBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"6101206040523480156200001257600080fd5b50604051620049243803806200492483398101604081905262000035916200122f565b60038054336001600160a01b03199091161760ff60a01b1916600160a01b8515150217905560048190558383826200006d8362000156565b5050506001600160601b0319606089811b821660805288901b1660a052610100859052600c805483151560ff19909116179055670de0b6b3a7640000198611620000c25785670de0b6b3a764000001620000c6565b6000195b60c052670de0b6b3a76400008610620000e1576001620000ed565b85670de0b6b3a7640000035b60e052600c5460ff16156200013d57600354600160a01b900460ff1615620001325760405162461bcd60e51b8152600401620001299062001993565b60405180910390fd5b6200013d8462000425565b620001488462000bdb565b505050505050505062001cf0565b60005b81518110156200042157600354600160a01b900460ff166200022057600260008383815181106200018657fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615620001ce5760405162461bcd60e51b81526004016200012990620017d4565b600b6000838381518110620001df57fe5b60209081029190910181015181015182528101919091526040016000205460ff1615620002205760405162461bcd60e51b815260040162000129906200159e565b60008282815181106200022f57fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115620002a957fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106200031b57fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600260008484815181106200035e57fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008054905003600a6000848481518110620003bb57fe5b6020026020010151602001518152602001908152602001600020819055506001600b6000848481518110620003ec57fe5b6020908102919091018101518101518252810191909152604001600020805460ff191691151591909117905560010162000159565b5050565b60005b8151811015620004215760405160200162000443906200153e565b604051602081830303815290604052805190602001208282815181106200046657fe5b60200260200101516020015114620005e1578181815181106200048557fe5b602002602001015160a001516001600160a01b031673b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b031614620004d85760405162461bcd60e51b8152600401620001299062001706565b818181518110620004e557fe5b602002602001015160c0015115620005115760405162461bcd60e51b8152600401620001299062001763565b60006001600160a01b03168282815181106200052957fe5b6020026020010151600001516001600160a01b0316146200055e5760405162461bcd60e51b8152600401620001299062001aa9565b8181815181106200056b57fe5b602002602001015160800151600014620005995760405162461bcd60e51b8152600401620001299062001bbf565b670de0b6b3a7640000828281518110620005af57fe5b60200260200101516040015114620005db5760405162461bcd60e51b815260040162000129906200190a565b62000bd2565b6000828281518110620005f057fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200063557600080fd5b505afa1580156200064a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200067491908101906200135b565b604051602001620006869190620014a7565b604051602081830303815290604052805190602001209050828281518110620006ab57fe5b602002602001015160200151811480620007335750604051602001620006d1906200152e565b604051602081830303815290604052805190602001208114801562000733575060405160200162000702906200154d565b604051602081830303815290604052805190602001208383815181106200072557fe5b602002602001015160200151145b620007525760405162461bcd60e51b8152600401620001299062001862565b8282815181106200075f57fe5b6020026020010151604001518383815181106200077857fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620007bd57600080fd5b505afa158015620007d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f8919062001462565b60ff16600a0a146200081e5760405162461bcd60e51b8152600401620001299062001952565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168383815181106200084957fe5b6020026020010151600001516001600160a01b03161415620009645760008383815181106200087457fe5b60200260200101516060015160048111156200088c57fe5b14620008ac5760405162461bcd60e51b8152600401620001299062001a01565b828281518110620008b957fe5b602002602001015160800151670de0b6b3a764000014620008ee5760405162461bcd60e51b8152600401620001299062001b3d565b60006001600160a01b03168383815181106200090657fe5b602002602001015160a001516001600160a01b0316146200093b5760405162461bcd60e51b8152600401620001299062001820565b60008383815181106200094a57fe5b602090810291909101015190151560c09091015262000bd0565b60028383815181106200097357fe5b60200260200101516060015160048111156200098b57fe5b14620009ab5760405162461bcd60e51b81526004016200012990620015de565b828281518110620009b857fe5b602002602001015160800151600014620009e65760405162461bcd60e51b815260040162000129906200167e565b600062000a40735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f85858151811062000a0e57fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc262000d3960201b62000bb21760201c565b9050806001600160a01b031684848151811062000a5957fe5b602002602001015160a001516001600160a01b03161462000a8e5760405162461bcd60e51b81526004016200012990620018bf565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562000aca57600080fd5b505afa15801562000adf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b05919062001209565b905084848151811062000b1457fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614801562000b57575084848151811062000b4957fe5b602002602001015160c00151155b8062000bae575084848151811062000b6b57fe5b6020026020010151600001516001600160a01b0316816001600160a01b03161415801562000bae575084848151811062000ba157fe5b602002602001015160c001515b62000bcd5760405162461bcd60e51b8152600401620001299062001a5e565b50505b505b60010162000428565b60005b8151811015620004215762000bf262001107565b82828151811062000bff57fe5b60200260200101519050600081604001511162000c305760405162461bcd60e51b815260040162000129906200155c565b60a081015160028260600151600481111562000c4857fe5b141562000d04576001600160a01b03811662000c785760405162461bcd60e51b815260040162000129906200163b565b6020820151600062000c8a8462000dae565b600083815260086020908152604080832042808255600990935292819020828155600193840185905592909201839055905191925083917fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9162000cf49181908690819062001c4c565b60405180910390a2505062000d2e565b6001600160a01b0381161562000d2e5760405162461bcd60e51b8152600401620001299062001c06565b505060010162000bde565b6000808062000d49858562000ded565b9150915085828260405160200162000d6392919062001485565b6040516020818303038152906040528051906020012060405160200162000d8c929190620014c5565b60408051601f1981840301815291905280516020909101209695505050505050565b600080600062000dcd8460a0015162000e7f60201b62000c221760201c565b50915091508360c0015162000de3578162000de5565b805b949350505050565b600080826001600160a01b0316846001600160a01b0316141562000e255760405162461bcd60e51b81526004016200012990620016c1565b826001600160a01b0316846001600160a01b03161062000e4757828462000e4a565b83835b90925090506001600160a01b03821662000e785760405162461bcd60e51b8152600401620001299062001b06565b9250929050565b6000808062000e8d62001082565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ec957600080fd5b505afa15801562000ede573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f04919062001449565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b15801562000f4057600080fd5b505afa15801562000f55573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f7b919062001449565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801562000fbc57600080fd5b505afa15801562000fd1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff79190620013ef565b9250925092508363ffffffff168163ffffffff16146200107857600081850390508063ffffffff166200103684866200108c60201b62000df71760201c565b600001516001600160e01b031602870196508063ffffffff166200106685856200108c60201b62000df71760201c565b516001600160e01b0316029590950194505b5050509193909250565b63ffffffff421690565b6200109662001144565b6000826001600160701b031611620010c25760405162461bcd60e51b8152600401620001299062001b88565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b1681620010f157fe5b046001600160e01b031681525090505b92915050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b8051620011018162001cc1565b805180151581146200110157600080fd5b600060e0828403121562001186578081fd5b6200119260e062001c67565b90508151620011a18162001cc1565b808252506020820151602082015260408201516040820152606082015160058110620011cc57600080fd5b606082015260808281015190820152620011ea8360a0840162001156565b60a0820152620011fe8360c0840162001163565b60c082015292915050565b6000602082840312156200121b578081fd5b8151620012288162001cc1565b9392505050565b600080600080600080600080610100898b0312156200124c578384fd5b8851620012598162001cc1565b60208a01519098506200126c8162001cc1565b60408a015160608b015160808c015192995090975095506001600160401b038082111562001298578586fd5b818b0191508b601f830112620012ac578586fd5b815181811115620012bb578687fd5b620012cb60208083020162001c67565b818152602080820193508481019060e084028601018f1015620012ec578889fd5b8894505b828510156200131d57620013058f8262001174565b84526001949094019360209093019260e001620012f0565b5080975050505050620013348a60a08b0162001163565b9250620013458a60c08b0162001163565b915060e089015190509295985092959890939650565b6000602082840312156200136d578081fd5b81516001600160401b038082111562001384578283fd5b818401915084601f83011262001398578283fd5b815181811115620013a7578384fd5b620013bc601f8201601f191660200162001c67565b9150808252856020828501011115620013d3578384fd5b620013e681602084016020860162001c8e565b50949350505050565b60008060006060848603121562001404578283fd5b8351620014118162001cda565b6020850151909350620014248162001cda565b604085015190925063ffffffff811681146200143e578182fd5b809150509250925092565b6000602082840312156200145b578081fd5b5051919050565b60006020828403121562001474578081fd5b815160ff8116811462001228578182fd5b6001600160601b0319606093841b811682529190921b16601482015260280190565b60008251620014bb81846020870162001c8e565b9190910192915050565b7fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b635742544360e01b815260040190565b6208aa8960eb1b815260030190565b6242544360e81b815260030190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b6020808252603190820152600080516020620049048339815191526040820152703a3434b99039bcb6b137b6103430b9b41760791b606082015260800190565b60208082526034908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201527f653a206d757374206265205245504f525445522e000000000000000000000000606082015260800190565b60208082526023908201527f7265706f7274656420707269636573206d757374206861766520616e20616e636040820152623437b960e91b606082015260800190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526033908201527f496e636f727265637420556e6973776170206d61726b657420666f722045544860408201527f3a206d75737420626520555344432d4554482e00000000000000000000000000606082015260800190565b6020808252604b908201527f496e636f727265637420556e6973776170206d61726b6574207265766572736160408201527f6c20666f72204554483a206d75737420626520555344432d45544820286e6f7460608201526a103932bb32b939b2b2149760a91b608082015260a00190565b6020808252603e908201526000805160206200490483398151915260408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b60208082526028908201527f45544820746f6b656e20636f6e666967206261736520756e6974206d7573742060408201526731329018b2989c1760c11b606082015260800190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b60208082526048908201527f63616e41646d696e4f7665727772697465206d7573742062652073657420746f60408201527f2066616c736520666f722073656375726520556e69737761705669657720636f606082015267373a3930b1ba399760c11b608082015260a00190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b6020808252603a908201527f556e6465726c79696e6720746f6b656e2061646472657373206d75737420626560408201527f20746865207a65726f206164647265737320666f72204554482e000000000000606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b60208082526027908201527f45544820746f6b656e20636f6e666967206669786564207072696365206d75736040820152663a10313290181760c91b606082015260800190565b60208082526026908201527f6f6e6c79207265706f7274656420707269636573207574696c697a6520616e2060408201526530b731b437b960d11b606082015260800190565b93845260208401929092526040830152606082015260800190565b6040518181016001600160401b038111828210171562001c8657600080fd5b604052919050565b60005b8381101562001cab57818101518382015260200162001c91565b8381111562001cbb576000848401525b50505050565b6001600160a01b038116811462001cd757600080fd5b50565b6001600160701b038116811462001cd757600080fd5b60805160601c60a05160601c60c05160e05161010051612ba662001d5e600039806108e15280611c4c5250806108805280611bc552508061045a5280611b9a5250806103c6528061076a52806107fa52806114cd5250806108bd5280610948528061149e5250612ba66000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638a00388811610104578063e073a241116100a2578063ecc1e98411610071578063ecc1e98414610383578063f851a44014610396578063fc57d4df1461039e578063fe2c6198146103b1576101da565b8063e073a24114610358578063e61a5fe414610360578063e9206d7814610368578063eaa1c2ca14610370576101da565b80638f283970116100de5780638f2839701461032a57806392b843571461033d5780639f59963114610345578063d1b353b4146102f4576101da565b80638a003888146102fc5780638aba91b41461030f5780638e499bcf14610322576101da565b8063300de3ca1161017c57806360846bc61161014b57806360846bc6146102d1578063651ed788146102e4578063656b0fd1146102ec57806369aa3ac6146102f4576101da565b8063300de3ca1461028257806337c0e12d1461028a578063482a6193146102ab5780634da21942146102be576101da565b806322ddeb7d116101b857806322ddeb7d146102325780632410520914610252578063276c2cba1461025a5780632d1c668f1461026d576101da565b8063010ec441146101df5780631a125204146101fd57806322798faf1461021d575b600080fd5b6101e76103c4565b6040516101f491906123fc565b60405180910390f35b61021061020b3660046120be565b6103e8565b6040516101f491906129e1565b61022561043d565b6040516101f49190612434565b6102456102403660046120be565b610446565b6040516101f49190612a49565b610245610458565b610210610268366004612173565b61047c565b61028061027b366004611ff3565b6104b9565b005b6102256104f8565b61029d6102983660046120be565b6104fd565b6040516101f4929190612a52565b6101e76102b9366004612113565b610516565b6102106102cc366004611f26565b6105c3565b6102456102df3660046120be565b6105d6565b6102256105e8565b6102256105f1565b610245610601565b61021061030a3660046120be565b61060d565b61028061031d366004612113565b6106e6565b61024561082c565b610280610338366004611f26565b610832565b61024561087e565b610210610353366004611f26565b6108a2565b6102456108b5565b6101e76108bb565b6102456108df565b61029d61037e3660046120be565b610903565b610280610391366004611f5e565b61091c565b6101e7610ab6565b6102456103ac366004611f26565b610ac5565b6102456103bf366004612173565b610b8d565b7f000000000000000000000000000000000000000000000000000000000000000081565b6103f0611d24565b60006103fb83610e72565b905060001981146104175761040f8161060d565b915050610438565b60405162461bcd60e51b815260040161042f90612691565b60405180910390fd5b919050565b600c5460ff1681565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b610484611d24565b6104b3826040516020016104989190612338565b604051602081830303815290604052805190602001206103e8565b92915050565b6003546001600160a01b031633146104e35760405162461bcd60e51b815260040161042f90612706565b6104ec81610ea3565b6104f581611161565b50565b600181565b6008602052600090815260409020805460019091015482565b6000806000808480602001905181019061053091906120d6565b925092509250600086805190602001206040516020016105509190612354565b6040516020818303038152906040528051906020012090506001818386866040516000815260200160405260405161058b949392919061243f565b6020604051602081039080840390855afa1580156105ad573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b6105cb611d24565b60006103fb836112aa565b60056020526000908152604090205481565b60075460ff1681565b600354600160a01b900460ff1681565b670de0b6b3a764000081565b610615611d24565b61061d61082c565b821061063b5760405162461bcd60e51b815260040161042f90612691565b6000828154811061064857fe5b60009182526020918290206040805160e081018252600690930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154909190606083019060ff1660048111156106a257fe5b60048111156106ad57fe5b8152600482015460208201526005909101546001600160a01b0381166040830152600160a01b900460ff16151560609091015292915050565b6060828060200190518101906106fc91906121d7565b50905060405160200161070e90612385565b60405160208183030381529060405280519060200120816040516020016107359190612338565b60405160208183030381529060405280519060200120146107685760405162461bcd60e51b815260040161042f906128b5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661079c8484610516565b6001600160a01b0316146107c25760405162461bcd60e51b815260040161042f9061273d565b6007805460ff191660011790556040517f98a13f7b181a3a1f99c871e7a3507d4a037d386d157279f978e0d555ae9fe74d9061081f907f0000000000000000000000000000000000000000000000000000000000000000906123fc565b60405180910390a1505050565b60005490565b6003546001600160a01b0316331461085c5760405162461bcd60e51b815260040161042f90612706565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6108aa611d24565b60006103fb836112ee565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009602052600090815260409020805460019091015482565b84831461093b5760405162461bcd60e51b815260040161042f90612921565b60005b85811015610a2f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338636e9a88888481811061098157fe5b90506020028101906109939190612a7b565b88888681811061099f57fe5b90506020028101906109b19190612a7b565b6040518563ffffffff1660e01b81526004016109d0949392919061245d565b600060405180830381600087803b1580156109ea57600080fd5b505af11580156109fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a2691908101906121a5565b5060010161093e565b506000610a3a6113e6565b905060005b82811015610aac57610aa4848483818110610a5657fe5b9050602002810190610a689190612a7b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086925061142c915050565b600101610a3f565b5050505050505050565b6003546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0057600080fd5b505afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3891906120a2565b15610b4c5750670de0b6b3a7640000610438565b610b54611d24565b610b5d836108a2565b90508060400151610b7e670de0b6b3a7640000610b79846116d8565b61197b565b81610b8557fe5b049392505050565b6000610b97611d24565b610ba08361047c565b9050610bab816116d8565b9392505050565b6000806000610bc185856119b5565b91509150858282604051602001610bd9929190612311565b60405160208183030381529060405280519060200120604051602001610c00929190612397565b60408051601f1981840301815291905280516020909101209695505050505050565b6000806000610c2f611a3f565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b158015610c6a57600080fd5b505afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca2919061226f565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b158015610cdd57600080fd5b505afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d15919061226f565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610d5557600080fd5b505afa158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d9190612226565b9250925092508363ffffffff168163ffffffff1614610ded5780840363ffffffff8116610dba8486610df7565b516001600160e01b031602969096019563ffffffff8116610ddb8585610df7565b516001600160e01b0316029590950194505b5050509193909250565b610dff611d61565b6000826001600160701b031611610e285760405162461bcd60e51b815260040161042f90612964565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681610e5d57fe5b046001600160e01b0316815250905092915050565b6000818152600b602052604081205460ff16610e90576000196104b3565b506000908152600a602052604090205490565b60005b815181101561115d57600354600160a01b900460ff16610f635760026000838381518110610ed057fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615610f155760405162461bcd60e51b815260040161042f9061278d565b600b6000838381518110610f2557fe5b60209081029190910181015181015182528101919091526040016000205460ff1615610f635760405162461bcd60e51b815260040161042f90612575565b6000828281518110610f7157fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115610fea57fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b03199094169390931791909116919091179055600080548351600019919091019160019185908590811061105b57fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016002600084848151811061109d57fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008054905003600a60008484815181106110f957fe5b6020026020010151602001518152602001908152602001600020819055506001600b600084848151811061112957fe5b6020908102919091018101518101518252810191909152604001600020805460ff1916911515919091179055600101610ea6565b5050565b60005b815181101561115d57611175611d24565b82828151811061118157fe5b6020026020010151905060008160400151116111af5760405162461bcd60e51b815260040161042f90612533565b60a08101516002826060015160048111156111c657fe5b1415611279576001600160a01b0381166111f25760405162461bcd60e51b815260040161042f90612617565b6020820151600061120284611a49565b600083815260086020908152604080832042808255600990935292819020828155600193840185905592909201839055905191925083917fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9161126a91819086908190612a60565b60405180910390a250506112a0565b6001600160a01b038116156112a05760405162461bcd60e51b815260040161042f9061299b565b5050600101611164565b6001600160a01b03811660009081526002602052604081205460ff166112d2576000196104b3565b506001600160a01b031660009081526001602052604090205490565b60006104b3826001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561132c57600080fd5b505afa158015611340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136491906120a2565b6113de57826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a157600080fd5b505afa1580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d99190611f42565b6113e1565b60005b6112aa565b60006114276040518060400160405280600381526020016208aa8960eb1b815250611419604051602001610498906123ed565b670de0b6b3a7640000611a79565b905090565b611434611d24565b61143d8361047c565b905060028160600151600481111561145157fe5b1461146e5760405162461bcd60e51b815260040161042f90612847565b6000836040516020016114819190612338565b6040516020818303038152906040528051906020012090506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc2525ab7f0000000000000000000000000000000000000000000000000000000000000000886040518363ffffffff1660e01b815260040161150a929190612410565b604080518083038186803b15801561152157600080fd5b505afa158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190612287565b6001600160401b031691506001600160401b031691506000604051602001611580906123ed565b604051602081830303815290604052805190602001208414156115a45750846115b2565b6115af878688611a79565b90505b60075460ff16156116345760008481526005602090815260408083208490556009825280832054600883528184205460069093529281902060029290930191909104909155517f159e83f4712ba2552e68be9d848e49bf6dd35c24f19564ffd523b6549450a2f490611627908990849061248f565b60405180910390a16116cf565b61163e8382611b71565b15611693576000848152600560209081526040808320869055600690915290819020839055517f159e83f4712ba2552e68be9d848e49bf6dd35c24f19564ffd523b6549450a2f490611627908990869061248f565b7f90756d4c8646a4591078abac0e4e32dfa8437921729e36d51b88b659d265bfde8784836040516116c6939291906124b1565b60405180910390a15b50505050505050565b60006040516020016116e9906123ed565b60405160208183030381529060405280519060200120826020015114156117195750670de0b6b3a7640000610438565b60028260600151600481111561172b57fe5b141561186a57600060056000604051602001611746906123ed565b6040516020818303038152906040528051906020012081526020019081526020016000205490506000811161178d5760405162461bcd60e51b815260040161042f906125c6565b600454156117f057600454600660006040516020016117ab906123ed565b60405160208183030381529060405280519060200120815260200190815260200160002054014211156117f05760405162461bcd60e51b815260040161042f906127ea565b6004541561183057600454602080850151600090815260069091526040902054014211156118305760405162461bcd60e51b815260040161042f90612505565b8061185a600560008660200151815260200190815260200160002054670de0b6b3a764000061197b565b8161186157fe5b04915050610438565b60018260600151600481111561187c57fe5b141561195857600060056000604051602001611897906123ed565b604051602081830303815290604052805190602001208152602001908152602001600020549050600081116118de5760405162461bcd60e51b815260040161042f906125c6565b6004541561194157600454600660006040516020016118fc906123ed565b60405160208183030381529060405280519060200120815260200190815260200160002054014211156119415760405162461bcd60e51b815260040161042f906127ea565b8061185a8460800151670de0b6b3a764000061197b565b60008260600151600481111561196a57fe5b141561043857506080810151610438565b60008261198a575060006104b3565b8282028284828161199757fe5b0414610bab5760405162461bcd60e51b815260040161042f9061265a565b600080826001600160a01b0316846001600160a01b031614156119ea5760405162461bcd60e51b815260040161042f906126c1565b826001600160a01b0316846001600160a01b031610611a0a578284611a0d565b83835b90925090506001600160a01b038216611a385760405162461bcd60e51b815260040161042f906128ea565b9250929050565b63ffffffff421690565b6000806000611a5b8460a00151610c22565b50915091508360c00151611a6f5781611a71565b805b949350505050565b600080600080611a8886611bf9565b925092509250804211611aad5760405162461bcd60e51b815260040161042f9061287e565b42819003611ab9611d61565b60405180602001604052808386880381611acf57fe5b046001600160e01b031681525090506000611ae982611d0c565b90506000611af7828a61197b565b90506000670de0b6b3a764000080611b13848e6040015161197b565b81611b1a57fe5b0481611b2257fe5b0490507ff63d078e0de851897107641e96093a59e5ddc3c25e7b85a2585e3eba9e774a7b8c828842604051611b5a94939291906124d6565b60405180910390a19b9a5050505050505050505050565b60008215611bf057600083611b8e84670de0b6b3a764000061197b565b81611b9557fe5b0490507f00000000000000000000000000000000000000000000000000000000000000008111158015611be857507f00000000000000000000000000000000000000000000000000000000000000008110155b9150506104b3565b50600092915050565b600080600080846020015190506000611c1186611a49565b9050611c1b611d73565b50600082815260096020908152604091829020825180840190935280548084526001909101549183019190915242037f00000000000000000000000000000000000000000000000000000000000000008110611ce7578151600085815260086020908152604080832093845581860180516001958601556009835292819020428082559401879055908b015185519251915190937fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a93611cde9390928990612a60565b60405180910390a25b5050600091825260086020526040909120600181015490549196909550909350915050565b516612725dd1d243ab6001600160e01b039091160490565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b604051806040016040528060008152602001600081525090565b80356104b381612b38565b60008083601f840112611da9578182fd5b5081356001600160401b03811115611dbf578182fd5b6020830191508360208083028501011115611a3857600080fd5b80356104b381612b4d565b600082601f830112611df4578081fd5b8135611e07611e0282612ae5565b612abf565b9150808252836020828501011115611e1e57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112611e47578081fd5b8151611e55611e0282612ae5565b9150808252836020828501011115611e6c57600080fd5b611e7d816020840160208601612b08565b5092915050565b600060e08284031215611e95578081fd5b611e9f60e0612abf565b90508135611eac81612b38565b808252506020820135602082015260408201356040820152606082013560058110611ed657600080fd5b606082015260808281013590820152611ef28360a08401611d8d565b60a0820152611f048360c08401611dd9565b60c082015292915050565b80516001600160401b03811681146104b357600080fd5b600060208284031215611f37578081fd5b8135610bab81612b38565b600060208284031215611f53578081fd5b8151610bab81612b38565b60008060008060008060608789031215611f76578182fd5b86356001600160401b0380821115611f8c578384fd5b611f988a838b01611d98565b90985096506020890135915080821115611fb0578384fd5b611fbc8a838b01611d98565b90965094506040890135915080821115611fd4578384fd5b50611fe189828a01611d98565b979a9699509497509295939492505050565b60006020808385031215612005578182fd5b82356001600160401b038082111561201b578384fd5b818501915085601f83011261202e578384fd5b81358181111561203c578485fd5b6120498485830201612abf565b818152848101925083850160e0808402860187018a1015612068578788fd5b8795505b838610156120945761207e8a83611e84565b855260019590950194938601939081019061206c565b509098975050505050505050565b6000602082840312156120b3578081fd5b8151610bab81612b4d565b6000602082840312156120cf578081fd5b5035919050565b6000806000606084860312156120ea578081fd5b8351925060208401519150604084015160ff81168114612108578182fd5b809150509250925092565b60008060408385031215612125578182fd5b82356001600160401b038082111561213b578384fd5b61214786838701611de4565b9350602085013591508082111561215c578283fd5b5061216985828601611de4565b9150509250929050565b600060208284031215612184578081fd5b81356001600160401b03811115612199578182fd5b611a7184828501611de4565b6000602082840312156121b6578081fd5b81516001600160401b038111156121cb578182fd5b611a7184828501611e37565b600080604083850312156121e9578182fd5b82516001600160401b038111156121fe578283fd5b61220a85828601611e37565b925050602083015161221b81612b38565b809150509250929050565b60008060006060848603121561223a578081fd5b835161224581612b5b565b602085015190935061225681612b5b565b604085015190925063ffffffff81168114612108578182fd5b600060208284031215612280578081fd5b5051919050565b60008060408385031215612299578182fd5b6122a38484611f0f565b91506122b28460208501611f0f565b90509250929050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526122fd816020860160208601612b08565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b6000825161234a818460208701612b08565b9190910192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b65726f7461746560d01b815260060190565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b6001600160a01b0383168152604060208201819052600090611a71908301846122e5565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000604082526124716040830186886122bb565b82810360208401526124848185876122bb565b979650505050505050565b6000604082526124a260408301856122e5565b90508260208301529392505050565b6000606082526124c460608301866122e5565b60208301949094525060400152919050565b6000608082526124e960808301876122e5565b6020830195909552506040810192909252606090910152919050565b6020808252601490820152732a2ba0a810383934b1b29034b99039ba30b6329760611b604082015260600190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526031908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f72206040820152703a3434b99039bcb6b137b6103430b9b41760791b606082015260800190565b60208082526031908201527f455448207072696365206e6f74207365742c2063616e6e6f7420636f6e7665726040820152700e840cce4deda40aaa68840e8de408aa89607b1b606082015260800190565b60208082526023908201527f7265706f7274656420707269636573206d757374206861766520616e20616e636040820152623437b960e91b606082015260800190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526017908201527f6d73672e73656e646572206973206e6f742061646d696e000000000000000000604082015260600190565b60208082526030908201527f696e76616c69646174696f6e206d657373616765206d75737420636f6d65206660408201526f3937b6903a3432903932b837b93a32b960811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526038908201527f4554482054574150207072696365206973207374616c653b2063616e6e6f742060408201527f636f6e766572742066726f6d2055534420746f204554482e0000000000000000606082015260800190565b6020808252601f908201527f6f6e6c79207265706f72746572207072696365732067657420706f7374656400604082015260600190565b6020808252601a908201527f6e6f77206d75737420636f6d65206166746572206265666f7265000000000000604082015260600190565b6020808252818101527f696e76616c6964206d657373616765206d7573742062652027726f7461746527604082015260600190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526023908201527f6d6573736167657320616e64207369676e617475726573206d75737420626520604082015262313a3160e81b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b60208082526026908201527f6f6e6c79207265706f7274656420707269636573207574696c697a6520616e2060408201526530b731b437b960d11b606082015260800190565b81516001600160a01b0390811682526020808401519083015260408084015190830152606083015160e08301919060058110612a1957fe5b80606085015250608084015160808401528060a08501511660a08401525060c0830151151560c083015292915050565b90815260200190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6000808335601e19843603018112612a91578283fd5b8301803591506001600160401b03821115612aaa578283fd5b602001915036819003821315611a3857600080fd5b6040518181016001600160401b0381118282101715612add57600080fd5b604052919050565b60006001600160401b03821115612afa578081fd5b50601f01601f191660200190565b60005b83811015612b23578181015183820152602001612b0b565b83811115612b32576000848401525b50505050565b6001600160a01b03811681146104f557600080fd5b80151581146104f557600080fd5b6001600160701b03811681146104f557600080fdfea2646970667358221220a5606089b3744b74b9286cd04b93567fc875cb7ebaebe2524ac3b512dcb1fd7e64736f6c634300060c0033546f6b656e20636f6e66696720616c72656164792065786973747320666f7220\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"priceData_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorToleranceMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_isSecure\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchor\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceGuarded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ReporterInvalidated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_ANCHORED_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbol\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbolHash\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"invalidateReporter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isSecure\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"lowerBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"messages\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"symbols\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"priceData\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"priceTimestamps\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporterInvalidated\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"upperBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"params\\\":{\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Note that to avoid immature TWAPs, the system must run for at least a single anchorPeriod before using.\\\",\\\"params\\\":{\\\"_canAdminOverwrite\\\":\\\"Whether or not existing token configs can be overwritten\\\",\\\"anchorPeriod_\\\":\\\"The minimum amount of time required for the old uniswap price accumulator to be replaced\\\",\\\"anchorToleranceMantissa_\\\":\\\"The percentage tolerance that the reporter may deviate from the uniswap anchor\\\",\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\",\\\"priceData_\\\":\\\"The OpenOraclePriceData contract to use\\\",\\\"reporter_\\\":\\\"The reporter whose prices are to be used\\\"}},\\\"getTokenConfig(uint256)\\\":{\\\"params\\\":{\\\"i\\\":\\\"The index of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByCToken(address)\\\":{\\\"params\\\":{\\\"cToken\\\":\\\"The address of the cToken of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigBySymbol(string)\\\":{\\\"params\\\":{\\\"symbol\\\":\\\"The symbol of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigBySymbolHash(bytes32)\\\":{\\\"params\\\":{\\\"symbolHash\\\":\\\"The keccack256 of the symbol of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The address of the underlying asset of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the PriceOracle interface for Compound v2.\\\",\\\"params\\\":{\\\"cToken\\\":\\\"The cToken address for price retrieval\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals, for the given cToken address\\\"}},\\\"invalidateReporter(bytes,bytes)\\\":{\\\"details\\\":\\\"Only the reporter may sign a message which allows it to invalidate itself.  To be used in cases of emergency, if the reporter thinks their key may be compromised.\\\",\\\"params\\\":{\\\"message\\\":\\\"The data that was presumably signed\\\",\\\"signature\\\":\\\"The fingerprint of the data + private key\\\"}},\\\"postPrices(bytes[],bytes[],string[])\\\":{\\\"details\\\":\\\"We let anyone pay to post anything, but only prices from configured reporter will be stored in the view.\\\",\\\"params\\\":{\\\"messages\\\":\\\"The messages to post to the oracle\\\",\\\"signatures\\\":\\\"The signatures for the corresponding messages\\\",\\\"symbols\\\":\\\"The symbols to compare to anchor for authoritative reading\\\"}},\\\"price(string)\\\":{\\\"params\\\":{\\\"symbol\\\":\\\"The symbol to fetch the price of\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals\\\"}},\\\"source(bytes,bytes)\\\":{\\\"details\\\":\\\"Comparing to a claimed address would add nothing,  as the caller could simply perform the recover and claim that address.\\\",\\\"params\\\":{\\\"message\\\":\\\"The data that was presumably signed\\\",\\\"signature\\\":\\\"The fingerprint of the data + private key\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The source address which signed the message, presumably\\\"}}},\\\"stateVariables\\\":{\\\"UNISWAP_V2_FACTORY_ADDRESS\\\":{\\\"details\\\":\\\"UniswapV2Factory contract address.\\\"},\\\"WETH_ADDRESS\\\":{\\\"details\\\":\\\"WETH contract address.\\\"},\\\"_configIndexesBySymbolHash\\\":{\\\"details\\\":\\\"Maps symbol hashes to token config indexes\\\"},\\\"_configPresenceBySymbolHash\\\":{\\\"details\\\":\\\"Maps symbol hashes to booleans indicating if they have token configs\\\"},\\\"isSecure\\\":{\\\"details\\\":\\\"Boolean indicating if Uniswap anchors are verified\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"AnchorPriceUpdated(string,uint256,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when anchor price is updated\\\"},\\\"PriceGuarded(string,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when new prices are posted but the stored price is not updated due to the anchor\\\"},\\\"PriceUpdated(string,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the stored price is updated\\\"},\\\"ReporterInvalidated(address)\\\":{\\\"notice\\\":\\\"The event emitted when reporter invalidates itself\\\"},\\\"UniswapWindowUpdated(bytes32,uint256,uint256,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the uniswap window changes\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"IS_UNISWAP_ANCHORED_VIEW()\\\":{\\\"notice\\\":\\\"Constant indicating that this contract is a UniswapAnchoredView\\\"},\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"notice\\\":\\\"Add new asset(s)\\\"},\\\"admin()\\\":{\\\"notice\\\":\\\"Admin address\\\"},\\\"anchorPeriod()\\\":{\\\"notice\\\":\\\"The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced\\\"},\\\"canAdminOverwrite()\\\":{\\\"notice\\\":\\\"Whether or not existing token configs can be overwritten\\\"},\\\"changeAdmin(address)\\\":{\\\"notice\\\":\\\"Changes the admin\\\"},\\\"constructor\\\":\\\"Construct a uniswap anchored view for a set of token configurations\\\",\\\"ethBaseUnit()\\\":{\\\"notice\\\":\\\"The number of wei in 1 ETH\\\"},\\\"expScale()\\\":{\\\"notice\\\":\\\"A common scaling factor to maintain precision\\\"},\\\"getTokenConfig(uint256)\\\":{\\\"notice\\\":\\\"Get the i-th config, according to the order they were passed in originally\\\"},\\\"getTokenConfigByCToken(address)\\\":{\\\"notice\\\":\\\"Get the config for the cToken\\\"},\\\"getTokenConfigBySymbol(string)\\\":{\\\"notice\\\":\\\"Get the config for symbol\\\"},\\\"getTokenConfigBySymbolHash(bytes32)\\\":{\\\"notice\\\":\\\"Get the config for the symbolHash\\\"},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"notice\\\":\\\"Get the config for an underlying asset\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Get the underlying price of a cToken\\\"},\\\"invalidateReporter(bytes,bytes)\\\":{\\\"notice\\\":\\\"Invalidate the reporter, and fall back to using anchor directly in all cases\\\"},\\\"lowerBoundAnchorRatio()\\\":{\\\"notice\\\":\\\"The lowest ratio of the new price to the anchor price that will still trigger the price to be updated\\\"},\\\"maxSecondsBeforePriceIsStale()\\\":{\\\"notice\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\"},\\\"newObservations(bytes32)\\\":{\\\"notice\\\":\\\"The new observation for each symbolHash\\\"},\\\"numTokens()\\\":{\\\"notice\\\":\\\"The number of tokens this contract actually supports\\\"},\\\"oldObservations(bytes32)\\\":{\\\"notice\\\":\\\"The old observation for each symbolHash\\\"},\\\"postPrices(bytes[],bytes[],string[])\\\":{\\\"notice\\\":\\\"Post open oracle reporter prices, and recalculate stored price by comparing to anchor\\\"},\\\"price(string)\\\":{\\\"notice\\\":\\\"Get the official price for a symbol\\\"},\\\"priceData()\\\":{\\\"notice\\\":\\\"The Open Oracle Price Data contract\\\"},\\\"priceTimestamps(bytes32)\\\":{\\\"notice\\\":\\\"Official price timestamps by symbol hash\\\"},\\\"prices(bytes32)\\\":{\\\"notice\\\":\\\"Official prices by symbol hash\\\"},\\\"reporter()\\\":{\\\"notice\\\":\\\"The Open Oracle Reporter\\\"},\\\"reporterInvalidated()\\\":{\\\"notice\\\":\\\"Circuit breaker for using anchor price oracle directly, ignoring reporter\\\"},\\\"source(bytes,bytes)\\\":{\\\"notice\\\":\\\"Recovers the source address which signed a message\\\"},\\\"upperBoundAnchorRatio()\\\":{\\\"notice\\\":\\\"The highest ratio of the new price to the anchor price that will still trigger the price to be updated\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapAnchoredView.sol\\\":\\\"UniswapAnchoredView\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/OpenOracleData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\npragma experimental ABIEncoderV2;\\\\n\\\\n/**\\\\n * @title The Open Oracle Data Base Contract\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOracleData {\\\\n    /**\\\\n     * @notice The event emitted when a source writes to its storage\\\\n     */\\\\n    //event Write(address indexed source, <Key> indexed key, string kind, uint64 timestamp, <Value> value);\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    //function put(bytes calldata message, bytes calldata signature) external returns (<Key> memory);\\\\n\\\\n    /**\\\\n     * @notice Read a single key with a pre-defined type signature from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the encoded value (defaults to (0, 0x))\\\\n     */\\\\n    //function get(address source, <Key> key) external view returns (uint, <Value>);\\\\n\\\\n    /**\\\\n     * @notice Recovers the source address which signed a message\\\\n     * @dev Comparing to a claimed address would add nothing,\\\\n     *  as the caller could simply perform the recover and claim that address.\\\\n     * @param message The data that was presumably signed\\\\n     * @param signature The fingerprint of the data + private key\\\\n     * @return The source address which signed the message, presumably\\\\n     */\\\\n    function source(bytes memory message, bytes memory signature) public pure returns (address) {\\\\n        (bytes32 r, bytes32 s, uint8 v) = abi.decode(signature, (bytes32, bytes32, uint8));\\\\n        bytes32 hash = keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", keccak256(message)));\\\\n        return ecrecover(hash, v, r, s);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xce1c5e0af5d2642d2b35559b5ca24c1ad0bcf08ffb7dfd92b0f2121b5b3d4faa\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/OpenOraclePriceData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\n\\\\nimport \\\\\\\"./OpenOracleData.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The Open Oracle Price Data Contract\\\\n * @notice Values stored in this contract should represent a USD price with 6 decimals precision\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOraclePriceData is OpenOracleData {\\\\n    ///@notice The event emitted when a source writes to its storage\\\\n    event Write(address indexed source, string key, uint64 timestamp, uint64 value);\\\\n    ///@notice The event emitted when the timestamp on a price is invalid and it is not written to storage\\\\n    event NotWritten(uint64 priorTimestamp, uint256 messageTimestamp, uint256 blockTimestamp);\\\\n\\\\n    ///@notice The fundamental unit of storage for a reporter source\\\\n    struct Datum {\\\\n        uint64 timestamp;\\\\n        uint64 value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The most recent authenticated data from all sources.\\\\n     *  This is private because dynamic mapping keys preclude auto-generated getters.\\\\n     */\\\\n    mapping(address => mapping(string => Datum)) private data;\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    function put(bytes calldata message, bytes calldata signature) external returns (string memory) {\\\\n        (address source, uint64 timestamp, string memory key, uint64 value) = decodeMessage(message, signature);\\\\n        return putInternal(source, timestamp, key, value);\\\\n    }\\\\n\\\\n    function putInternal(address source, uint64 timestamp, string memory key, uint64 value) internal returns (string memory) {\\\\n        // Only update if newer than stored, according to source\\\\n        Datum storage prior = data[source][key];\\\\n        if (timestamp > prior.timestamp && timestamp < block.timestamp + 60 minutes && source != address(0)) {\\\\n            data[source][key] = Datum(timestamp, value);\\\\n            emit Write(source, key, timestamp, value);\\\\n        } else {\\\\n            emit NotWritten(prior.timestamp, timestamp, block.timestamp);\\\\n        }\\\\n        return key;\\\\n    }\\\\n\\\\n    function decodeMessage(bytes calldata message, bytes calldata signature) internal pure returns (address, uint64, string memory, uint64) {\\\\n        // Recover the source address\\\\n        address source = source(message, signature);\\\\n\\\\n        // Decode the message and check the kind\\\\n        (string memory kind, uint64 timestamp, string memory key, uint64 value) = abi.decode(message, (string, uint64, string, uint64));\\\\n        require(keccak256(abi.encodePacked(kind)) == keccak256(abi.encodePacked(\\\\\\\"prices\\\\\\\")), \\\\\\\"Kind of data must be 'prices'\\\\\\\");\\\\n        return (source, timestamp, key, value);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Read a single key from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the price value (defaults to (0, 0))\\\\n     */\\\\n    function get(address source, string calldata key) external view returns (uint64, uint64) {\\\\n        Datum storage datum = data[source][key];\\\\n        return (datum.timestamp, datum.value);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Read only the value for a single key from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The price value (defaults to 0)\\\\n     */\\\\n    function getPrice(address source, string calldata key) external view returns (uint64) {\\\\n        return data[source][key].value;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16fa7df6cfce0bad70407ef8000b09d8468777a3453f30425ea553117abef4c6\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapAnchoredView.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport \\\\\\\"../OpenOraclePriceData.sol\\\\\\\";\\\\r\\\\nimport \\\\\\\"./UniswapConfig.sol\\\\\\\";\\\\r\\\\nimport \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\nstruct Observation {\\\\r\\\\n    uint timestamp;\\\\r\\\\n    uint acc;\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ncontract UniswapAnchoredView is UniswapConfig {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n    \\\\r\\\\n    /// @notice Constant indicating that this contract is a UniswapAnchoredView\\\\r\\\\n    bool public constant IS_UNISWAP_ANCHORED_VIEW = true;\\\\r\\\\n\\\\r\\\\n    /// @notice The Open Oracle Price Data contract\\\\r\\\\n    OpenOraclePriceData public immutable priceData;\\\\r\\\\n\\\\r\\\\n    /// @notice The number of wei in 1 ETH\\\\r\\\\n    uint public constant ethBaseUnit = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice A common scaling factor to maintain precision\\\\r\\\\n    uint public constant expScale = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice The Open Oracle Reporter\\\\r\\\\n    address public immutable reporter;\\\\r\\\\n\\\\r\\\\n    /// @notice The highest ratio of the new price to the anchor price that will still trigger the price to be updated\\\\r\\\\n    uint public immutable upperBoundAnchorRatio;\\\\r\\\\n\\\\r\\\\n    /// @notice The lowest ratio of the new price to the anchor price that will still trigger the price to be updated\\\\r\\\\n    uint public immutable lowerBoundAnchorRatio;\\\\r\\\\n\\\\r\\\\n    /// @notice The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced\\\\r\\\\n    uint public immutable anchorPeriod;\\\\r\\\\n\\\\r\\\\n    /// @notice Official prices by symbol hash\\\\r\\\\n    mapping(bytes32 => uint) public prices;\\\\r\\\\n\\\\r\\\\n    /// @notice Official price timestamps by symbol hash\\\\r\\\\n    mapping(bytes32 => uint) public priceTimestamps;\\\\r\\\\n\\\\r\\\\n    /// @notice Circuit breaker for using anchor price oracle directly, ignoring reporter\\\\r\\\\n    bool public reporterInvalidated;\\\\r\\\\n\\\\r\\\\n    /// @notice The old observation for each symbolHash\\\\r\\\\n    mapping(bytes32 => Observation) public oldObservations;\\\\r\\\\n\\\\r\\\\n    /// @notice The new observation for each symbolHash\\\\r\\\\n    mapping(bytes32 => Observation) public newObservations;\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when new prices are posted but the stored price is not updated due to the anchor\\\\r\\\\n    event PriceGuarded(string symbol, uint reporter, uint anchor);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when the stored price is updated\\\\r\\\\n    event PriceUpdated(string symbol, uint price);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when anchor price is updated\\\\r\\\\n    event AnchorPriceUpdated(string symbol, uint anchorPrice, uint oldTimestamp, uint newTimestamp);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when the uniswap window changes\\\\r\\\\n    event UniswapWindowUpdated(bytes32 indexed symbolHash, uint oldTimestamp, uint newTimestamp, uint oldPrice, uint newPrice);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when reporter invalidates itself\\\\r\\\\n    event ReporterInvalidated(address reporter);\\\\r\\\\n\\\\r\\\\n    bytes32 constant ethHash = keccak256(abi.encodePacked(\\\\\\\"ETH\\\\\\\"));\\\\r\\\\n    bytes32 constant btcSymbolHash = keccak256(abi.encodePacked(\\\\\\\"BTC\\\\\\\"));\\\\r\\\\n    bytes32 constant wbtcSymbolHash = keccak256(abi.encodePacked(\\\\\\\"WBTC\\\\\\\"));\\\\r\\\\n    bytes32 constant rotateHash = keccak256(abi.encodePacked(\\\\\\\"rotate\\\\\\\"));\\\\r\\\\n\\\\r\\\\n    /// @dev Maps symbol hashes to token config indexes\\\\r\\\\n    mapping(bytes32 => uint256) internal _configIndexesBySymbolHash;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps symbol hashes to booleans indicating if they have token configs\\\\r\\\\n    mapping(bytes32 => bool) internal _configPresenceBySymbolHash;\\\\r\\\\n\\\\r\\\\n    /// @dev Boolean indicating if Uniswap anchors are verified\\\\r\\\\n    bool public isSecure;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct a uniswap anchored view for a set of token configurations\\\\r\\\\n     * @dev Note that to avoid immature TWAPs, the system must run for at least a single anchorPeriod before using.\\\\r\\\\n     * @param priceData_ The OpenOraclePriceData contract to use\\\\r\\\\n     * @param reporter_ The reporter whose prices are to be used\\\\r\\\\n     * @param anchorToleranceMantissa_ The percentage tolerance that the reporter may deviate from the uniswap anchor\\\\r\\\\n     * @param anchorPeriod_ The minimum amount of time required for the old uniswap price accumulator to be replaced\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\r\\\\n     */\\\\r\\\\n    constructor(OpenOraclePriceData priceData_,\\\\r\\\\n                address reporter_,\\\\r\\\\n                uint anchorToleranceMantissa_,\\\\r\\\\n                uint anchorPeriod_,\\\\r\\\\n                TokenConfig[] memory configs,\\\\r\\\\n                bool _canAdminOverwrite,\\\\r\\\\n                bool _isSecure,\\\\r\\\\n                uint256 _maxSecondsBeforePriceIsStale) UniswapConfig(configs, _canAdminOverwrite, _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        priceData = priceData_;\\\\r\\\\n        reporter = reporter_;\\\\r\\\\n        anchorPeriod = anchorPeriod_;\\\\r\\\\n        isSecure = _isSecure;\\\\r\\\\n\\\\r\\\\n        // Allow the tolerance to be whatever the deployer chooses, but prevent under/overflow (and prices from being 0)\\\\r\\\\n        upperBoundAnchorRatio = anchorToleranceMantissa_ > uint(-1) - 100e16 ? uint(-1) : 100e16 + anchorToleranceMantissa_;\\\\r\\\\n        lowerBoundAnchorRatio = anchorToleranceMantissa_ < 100e16 ? 100e16 - anchorToleranceMantissa_ : 1;\\\\r\\\\n\\\\r\\\\n        // If secure, require !canAdminOverwrite and checkTokenConfigs\\\\r\\\\n        if (isSecure) {\\\\r\\\\n            require(!canAdminOverwrite, \\\\\\\"canAdminOverwrite must be set to false for secure UniswapView contracts.\\\\\\\");\\\\r\\\\n            checkTokenConfigs(configs);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        // Initialize token configs\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev UniswapV2Factory contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private UNISWAP_V2_FACTORY_ADDRESS = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;\\\\r\\\\n    \\\\r\\\\n    /**\\\\r\\\\n     * @dev WETH contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Verifies token configs\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     */\\\\r\\\\n    function checkTokenConfigs(TokenConfig[] memory configs) internal view {\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // Check symbolHash for ETH\\\\r\\\\n            if (configs[i].symbolHash != ethHash) {\\\\r\\\\n                require(configs[i].uniswapMarket == 0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc, \\\\\\\"Incorrect Uniswap market for ETH: must be USDC-ETH.\\\\\\\");\\\\r\\\\n                require(!configs[i].isUniswapReversed, \\\\\\\"Incorrect Uniswap market reversal for ETH: must be USDC-ETH (not reversed).\\\\\\\");\\\\r\\\\n                require(configs[i].underlying == address(0), \\\\\\\"Underlying token address must be the zero address for ETH.\\\\\\\");\\\\r\\\\n                require(configs[i].fixedPrice == 0, \\\\\\\"ETH token config fixed price must be 0.\\\\\\\");\\\\r\\\\n                require(configs[i].baseUnit == ethBaseUnit, \\\\\\\"ETH token config base unit must be 1e18.\\\\\\\");\\\\r\\\\n                continue;\\\\r\\\\n            }\\\\r\\\\n\\\\r\\\\n            // Check symbolHash against underlying symbol (with exception for WBTC/BTC)\\\\r\\\\n            bytes32 realSymbolHash = keccak256(abi.encodePacked(IERC20(configs[i].underlying).symbol()));\\\\r\\\\n            require(realSymbolHash == configs[i].symbolHash || (realSymbolHash == wbtcSymbolHash && configs[i].symbolHash == btcSymbolHash), \\\\\\\"Symbol mismatch between token config and ERC20 symbol method.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check baseUnit against underlying decimals\\\\r\\\\n            require(10 ** uint256(IERC20(configs[i].underlying).decimals()) == configs[i].baseUnit, \\\\\\\"Incorrect token config base unit.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check for WETH\\\\r\\\\n            if (configs[i].underlying == WETH_ADDRESS) {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.FIXED_ETH, \\\\\\\"Invalid WETH token config price source: must be FIXED_ETH.\\\\\\\");\\\\r\\\\n                \\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 1e18, \\\\\\\"WETH token config fixed price must be 1e18.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                require(configs[i].uniswapMarket == address(0), \\\\\\\"WETH Uniswap market not necessary.\\\\\\\");\\\\r\\\\n                configs[i].isUniswapReversed = false;\\\\r\\\\n            } else {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.REPORTER, \\\\\\\"Invalid token config price source: must be REPORTER.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 0, \\\\\\\"Token config fixed price must be 0.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(UNISWAP_V2_FACTORY_ADDRESS, configs[i].underlying, WETH_ADDRESS));\\\\r\\\\n                require(configs[i].uniswapMarket == address(pair), \\\\\\\"Token config Uniswap market is not correct.\\\\\\\");\\\\r\\\\n                address token0 = pair.token0();\\\\r\\\\n                require((token0 == configs[i].underlying && !configs[i].isUniswapReversed) || (token0 != configs[i].underlying && configs[i].isUniswapReversed), \\\\\\\"Token config Uniswap reversal is incorrect.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Initialize token configs\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function initConfigs(TokenConfig[] memory configs) internal {\\\\r\\\\n        for (uint i = 0; i < configs.length; i++) {\\\\r\\\\n            TokenConfig memory config = configs[i];\\\\r\\\\n            require(config.baseUnit > 0, \\\\\\\"baseUnit must be greater than zero\\\\\\\");\\\\r\\\\n            address uniswapMarket = config.uniswapMarket;\\\\r\\\\n            if (config.priceSource == PriceSource.REPORTER) {\\\\r\\\\n                require(uniswapMarket != address(0), \\\\\\\"reported prices must have an anchor\\\\\\\");\\\\r\\\\n                bytes32 symbolHash = config.symbolHash;\\\\r\\\\n                uint cumulativePrice = currentCumulativePrice(config);\\\\r\\\\n                oldObservations[symbolHash].timestamp = block.timestamp;\\\\r\\\\n                newObservations[symbolHash].timestamp = block.timestamp;\\\\r\\\\n                oldObservations[symbolHash].acc = cumulativePrice;\\\\r\\\\n                newObservations[symbolHash].acc = cumulativePrice;\\\\r\\\\n                emit UniswapWindowUpdated(symbolHash, block.timestamp, block.timestamp, cumulativePrice, cumulativePrice);\\\\r\\\\n            } else {\\\\r\\\\n                require(uniswapMarket == address(0), \\\\\\\"only reported prices utilize an anchor\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Internal function to add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function _add(TokenConfig[] memory configs) internal override {\\\\r\\\\n        // For each config\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // If !canAdminOverwrite, check for existing configs\\\\r\\\\n            if (!canAdminOverwrite) {\\\\r\\\\n                require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\r\\\\n                require(!_configPresenceBySymbolHash[configs[i].symbolHash], \\\\\\\"Token config already exists for this symbol hash.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n\\\\r\\\\n            // Add config to state\\\\r\\\\n            _configs.push(configs[i]);\\\\r\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\r\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\r\\\\n            _configIndexesBySymbolHash[configs[i].symbolHash] = _configs.length - 1;\\\\r\\\\n            _configPresenceBySymbolHash[configs[i].symbolHash] = true;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function add(TokenConfig[] memory configs) external {\\\\r\\\\n        // Check msg.sender == admin\\\\r\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n\\\\r\\\\n        // Add and init token configs\\\\r\\\\n        _add(configs);\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the official price for a symbol\\\\r\\\\n     * @param symbol The symbol to fetch the price of\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals\\\\r\\\\n     */\\\\r\\\\n    function price(string memory symbol) external view returns (uint) {\\\\r\\\\n        TokenConfig memory config = getTokenConfigBySymbol(symbol);\\\\r\\\\n        return priceInternal(config);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function priceInternal(TokenConfig memory config) internal view returns (uint) {\\\\r\\\\n        if (config.symbolHash == ethHash) return ethBaseUnit;\\\\r\\\\n        if (config.priceSource == PriceSource.REPORTER) {\\\\r\\\\n            // Prices are stored in terms of USD so we use the ETH/USD price to convert to ETH\\\\r\\\\n            uint usdPerEth = prices[ethHash];\\\\r\\\\n            require(usdPerEth > 0, \\\\\\\"ETH price not set, cannot convert from USD to ETH\\\\\\\");\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= priceTimestamps[ethHash] + maxSecondsBeforePriceIsStale, \\\\\\\"ETH TWAP price is stale; cannot convert from USD to ETH.\\\\\\\");\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= priceTimestamps[config.symbolHash] + maxSecondsBeforePriceIsStale, \\\\\\\"TWAP price is stale.\\\\\\\");\\\\r\\\\n            return mul(prices[config.symbolHash], ethBaseUnit) / usdPerEth; // usdPrice * 1e18 / usdPerEth = ethPrice\\\\r\\\\n        }\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_USD) {\\\\r\\\\n            uint usdPerEth = prices[ethHash];\\\\r\\\\n            require(usdPerEth > 0, \\\\\\\"ETH price not set, cannot convert from USD to ETH\\\\\\\");\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= priceTimestamps[ethHash] + maxSecondsBeforePriceIsStale, \\\\\\\"ETH TWAP price is stale; cannot convert from USD to ETH.\\\\\\\");\\\\r\\\\n            return mul(config.fixedPrice, ethBaseUnit) / usdPerEth; // usdPrice * 1e18 / usdPerEth = ethPrice\\\\r\\\\n        }\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_ETH) return config.fixedPrice;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the underlying price of a cToken\\\\r\\\\n     * @dev Implements the PriceOracle interface for Compound v2.\\\\r\\\\n     * @param cToken The cToken address for price retrieval\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals, for the given cToken address\\\\r\\\\n     */\\\\r\\\\n    function getUnderlyingPrice(address cToken) external view returns (uint) {\\\\r\\\\n        if (CToken(cToken).isCEther()) return ethBaseUnit;\\\\r\\\\n        TokenConfig memory config = getTokenConfigByCToken(cToken);\\\\r\\\\n         // Comptroller needs prices in the format: ${raw price} * 1e(36 - baseUnit)\\\\r\\\\n         // Since the prices in this view have 18 decimals, we must scale them by 1e(36 - 18 - baseUnit)\\\\r\\\\n        return mul(1e18, priceInternal(config)) / config.baseUnit;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Post open oracle reporter prices, and recalculate stored price by comparing to anchor\\\\r\\\\n     * @dev We let anyone pay to post anything, but only prices from configured reporter will be stored in the view.\\\\r\\\\n     * @param messages The messages to post to the oracle\\\\r\\\\n     * @param signatures The signatures for the corresponding messages\\\\r\\\\n     * @param symbols The symbols to compare to anchor for authoritative reading\\\\r\\\\n     */\\\\r\\\\n    function postPrices(bytes[] calldata messages, bytes[] calldata signatures, string[] calldata symbols) external {\\\\r\\\\n        require(messages.length == signatures.length, \\\\\\\"messages and signatures must be 1:1\\\\\\\");\\\\r\\\\n\\\\r\\\\n        // Save the prices\\\\r\\\\n        for (uint i = 0; i < messages.length; i++) {\\\\r\\\\n            priceData.put(messages[i], signatures[i]);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        uint ethPrice = fetchEthPrice();\\\\r\\\\n\\\\r\\\\n        // Try to update the view storage\\\\r\\\\n        for (uint i = 0; i < symbols.length; i++) {\\\\r\\\\n            postPriceInternal(symbols[i], ethPrice);\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function postPriceInternal(string memory symbol, uint ethPrice) internal {\\\\r\\\\n        TokenConfig memory config = getTokenConfigBySymbol(symbol);\\\\r\\\\n        require(config.priceSource == PriceSource.REPORTER, \\\\\\\"only reporter prices get posted\\\\\\\");\\\\r\\\\n\\\\r\\\\n        bytes32 symbolHash = keccak256(abi.encodePacked(symbol));\\\\r\\\\n        (uint reporterPrice, uint reporterTimestamp) = priceData.get(reporter, symbol);\\\\r\\\\n        uint anchorPrice;\\\\r\\\\n        if (symbolHash == ethHash) {\\\\r\\\\n            anchorPrice = ethPrice;\\\\r\\\\n        } else {\\\\r\\\\n            anchorPrice = fetchAnchorPrice(symbol, config, ethPrice);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        if (reporterInvalidated) {\\\\r\\\\n            prices[symbolHash] = anchorPrice;\\\\r\\\\n            priceTimestamps[symbolHash] = (oldObservations[symbolHash].timestamp + newObservations[symbolHash].timestamp) / 2;\\\\r\\\\n            emit PriceUpdated(symbol, anchorPrice);\\\\r\\\\n        } else if (isWithinAnchor(reporterPrice, anchorPrice)) {\\\\r\\\\n            prices[symbolHash] = reporterPrice;\\\\r\\\\n            priceTimestamps[symbolHash] = reporterTimestamp;\\\\r\\\\n            emit PriceUpdated(symbol, reporterPrice);\\\\r\\\\n        } else {\\\\r\\\\n            emit PriceGuarded(symbol, reporterPrice, anchorPrice);\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function isWithinAnchor(uint reporterPrice, uint anchorPrice) internal view returns (bool) {\\\\r\\\\n        if (reporterPrice > 0) {\\\\r\\\\n            uint anchorRatio = mul(anchorPrice, 100e16) / reporterPrice;\\\\r\\\\n            return anchorRatio <= upperBoundAnchorRatio && anchorRatio >= lowerBoundAnchorRatio;\\\\r\\\\n        }\\\\r\\\\n        return false;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current token/ETH price accumulator from Uniswap.\\\\r\\\\n     */\\\\r\\\\n    function currentCumulativePrice(TokenConfig memory config) internal view returns (uint) {\\\\r\\\\n        (uint cumulativePrice0, uint cumulativePrice1,) = UniswapV2OracleLibrary.currentCumulativePrices(config.uniswapMarket);\\\\r\\\\n        return config.isUniswapReversed ? cumulativePrice1 : cumulativePrice0;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current eth/usd price from uniswap, with 6 decimals of precision.\\\\r\\\\n     *  Conversion factor is 1e18 for eth/usdc market, since we decode uniswap price statically with 18 decimals.\\\\r\\\\n     */\\\\r\\\\n    function fetchEthPrice() internal returns (uint) {\\\\r\\\\n        return fetchAnchorPrice(\\\\\\\"ETH\\\\\\\", getTokenConfigBySymbolHash(ethHash), ethBaseUnit);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current token/usd price from uniswap, with 6 decimals of precision.\\\\r\\\\n     * @param conversionFactor 1e18 if seeking the ETH price, and a 6 decimal ETH-USDC price in the case of other assets\\\\r\\\\n     */\\\\r\\\\n    function fetchAnchorPrice(string memory symbol, TokenConfig memory config, uint conversionFactor) internal virtual returns (uint) {\\\\r\\\\n        (uint nowCumulativePrice, uint oldCumulativePrice, uint oldTimestamp) = pokeWindowValues(config);\\\\r\\\\n\\\\r\\\\n        // This should be impossible, but better safe than sorry\\\\r\\\\n        require(block.timestamp > oldTimestamp, \\\\\\\"now must come after before\\\\\\\");\\\\r\\\\n        uint timeElapsed = block.timestamp - oldTimestamp;\\\\r\\\\n\\\\r\\\\n        // Calculate uniswap time-weighted average price\\\\r\\\\n        // Underflow is a property of the accumulators: https://uniswap.org/audit.html#orgc9b3190\\\\r\\\\n        FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112(uint224((nowCumulativePrice - oldCumulativePrice) / timeElapsed));\\\\r\\\\n        uint rawUniswapPriceMantissa = priceAverage.decode112with18();\\\\r\\\\n        uint unscaledPriceMantissa = mul(rawUniswapPriceMantissa, conversionFactor);\\\\r\\\\n        uint anchorPrice;\\\\r\\\\n\\\\r\\\\n        // Adjust rawUniswapPrice according to the units of the non-ETH asset\\\\r\\\\n        // In the case of ETH, we would have to scale by 1e6 / USDC_UNITS, but since baseUnit2 is 1e6 (USDC), it cancels\\\\r\\\\n\\\\r\\\\n        // In the case of non-ETH tokens\\\\r\\\\n        // a. pokeWindowValues already handled uniswap reversed cases, so priceAverage will always be Token/ETH TWAP price.\\\\r\\\\n        // b. conversionFactor = ETH price * 1e6\\\\r\\\\n        // unscaledPriceMantissa = priceAverage(token/ETH TWAP price) * expScale * conversionFactor\\\\r\\\\n        // so ->\\\\r\\\\n        // anchorPrice = priceAverage * tokenBaseUnit / ethBaseUnit * ETH_price * 1e6\\\\r\\\\n        //             = priceAverage * conversionFactor * tokenBaseUnit / ethBaseUnit\\\\r\\\\n        //             = unscaledPriceMantissa / expScale * tokenBaseUnit / ethBaseUnit\\\\r\\\\n        anchorPrice = mul(unscaledPriceMantissa, config.baseUnit) / ethBaseUnit / expScale;\\\\r\\\\n\\\\r\\\\n        emit AnchorPriceUpdated(symbol, anchorPrice, oldTimestamp, block.timestamp);\\\\r\\\\n\\\\r\\\\n        return anchorPrice;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Get time-weighted average prices for a token at the current timestamp.\\\\r\\\\n     *  Update new and old observations of lagging window if period elapsed.\\\\r\\\\n     */\\\\r\\\\n    function pokeWindowValues(TokenConfig memory config) internal returns (uint, uint, uint) {\\\\r\\\\n        bytes32 symbolHash = config.symbolHash;\\\\r\\\\n        uint cumulativePrice = currentCumulativePrice(config);\\\\r\\\\n\\\\r\\\\n        Observation memory newObservation = newObservations[symbolHash];\\\\r\\\\n\\\\r\\\\n        // Update new and old observations if elapsed time is greater than or equal to anchor period\\\\r\\\\n        uint timeElapsed = block.timestamp - newObservation.timestamp;\\\\r\\\\n        if (timeElapsed >= anchorPeriod) {\\\\r\\\\n            oldObservations[symbolHash].timestamp = newObservation.timestamp;\\\\r\\\\n            oldObservations[symbolHash].acc = newObservation.acc;\\\\r\\\\n\\\\r\\\\n            newObservations[symbolHash].timestamp = block.timestamp;\\\\r\\\\n            newObservations[symbolHash].acc = cumulativePrice;\\\\r\\\\n            emit UniswapWindowUpdated(config.symbolHash, newObservation.timestamp, block.timestamp, newObservation.acc, cumulativePrice);\\\\r\\\\n        }\\\\r\\\\n        return (cumulativePrice, oldObservations[symbolHash].acc, oldObservations[symbolHash].timestamp);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Invalidate the reporter, and fall back to using anchor directly in all cases\\\\r\\\\n     * @dev Only the reporter may sign a message which allows it to invalidate itself.\\\\r\\\\n     *  To be used in cases of emergency, if the reporter thinks their key may be compromised.\\\\r\\\\n     * @param message The data that was presumably signed\\\\r\\\\n     * @param signature The fingerprint of the data + private key\\\\r\\\\n     */\\\\r\\\\n    function invalidateReporter(bytes memory message, bytes memory signature) external {\\\\r\\\\n        (string memory decodedMessage, ) = abi.decode(message, (string, address));\\\\r\\\\n        require(keccak256(abi.encodePacked(decodedMessage)) == rotateHash, \\\\\\\"invalid message must be 'rotate'\\\\\\\");\\\\r\\\\n        require(source(message, signature) == reporter, \\\\\\\"invalidation message must come from the reporter\\\\\\\");\\\\r\\\\n        reporterInvalidated = true;\\\\r\\\\n        emit ReporterInvalidated(reporter);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Recovers the source address which signed a message\\\\r\\\\n     * @dev Comparing to a claimed address would add nothing,\\\\r\\\\n     *  as the caller could simply perform the recover and claim that address.\\\\r\\\\n     * @param message The data that was presumably signed\\\\r\\\\n     * @param signature The fingerprint of the data + private key\\\\r\\\\n     * @return The source address which signed the message, presumably\\\\r\\\\n     */\\\\r\\\\n    function source(bytes memory message, bytes memory signature) public pure returns (address) {\\\\r\\\\n        (bytes32 r, bytes32 s, uint8 v) = abi.decode(signature, (bytes32, bytes32, uint8));\\\\r\\\\n        bytes32 hash = keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", keccak256(message)));\\\\r\\\\n        return ecrecover(hash, v, r, s);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Overflow proof multiplication\\\\r\\\\n    function mul(uint a, uint b) internal pure returns (uint) {\\\\r\\\\n        if (a == 0) return 0;\\\\r\\\\n        uint c = a * b;\\\\r\\\\n        require(c / a == b, \\\\\\\"multiplication overflow\\\\\\\");\\\\r\\\\n        return c;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function getSymbolHashIndex(bytes32 symbolHash) internal view returns (uint) {\\\\r\\\\n        return _configPresenceBySymbolHash[symbolHash] ? _configIndexesBySymbolHash[symbolHash] : uint(-1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for symbol\\\\r\\\\n     * @param symbol The symbol of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigBySymbol(string memory symbol) public view returns (TokenConfig memory) {\\\\r\\\\n        return getTokenConfigBySymbolHash(keccak256(abi.encodePacked(symbol)));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for the symbolHash\\\\r\\\\n     * @param symbolHash The keccack256 of the symbol of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigBySymbolHash(bytes32 symbolHash) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getSymbolHashIndex(symbolHash);\\\\r\\\\n        if (index != uint(-1)) {\\\\r\\\\n            return getTokenConfig(index);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x9503690ab310b41f324a347db1b37ecb3f08fd0d463d51c87af83c64a46aff4f\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapConfig.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport { CToken, CErc20 } from \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\ncontract UniswapConfig {\\\\r\\\\n    /// @dev Describe how to interpret the fixedPrice in the TokenConfig.\\\\r\\\\n    enum PriceSource {\\\\r\\\\n        FIXED_ETH, /// implies the fixedPrice is a constant multiple of the ETH price (which varies)\\\\r\\\\n        FIXED_USD, /// implies the fixedPrice is a constant multiple of the USD price (which is 1)\\\\r\\\\n        REPORTER,  /// implies the price is set by the reporter (only available on UniswapAnchoredView)\\\\r\\\\n        TWAP,      /// implies the price is set by TWAPs (only available on UniswapView)\\\\r\\\\n        UNISWAP    /// implies the price is set by the direct Uniswap price (only available on UniswapDirectView)\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Describe how the USD price should be determined for an asset.\\\\r\\\\n    ///  There should be 1 TokenConfig object for each supported asset, passed in the constructor.\\\\r\\\\n    struct TokenConfig {\\\\r\\\\n        address underlying;\\\\r\\\\n        bytes32 symbolHash;\\\\r\\\\n        uint256 baseUnit;\\\\r\\\\n        PriceSource priceSource;\\\\r\\\\n        uint256 fixedPrice;\\\\r\\\\n        address uniswapMarket;\\\\r\\\\n        bool isUniswapReversed;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Token config objects\\\\r\\\\n    TokenConfig[] internal _configs;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to token config indexes\\\\r\\\\n    mapping(address => uint256) internal _configIndexesByUnderlying;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to booleans indicating if they have token configs\\\\r\\\\n    mapping(address => bool) internal _configPresenceByUnderlying;\\\\r\\\\n    \\\\r\\\\n    /// @notice Admin address\\\\r\\\\n    address public admin;\\\\r\\\\n    \\\\r\\\\n    /// @notice Whether or not existing token configs can be overwritten\\\\r\\\\n    bool public canAdminOverwrite;\\\\r\\\\n\\\\r\\\\n    /// @notice The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n    uint256 public maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct an immutable store of configs into the contract data\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\r\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n     */\\\\r\\\\n    constructor(TokenConfig[] memory configs, bool _canAdminOverwrite, uint256 _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        admin = msg.sender;\\\\r\\\\n        canAdminOverwrite = _canAdminOverwrite;\\\\r\\\\n        maxSecondsBeforePriceIsStale = _maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n        // Add configs\\\\r\\\\n        _add(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Internal function to add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function _add(TokenConfig[] memory configs) internal virtual {\\\\r\\\\n        // For each config\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // If !canAdminOverwrite, check for existing config\\\\r\\\\n            if (!canAdminOverwrite) require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Add config to state\\\\r\\\\n            _configs.push(configs[i]);\\\\r\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\r\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice Changes the admin\\\\r\\\\n    function changeAdmin(address newAdmin) external {\\\\r\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n        admin = newAdmin;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice The number of tokens this contract actually supports\\\\r\\\\n    function numTokens() public view returns (uint256) {\\\\r\\\\n        return _configs.length;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by cToken address\\\\r\\\\n    function getCTokenIndex(address cToken) internal view returns (uint) {\\\\r\\\\n        return getUnderlyingIndex(CToken(cToken).isCEther() ? address(0) : CErc20(cToken).underlying());\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by underlying ERC20 token address\\\\r\\\\n    function getUnderlyingIndex(address underlying) internal view returns (uint) {\\\\r\\\\n        return _configPresenceByUnderlying[underlying] ? _configIndexesByUnderlying[underlying] : uint(-1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the i-th config, according to the order they were passed in originally\\\\r\\\\n     * @param i The index of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfig(uint i) public view returns (TokenConfig memory) {\\\\r\\\\n        require(i < numTokens(), \\\\\\\"token config not found\\\\\\\");\\\\r\\\\n        return _configs[i];\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for the cToken\\\\r\\\\n     * @param cToken The address of the cToken of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByCToken(address cToken) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getCTokenIndex(cToken);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for an underlying asset\\\\r\\\\n     * @param underlying The address of the underlying asset of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByUnderlying(address underlying) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getUnderlyingIndex(underlying);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x5cdbac709449ecaa73d9bc7e628d5e78fcda19a579fce7a8afc5ee62dbf33fa0\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapConfig.sol:UniswapConfig\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"60806040523480156200001157600080fd5b5060405162000add38038062000add833981016040819052620000349162000332565b60038054336001600160a01b03199091161760ff60a01b1916600160a01b841515021790556004819055620000698362000072565b505050620004a4565b60005b81518110156200026d57600354600160a01b900460ff16620000f35760026000838381518110620000a257fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615620000f35760405162461bcd60e51b8152600401620000ea9062000400565b60405180910390fd5b60008282815181106200010257fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff19909116908360048111156200017c57fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b031990941693909317919091169190911790556000805483516000199190910191600191859085908110620001ee57fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600260008484815181106200023157fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162000075565b5050565b80516001600160a01b03811681146200028957600080fd5b92915050565b805180151581146200028957600080fd5b600060e08284031215620002b2578081fd5b620002be60e06200045d565b9050620002cc838362000271565b81526020820151602082015260408201516040820152606082015160058110620002f557600080fd5b606082015260808281015190820152620003138360a0840162000271565b60a0820152620003278360c084016200028f565b60c082015292915050565b60008060006060848603121562000347578283fd5b83516001600160401b038111156200035d578384fd5b8401601f810186136200036e578384fd5b8051620003856200037f8262000484565b6200045d565b808282526020808301925080850160e08b838288028901011115620003a857898afd5b8996505b85871015620003d857620003c18c83620002a0565b8552600196909601959382019390810190620003ac565b5050819750620003eb8a828b016200028f565b96505050505050604084015190509250925092565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b6040518181016001600160401b03811182821017156200047c57600080fd5b604052919050565b60006001600160401b038211156200049a578081fd5b5060209081020190565b61062980620004b46000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638f2839701161005b5780638f283970146100f35780639f59963114610108578063e073a2411461011b578063f851a4401461012357610088565b80634da219421461008d578063656b0fd1146100b65780638a003888146100cb5780638e499bcf146100de575b600080fd5b6100a061009b36600461046d565b610138565b6040516100ad919061056a565b60405180910390f35b6100be61018d565b6040516100ad91906104f8565b6100a06100d93660046104cc565b61019d565b6100e6610276565b6040516100ad91906105d2565b61010661010136600461046d565b61027c565b005b6100a061011636600461046d565b6102c8565b6100e66102db565b61012b6102e1565b6040516100ad91906104e4565b610140610430565b600061014b836102f0565b905060001981146101675761015f8161019d565b915050610188565b60405162461bcd60e51b815260040161017f90610503565b60405180910390fd5b919050565b600354600160a01b900460ff1681565b6101a5610430565b6101ad610276565b82106101cb5760405162461bcd60e51b815260040161017f90610503565b600082815481106101d857fe5b60009182526020918290206040805160e081018252600690930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154909190606083019060ff16600481111561023257fe5b600481111561023d57fe5b8152600482015460208201526005909101546001600160a01b0381166040830152600160a01b900460ff16151560609091015292915050565b60005490565b6003546001600160a01b031633146102a65760405162461bcd60e51b815260040161017f90610533565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6102d0610430565b600061014b83610338565b60045481565b6003546001600160a01b031681565b6001600160a01b03811660009081526002602052604081205460ff1661031857600019610332565b6001600160a01b0382166000908152600160205260409020545b92915050565b6000610332826001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561037657600080fd5b505afa15801561038a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ae91906104ac565b61042857826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156103eb57600080fd5b505afa1580156103ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104239190610490565b61042b565b60005b6102f0565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60006020828403121561047e578081fd5b8135610489816105db565b9392505050565b6000602082840312156104a1578081fd5b8151610489816105db565b6000602082840312156104bd578081fd5b81518015158114610489578182fd5b6000602082840312156104dd578081fd5b5035919050565b6001600160a01b0391909116815260200190565b901515815260200190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526017908201527f6d73672e73656e646572206973206e6f742061646d696e000000000000000000604082015260600190565b81516001600160a01b0390811682526020808401519083015260408084015190830152606083015160e083019190600581106105a257fe5b80606085015250608084015160808401528060a08501511660a08401525060c0830151151560c083015292915050565b90815260200190565b6001600160a01b03811681146105f057600080fd5b5056fea264697066735822122082a79a98a472df950531760888d2fc674c1aad6f20ca74f1c609793408885e4564736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"params\\\":{\\\"_canAdminOverwrite\\\":\\\"Whether or not existing token configs can be overwritten\\\",\\\"_maxSecondsBeforePriceIsStale\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\",\\\"configs\\\":\\\"The configs for the supported assets\\\"}},\\\"getTokenConfig(uint256)\\\":{\\\"params\\\":{\\\"i\\\":\\\"The index of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByCToken(address)\\\":{\\\"params\\\":{\\\"cToken\\\":\\\"The address of the cToken of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The address of the underlying asset of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}}},\\\"stateVariables\\\":{\\\"_configIndexesByUnderlying\\\":{\\\"details\\\":\\\"Maps underlying addresses to token config indexes\\\"},\\\"_configPresenceByUnderlying\\\":{\\\"details\\\":\\\"Maps underlying addresses to booleans indicating if they have token configs\\\"},\\\"_configs\\\":{\\\"details\\\":\\\"Token config objects\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"admin()\\\":{\\\"notice\\\":\\\"Admin address\\\"},\\\"canAdminOverwrite()\\\":{\\\"notice\\\":\\\"Whether or not existing token configs can be overwritten\\\"},\\\"changeAdmin(address)\\\":{\\\"notice\\\":\\\"Changes the admin\\\"},\\\"constructor\\\":\\\"Construct an immutable store of configs into the contract data\\\",\\\"getTokenConfig(uint256)\\\":{\\\"notice\\\":\\\"Get the i-th config, according to the order they were passed in originally\\\"},\\\"getTokenConfigByCToken(address)\\\":{\\\"notice\\\":\\\"Get the config for the cToken\\\"},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"notice\\\":\\\"Get the config for an underlying asset\\\"},\\\"maxSecondsBeforePriceIsStale()\\\":{\\\"notice\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\"},\\\"numTokens()\\\":{\\\"notice\\\":\\\"The number of tokens this contract actually supports\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapConfig.sol\\\":\\\"UniswapConfig\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapConfig.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport { CToken, CErc20 } from \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\ncontract UniswapConfig {\\\\r\\\\n    /// @dev Describe how to interpret the fixedPrice in the TokenConfig.\\\\r\\\\n    enum PriceSource {\\\\r\\\\n        FIXED_ETH, /// implies the fixedPrice is a constant multiple of the ETH price (which varies)\\\\r\\\\n        FIXED_USD, /// implies the fixedPrice is a constant multiple of the USD price (which is 1)\\\\r\\\\n        REPORTER,  /// implies the price is set by the reporter (only available on UniswapAnchoredView)\\\\r\\\\n        TWAP,      /// implies the price is set by TWAPs (only available on UniswapView)\\\\r\\\\n        UNISWAP    /// implies the price is set by the direct Uniswap price (only available on UniswapDirectView)\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Describe how the USD price should be determined for an asset.\\\\r\\\\n    ///  There should be 1 TokenConfig object for each supported asset, passed in the constructor.\\\\r\\\\n    struct TokenConfig {\\\\r\\\\n        address underlying;\\\\r\\\\n        bytes32 symbolHash;\\\\r\\\\n        uint256 baseUnit;\\\\r\\\\n        PriceSource priceSource;\\\\r\\\\n        uint256 fixedPrice;\\\\r\\\\n        address uniswapMarket;\\\\r\\\\n        bool isUniswapReversed;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Token config objects\\\\r\\\\n    TokenConfig[] internal _configs;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to token config indexes\\\\r\\\\n    mapping(address => uint256) internal _configIndexesByUnderlying;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to booleans indicating if they have token configs\\\\r\\\\n    mapping(address => bool) internal _configPresenceByUnderlying;\\\\r\\\\n    \\\\r\\\\n    /// @notice Admin address\\\\r\\\\n    address public admin;\\\\r\\\\n    \\\\r\\\\n    /// @notice Whether or not existing token configs can be overwritten\\\\r\\\\n    bool public canAdminOverwrite;\\\\r\\\\n\\\\r\\\\n    /// @notice The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n    uint256 public maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct an immutable store of configs into the contract data\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\r\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n     */\\\\r\\\\n    constructor(TokenConfig[] memory configs, bool _canAdminOverwrite, uint256 _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        admin = msg.sender;\\\\r\\\\n        canAdminOverwrite = _canAdminOverwrite;\\\\r\\\\n        maxSecondsBeforePriceIsStale = _maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n        // Add configs\\\\r\\\\n        _add(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Internal function to add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function _add(TokenConfig[] memory configs) internal virtual {\\\\r\\\\n        // For each config\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // If !canAdminOverwrite, check for existing config\\\\r\\\\n            if (!canAdminOverwrite) require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Add config to state\\\\r\\\\n            _configs.push(configs[i]);\\\\r\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\r\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice Changes the admin\\\\r\\\\n    function changeAdmin(address newAdmin) external {\\\\r\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n        admin = newAdmin;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice The number of tokens this contract actually supports\\\\r\\\\n    function numTokens() public view returns (uint256) {\\\\r\\\\n        return _configs.length;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by cToken address\\\\r\\\\n    function getCTokenIndex(address cToken) internal view returns (uint) {\\\\r\\\\n        return getUnderlyingIndex(CToken(cToken).isCEther() ? address(0) : CErc20(cToken).underlying());\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by underlying ERC20 token address\\\\r\\\\n    function getUnderlyingIndex(address underlying) internal view returns (uint) {\\\\r\\\\n        return _configPresenceByUnderlying[underlying] ? _configIndexesByUnderlying[underlying] : uint(-1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the i-th config, according to the order they were passed in originally\\\\r\\\\n     * @param i The index of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfig(uint i) public view returns (TokenConfig memory) {\\\\r\\\\n        require(i < numTokens(), \\\\\\\"token config not found\\\\\\\");\\\\r\\\\n        return _configs[i];\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for the cToken\\\\r\\\\n     * @param cToken The address of the cToken of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByCToken(address cToken) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getCTokenIndex(cToken);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for an underlying asset\\\\r\\\\n     * @param underlying The address of the underlying asset of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByUnderlying(address underlying) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getUnderlyingIndex(underlying);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x5cdbac709449ecaa73d9bc7e628d5e78fcda19a579fce7a8afc5ee62dbf33fa0\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapLib.sol:CErc20\": {\n      \"abi\": \"[{\\\"inputs\\\":[],\\\"name\\\":\\\"underlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"underlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":\\\"CErc20\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapLib.sol:CToken\": {\n      \"abi\": \"[{\\\"inputs\\\":[],\\\"name\\\":\\\"isCEther\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"isCEther\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":\\\"CToken\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapLib.sol:FixedPoint\": {\n      \"abi\": \"[]\",\n      \"bin\": \"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a6d42392ec2918d35be7e1d5fd58d5caab334d7ae07208a947105a21e325e60b64736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":\\\"FixedPoint\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapLib.sol:IERC20\": {\n      \"abi\": \"[{\\\"inputs\\\":[],\\\"name\\\":\\\"decimals\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"symbol\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"decimals\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint8\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"symbol\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":\\\"IERC20\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapLib.sol:IUniswapV2Pair\": {\n      \"abi\": \"[{\\\"inputs\\\":[],\\\"name\\\":\\\"getReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve0\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve1\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"blockTimestampLast\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"price0CumulativeLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"price1CumulativeLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"token0\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"getReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve0\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve1\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"blockTimestampLast\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"price0CumulativeLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"price1CumulativeLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"token0\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":\\\"IUniswapV2Pair\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapLib.sol:SafeMath\": {\n      \"abi\": \"[]\",\n      \"bin\": \"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220716a0216726b31cf41c321e15e66bdb986b8cf0d085ab5766e9b689353d4b09164736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":\\\"SafeMath\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapLib.sol:UniswapV2Library\": {\n      \"abi\": \"[]\",\n      \"bin\": \"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202710171e4f8636b5f7d2edf68ed98028699f5e95dd8f0550488d68adb5165afd64736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":\\\"UniswapV2Library\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapLib.sol:UniswapV2OracleLibrary\": {\n      \"abi\": \"[]\",\n      \"bin\": \"60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201e64e58f7f433e19d869562d2d69a0f76635985315a3b84cb8097ee91702f0e364736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":\\\"UniswapV2OracleLibrary\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapSpotView.sol:UniswapSpotView\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_isPublic\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isPublic\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"60806040523480156200001157600080fd5b506040516200322b3803806200322b833981016040819052620000349162000bcf565b60038054336001600160a01b03199091161760ff60a01b1916600160a01b8415150217905560006004819055839083906200006f83620000f0565b50506005805460ff1916831515179081905560ff16159050620000dc57600380546001600160a01b03191690819055600160a01b900460ff1615620000d15760405162461bcd60e51b8152600401620000c89062001139565b60405180910390fd5b620000dc83620002e6565b620000e783620008cd565b505050620013d9565b60005b8151811015620002e257600354600160a01b900460ff166200016857600260008383815181106200012057fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615620001685760405162461bcd60e51b8152600401620000c89062000ff2565b60008282815181106200017757fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115620001f157fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106200026357fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160026000848481518110620002a657fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620000f3565b5050565b60005b8151811015620002e257604051602001620003049062000e07565b604051602081830303815290604052805190602001208282815181106200032757fe5b6020026020010151602001511415620003545760405162461bcd60e51b8152600401620000c89062000e62565b8181815181106200036157fe5b6020026020010151602001518282815181106200037a57fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003bf57600080fd5b505afa158015620003d4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620003fe919081019062000ca7565b60405160200162000410919062000d80565b6040516020818303038152906040528051906020012014620004465760405162461bcd60e51b8152600401620000c89062001091565b8181815181106200045357fe5b6020026020010151604001518282815181106200046c57fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620004b157600080fd5b505afa158015620004c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ec919062000d3b565b60ff16600a0a14620005125760405162461bcd60e51b8152600401620000c890620011ab565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168282815181106200053d57fe5b6020026020010151600001516001600160a01b03161415620006585760008282815181106200056857fe5b60200260200101516060015160048111156200058057fe5b14620005a05760405162461bcd60e51b8152600401620000c890620011ec565b818181518110620005ad57fe5b602002602001015160800151670de0b6b3a764000014620005e25760405162461bcd60e51b8152600401620000c89062001314565b60006001600160a01b0316828281518110620005fa57fe5b602002602001015160a001516001600160a01b0316146200062f5760405162461bcd60e51b8152600401620000c8906200104f565b60008282815181106200063e57fe5b602090810291909101015190151560c090910152620008c4565b60048282815181106200066757fe5b60200260200101516060015160048111156200067f57fe5b146200069f5760405162461bcd60e51b8152600401620000c89062000ecb565b818181518110620006ac57fe5b602002602001015160800151600014620006da5760405162461bcd60e51b8152600401620000c89062000f6a565b600062000734735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8484815181106200070257fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2620009a560201b6200050d1760201c565b9050806001600160a01b03168383815181106200074d57fe5b602002602001015160a001516001600160a01b031614620007825760405162461bcd60e51b8152600401620000c890620010ee565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620007be57600080fd5b505afa158015620007d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f9919062000baa565b90508383815181106200080857fe5b6020026020010151600001516001600160a01b0316816001600160a01b03161480156200084b57508383815181106200083d57fe5b602002602001015160c00151155b80620008a257508383815181106200085f57fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614158015620008a257508383815181106200089557fe5b602002602001015160c001515b620008c15760405162461bcd60e51b8152600401620000c89062001249565b50505b600101620002e9565b60005b8151811015620002e257620008e462000aac565b828281518110620008f157fe5b602002602001015190506000816040015111620009225760405162461bcd60e51b8152600401620000c89062000f28565b60a08101516004826060015160048111156200093a57fe5b141562000970576001600160a01b0381166200096a5760405162461bcd60e51b8152600401620000c890620012cb565b6200099a565b6001600160a01b038116156200099a5760405162461bcd60e51b8152600401620000c89062000e16565b5050600101620008d0565b60008080620009b5858562000a1a565b91509150858282604051602001620009cf92919062000d5e565b60405160208183030381529060405280519060200120604051602001620009f892919062000d9e565b60408051601f1981840301815291905280516020909101209695505050505050565b600080826001600160a01b0316846001600160a01b0316141562000a525760405162461bcd60e51b8152600401620000c89062000fad565b826001600160a01b0316846001600160a01b03161062000a7457828462000a77565b83835b90925090506001600160a01b03821662000aa55760405162461bcd60e51b8152600401620000c89062001294565b9250929050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b80516001600160a01b038116811462000b0157600080fd5b92915050565b8051801515811462000b0157600080fd5b600060e0828403121562000b2a578081fd5b62000b3660e06200135f565b905062000b44838362000ae9565b8152602082015160208201526040820151604082015260608201516005811062000b6d57600080fd5b60608201526080828101519082015262000b8b8360a0840162000ae9565b60a082015262000b9f8360c0840162000b07565b60c082015292915050565b60006020828403121562000bbc578081fd5b62000bc8838362000ae9565b9392505050565b60008060006060848603121562000be4578182fd5b83516001600160401b0381111562000bfa578283fd5b8401601f8101861362000c0b578283fd5b805162000c2262000c1c8262001386565b6200135f565b808282526020808301925080850160e08b83828802890101111562000c45578889fd5b8896505b8587101562000c755762000c5e8c8362000b18565b855260019690960195938201939081019062000c49565b505081975062000c888a828b0162000b07565b9650505050505062000c9e856040860162000b07565b90509250925092565b60006020828403121562000cb9578081fd5b81516001600160401b038082111562000cd0578283fd5b818401915084601f83011262000ce4578283fd5b81518181111562000cf3578384fd5b62000d08601f8201601f19166020016200135f565b915080825285602082850101111562000d1f578384fd5b62000d32816020840160208601620013a6565b50949350505050565b60006020828403121562000d4d578081fd5b815160ff8116811462000bc8578182fd5b6001600160601b0319606093841b811682529190921b16601482015260280190565b6000825162000d94818460208701620013a6565b9190910192915050565b7fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b6020808252602c908201527f6f6e6c7920554e495357415020707269636573207574696c697a65206120556e60408201526b1a5cddd85c081b585c9ad95d60a21b606082015260800190565b60208082526043908201527f45544820646f6573206e6f74206e65656420612070726963652066656564206160408201527f7320616c6c2070726963652066656564732061726520626173656420696e20456060820152622a241760e91b608082015260a00190565b60208082526033908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201527f653a206d75737420626520554e49535741502e00000000000000000000000000606082015260800190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b6020808252604c908201527f63616e41646d696e4f7665727772697465206d7573742062652073657420746f60408201527f2066616c736520666f72207075626c696320556e697377617053706f7456696560608201526b3b9031b7b73a3930b1ba399760a11b608082015260a00190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526029908201527f554e495357415020707269636573206d7573742068617665206120556e697377604082015268185c081b585c9ad95d60ba1b606082015260800190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b6040518181016001600160401b03811182821017156200137e57600080fd5b604052919050565b60006001600160401b038211156200139c578081fd5b5060209081020190565b60005b83811015620013c3578181015183820152602001620013a9565b83811115620013d3576000848401525b50505050565b611e4280620013e96000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638f28397011610097578063dc9a153511610066578063dc9a1535146101be578063e073a241146101c6578063f851a440146101ce578063fc57d4df146101e3576100f5565b80638f283970146101855780639f59963114610198578063aea91078146101ab578063d1b353b414610155576100f5565b8063656b0fd1116100d3578063656b0fd11461014d57806369aa3ac6146101555780638a0038881461016a5780638e499bcf1461017d576100f5565b80632d1c668f146100fa5780633a8521691461010f5780634da219421461012d575b600080fd5b61010d610108366004611383565b6101f6565b005b610117610257565b6040516101249190611624565b60405180910390f35b61014061013b36600461134b565b61025c565b6040516101249190611d0c565b6101176102a8565b61015d6102b8565b6040516101249190611d74565b61014061017836600461152f565b6102c4565b61015d61039d565b61010d61019336600461134b565b6103a3565b6101406101a636600461134b565b6103ef565b61015d6101b936600461134b565b610402565b610117610427565b61015d610430565b6101d6610436565b6040516101249190611610565b61015d6101f136600461134b565b610445565b60055460ff161561020f5761020a8161057d565b610242565b6003546001600160a01b031633146102425760405162461bcd60e51b8152600401610239906118c4565b60405180910390fd5b61024b81610b12565b61025481610cf9565b50565b600181565b61026461126d565b600061026f83610dc0565b9050600019811461028b57610283816102c4565b9150506102a3565b60405162461bcd60e51b81526004016102399061180c565b919050565b600354600160a01b900460ff1681565b670de0b6b3a764000081565b6102cc61126d565b6102d461039d565b82106102f25760405162461bcd60e51b81526004016102399061180c565b600082815481106102ff57fe5b60009182526020918290206040805160e081018252600690930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154909190606083019060ff16600481111561035957fe5b600481111561036457fe5b8152600482015460208201526005909101546001600160a01b0381166040830152600160a01b900460ff16151560609091015292915050565b60005490565b6003546001600160a01b031633146103cd5760405162461bcd60e51b8152600401610239906118c4565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6103f761126d565b600061026f83610e08565b600061040c61126d565b6104158361025c565b905061042081610f00565b9392505050565b60055460ff1681565b60045481565b6003546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561048057600080fd5b505afa158015610494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b89190611433565b156104cc5750670de0b6b3a76400006102a3565b6104d461126d565b6104dd836103ef565b905080604001516104fe670de0b6b3a76400006104f984610f00565b610fb0565b8161050557fe5b049392505050565b600080600061051c8585610fea565b91509150858282604051602001610534929190611568565b6040516020818303038152906040528051906020012060405160200161055b9291906115ab565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b8151811015610b0e5760405160200161059890611601565b604051602081830303815290604052805190602001208282815181106105ba57fe5b60200260200101516020015114156105e45760405162461bcd60e51b81526004016102399061167b565b8181815181106105f057fe5b60200260200101516020015182828151811061060857fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561064c57600080fd5b505afa158015610660573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610688919081019061144f565b604051602001610698919061158f565b60405160208183030381529060405280519060200120146106cb5760405162461bcd60e51b81526004016102399061199a565b8181815181106106d757fe5b6020026020010151604001518282815181106106ef57fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561073357600080fd5b505afa158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190611547565b60ff16600a0a1461078e5760405162461bcd60e51b815260040161023990611a8a565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168282815181106107b857fe5b6020026020010151600001516001600160a01b031614156108c35760008282815181106107e157fe5b60200260200101516060015160048111156107f857fe5b146108155760405162461bcd60e51b815260040161023990611acb565b81818151811061082157fe5b602002602001015160800151670de0b6b3a7640000146108535760405162461bcd60e51b815260040161023990611cc1565b60006001600160a01b031682828151811061086a57fe5b602002602001015160a001516001600160a01b03161461089c5760405162461bcd60e51b815260040161023990611958565b60008282815181106108aa57fe5b602090810291909101015190151560c090910152610b06565b60048282815181106108d157fe5b60200260200101516060015160048111156108e857fe5b146109055760405162461bcd60e51b8152600401610239906116e4565b81818151811061091157fe5b60200260200101516080015160001461093c5760405162461bcd60e51b81526004016102399061183c565b6000610988735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f84848151811061096257fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261050d565b9050806001600160a01b03168383815181106109a057fe5b602002602001015160a001516001600160a01b0316146109d25760405162461bcd60e51b815260040161023990611a3f565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610a0d57600080fd5b505afa158015610a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a459190611367565b9050838381518110610a5357fe5b6020026020010151600001516001600160a01b0316816001600160a01b0316148015610a945750838381518110610a8657fe5b602002602001015160c00151155b80610ae75750838381518110610aa657fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614158015610ae75750838381518110610ada57fe5b602002602001015160c001515b610b035760405162461bcd60e51b815260040161023990611b28565b50505b600101610580565b5050565b60005b8151811015610b0e57600354600160a01b900460ff16610b845760026000838381518110610b3f57fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615610b845760405162461bcd60e51b8152600401610239906118fb565b6000828281518110610b9257fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115610c0b57fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b031990941693909317919091169190911790556000805483516000199190910191600191859085908110610c7c57fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160026000848481518110610cbe57fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101610b15565b60005b8151811015610b0e57610d0d61126d565b828281518110610d1957fe5b602002602001015190506000816040015111610d475760405162461bcd60e51b815260040161023990611765565b60a0810151600482606001516004811115610d5e57fe5b1415610d8f576001600160a01b038116610d8a5760405162461bcd60e51b815260040161023990611c2d565b610db6565b6001600160a01b03811615610db65760405162461bcd60e51b81526004016102399061162f565b5050600101610cfc565b6001600160a01b03811660009081526002602052604081205460ff16610de857600019610e02565b6001600160a01b0382166000908152600160205260409020545b92915050565b6000610e02826001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e4657600080fd5b505afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e9190611433565b610ef857826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610ebb57600080fd5b505afa158015610ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef39190611367565b610efb565b60005b610dc0565b6000600482606001516004811115610f1457fe5b1415610f2a57610f2382611074565b90506102a3565b600182606001516004811115610f3c57fe5b1415610f8d576000610f69610f6473a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4861025c565b611074565b9050620f4240610f7d846080015183610fb0565b81610f8457fe5b049150506102a3565b600082606001516004811115610f9f57fe5b14156102a3575060808101516102a3565b600082610fbf57506000610e02565b82820282848281610fcc57fe5b04146104205760405162461bcd60e51b8152600401610239906117d5565b600080826001600160a01b0316846001600160a01b0316141561101f5760405162461bcd60e51b81526004016102399061187f565b826001600160a01b0316846001600160a01b03161061103f578284611042565b83835b90925090506001600160a01b03821661106d5760405162461bcd60e51b815260040161023990611bf6565b9250929050565b6000806000808460a001516001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156110b757600080fd5b505afa1580156110cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ef91906114db565b92506001600160701b031692506001600160701b031692508063ffffffff16640100000000428161111c57fe5b0663ffffffff1614156111415760405162461bcd60e51b815260040161023990611b73565b61117085604001518660c00151611158578461115a565b835b8760c00151611169578461116b565b855b611179565b95945050505050565b600080841161119a5760405162461bcd60e51b815260040161023990611c76565b6000831180156111aa5750600082115b6111c65760405162461bcd60e51b8152600401610239906119f7565b60006111d4856103e5611213565b905060006111e28285611213565b905060006111fc836111f6886103e8611213565b9061124a565b905080828161120757fe5b04979650505050505050565b600081158061122e5750508082028282828161122b57fe5b04145b610e025760405162461bcd60e51b815260040161023990611737565b80820182811015610e025760405162461bcd60e51b8152600401610239906117a7565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b8035610e0281611dd4565b8035610e0281611de9565b600060e082840312156112d1578081fd5b6112db60e0611d7d565b905081356112e881611dd4565b80825250602082013560208201526040820135604082015260608201356005811061131257600080fd5b60608201526080828101359082015261132e8360a084016112aa565b60a08201526113408360c084016112b5565b60c082015292915050565b60006020828403121561135c578081fd5b813561042081611dd4565b600060208284031215611378578081fd5b815161042081611dd4565b60006020808385031215611395578182fd5b823567ffffffffffffffff808211156113ac578384fd5b818501915085601f8301126113bf578384fd5b8135818111156113cd578485fd5b6113da8485830201611d7d565b818152848101925083850160e0808402860187018a10156113f9578788fd5b8795505b838610156114255761140f8a836112c0565b85526001959095019493860193908101906113fd565b509098975050505050505050565b600060208284031215611444578081fd5b815161042081611de9565b600060208284031215611460578081fd5b815167ffffffffffffffff80821115611477578283fd5b818401915084601f83011261148a578283fd5b815181811115611498578384fd5b6114ab601f8201601f1916602001611d7d565b91508082528560208285010111156114c1578384fd5b6114d2816020840160208601611da4565b50949350505050565b6000806000606084860312156114ef578182fd5b83516114fa81611df7565b602085015190935061150b81611df7565b604085015190925063ffffffff81168114611524578182fd5b809150509250925092565b600060208284031215611540578081fd5b5035919050565b600060208284031215611558578081fd5b815160ff81168114610420578182fd5b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b600082516115a1818460208701611da4565b9190910192915050565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b901515815260200190565b6020808252602c908201527f6f6e6c7920554e495357415020707269636573207574696c697a65206120556e60408201526b1a5cddd85c081b585c9ad95d60a21b606082015260800190565b60208082526043908201527f45544820646f6573206e6f74206e65656420612070726963652066656564206160408201527f7320616c6c2070726963652066656564732061726520626173656420696e20456060820152622a241760e91b608082015260a00190565b60208082526033908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f757263604082015272329d1036bab9ba103132902aa724a9aba0a81760691b606082015260800190565b60208082526014908201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604082015260600190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526014908201527364732d6d6174682d6164642d6f766572666c6f7760601b604082015260600190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526017908201527f6d73672e73656e646572206973206e6f742061646d696e000000000000000000604082015260600190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b60208082526028908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b60208082526058908201527f556e6973776170204c5020746f6b656e20776173207570646174656420696e2060408201527f7468697320626c6f636b2e20526576657274696e672064756520746f2072697360608201527f6b206f66207072696365206d616e6970756c6174696f6e2e0000000000000000608082015260a00190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526029908201527f554e495357415020707269636573206d7573742068617665206120556e697377604082015268185c081b585c9ad95d60ba1b606082015260800190565b6020808252602b908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960408201526a1394155517d05353d5539560aa1b606082015260800190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b81516001600160a01b0390811682526020808401519083015260408084015190830152606083015160e08301919060058110611d4457fe5b80606085015250608084015160808401528060a08501511660a08401525060c0830151151560c083015292915050565b90815260200190565b60405181810167ffffffffffffffff81118282101715611d9c57600080fd5b604052919050565b60005b83811015611dbf578181015183820152602001611da7565b83811115611dce576000848401525b50505050565b6001600160a01b038116811461025457600080fd5b801515811461025457600080fd5b6001600160701b038116811461025457600080fdfea264697066735822122064736da1b7ce701ca2a0fe6455e2e353f2a4d8fcc05222f50f52ea915b6cbdf764736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_isPublic\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isPublic\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"params\\\":{\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\"}},\\\"constructor\\\":{\\\"params\\\":{\\\"_isPublic\\\":\\\"If true, anyone can add assets, but they will be validated\\\",\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\"}},\\\"getTokenConfig(uint256)\\\":{\\\"params\\\":{\\\"i\\\":\\\"The index of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByCToken(address)\\\":{\\\"params\\\":{\\\"cToken\\\":\\\"The address of the cToken of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The address of the underlying asset of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the PriceOracle interface for Compound v2.\\\",\\\"params\\\":{\\\"cToken\\\":\\\"The cToken address for price retrieval\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals, for the given cToken address\\\"}},\\\"price(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The underlying token address for which to get the price (set to zero address for ETH)\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals\\\"}}},\\\"stateVariables\\\":{\\\"UNISWAP_V2_FACTORY_ADDRESS\\\":{\\\"details\\\":\\\"UniswapV2Factory contract address.\\\"},\\\"WETH_ADDRESS\\\":{\\\"details\\\":\\\"WETH contract address.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"IS_UNISWAP_VIEW()\\\":{\\\"notice\\\":\\\"Constant indicating that this contract is a UniswapSpotView\\\"},\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"notice\\\":\\\"Add new asset(s)\\\"},\\\"admin()\\\":{\\\"notice\\\":\\\"Admin address\\\"},\\\"canAdminOverwrite()\\\":{\\\"notice\\\":\\\"Whether or not existing token configs can be overwritten\\\"},\\\"changeAdmin(address)\\\":{\\\"notice\\\":\\\"Changes the admin\\\"},\\\"constructor\\\":\\\"Construct a Uniswap spot price view for a set of token configurations\\\",\\\"ethBaseUnit()\\\":{\\\"notice\\\":\\\"The number of wei in 1 ETH\\\"},\\\"expScale()\\\":{\\\"notice\\\":\\\"A common scaling factor to maintain precision\\\"},\\\"getTokenConfig(uint256)\\\":{\\\"notice\\\":\\\"Get the i-th config, according to the order they were passed in originally\\\"},\\\"getTokenConfigByCToken(address)\\\":{\\\"notice\\\":\\\"Get the config for the cToken\\\"},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"notice\\\":\\\"Get the config for an underlying asset\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Get the underlying price of a cToken\\\"},\\\"isPublic()\\\":{\\\"notice\\\":\\\"If new token configs can be added by anyone\\\"},\\\"maxSecondsBeforePriceIsStale()\\\":{\\\"notice\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\"},\\\"numTokens()\\\":{\\\"notice\\\":\\\"The number of tokens this contract actually supports\\\"},\\\"price(address)\\\":{\\\"notice\\\":\\\"Get the official price for an underlying token address\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapSpotView.sol\\\":\\\"UniswapSpotView\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapConfig.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport { CToken, CErc20 } from \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\ncontract UniswapConfig {\\\\r\\\\n    /// @dev Describe how to interpret the fixedPrice in the TokenConfig.\\\\r\\\\n    enum PriceSource {\\\\r\\\\n        FIXED_ETH, /// implies the fixedPrice is a constant multiple of the ETH price (which varies)\\\\r\\\\n        FIXED_USD, /// implies the fixedPrice is a constant multiple of the USD price (which is 1)\\\\r\\\\n        REPORTER,  /// implies the price is set by the reporter (only available on UniswapAnchoredView)\\\\r\\\\n        TWAP,      /// implies the price is set by TWAPs (only available on UniswapView)\\\\r\\\\n        UNISWAP    /// implies the price is set by the direct Uniswap price (only available on UniswapDirectView)\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Describe how the USD price should be determined for an asset.\\\\r\\\\n    ///  There should be 1 TokenConfig object for each supported asset, passed in the constructor.\\\\r\\\\n    struct TokenConfig {\\\\r\\\\n        address underlying;\\\\r\\\\n        bytes32 symbolHash;\\\\r\\\\n        uint256 baseUnit;\\\\r\\\\n        PriceSource priceSource;\\\\r\\\\n        uint256 fixedPrice;\\\\r\\\\n        address uniswapMarket;\\\\r\\\\n        bool isUniswapReversed;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Token config objects\\\\r\\\\n    TokenConfig[] internal _configs;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to token config indexes\\\\r\\\\n    mapping(address => uint256) internal _configIndexesByUnderlying;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to booleans indicating if they have token configs\\\\r\\\\n    mapping(address => bool) internal _configPresenceByUnderlying;\\\\r\\\\n    \\\\r\\\\n    /// @notice Admin address\\\\r\\\\n    address public admin;\\\\r\\\\n    \\\\r\\\\n    /// @notice Whether or not existing token configs can be overwritten\\\\r\\\\n    bool public canAdminOverwrite;\\\\r\\\\n\\\\r\\\\n    /// @notice The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n    uint256 public maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct an immutable store of configs into the contract data\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\r\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n     */\\\\r\\\\n    constructor(TokenConfig[] memory configs, bool _canAdminOverwrite, uint256 _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        admin = msg.sender;\\\\r\\\\n        canAdminOverwrite = _canAdminOverwrite;\\\\r\\\\n        maxSecondsBeforePriceIsStale = _maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n        // Add configs\\\\r\\\\n        _add(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Internal function to add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function _add(TokenConfig[] memory configs) internal virtual {\\\\r\\\\n        // For each config\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // If !canAdminOverwrite, check for existing config\\\\r\\\\n            if (!canAdminOverwrite) require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Add config to state\\\\r\\\\n            _configs.push(configs[i]);\\\\r\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\r\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice Changes the admin\\\\r\\\\n    function changeAdmin(address newAdmin) external {\\\\r\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n        admin = newAdmin;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice The number of tokens this contract actually supports\\\\r\\\\n    function numTokens() public view returns (uint256) {\\\\r\\\\n        return _configs.length;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by cToken address\\\\r\\\\n    function getCTokenIndex(address cToken) internal view returns (uint) {\\\\r\\\\n        return getUnderlyingIndex(CToken(cToken).isCEther() ? address(0) : CErc20(cToken).underlying());\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by underlying ERC20 token address\\\\r\\\\n    function getUnderlyingIndex(address underlying) internal view returns (uint) {\\\\r\\\\n        return _configPresenceByUnderlying[underlying] ? _configIndexesByUnderlying[underlying] : uint(-1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the i-th config, according to the order they were passed in originally\\\\r\\\\n     * @param i The index of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfig(uint i) public view returns (TokenConfig memory) {\\\\r\\\\n        require(i < numTokens(), \\\\\\\"token config not found\\\\\\\");\\\\r\\\\n        return _configs[i];\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for the cToken\\\\r\\\\n     * @param cToken The address of the cToken of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByCToken(address cToken) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getCTokenIndex(cToken);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for an underlying asset\\\\r\\\\n     * @param underlying The address of the underlying asset of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByUnderlying(address underlying) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getUnderlyingIndex(underlying);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x5cdbac709449ecaa73d9bc7e628d5e78fcda19a579fce7a8afc5ee62dbf33fa0\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapSpotView.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport \\\\\\\"./UniswapConfig.sol\\\\\\\";\\\\r\\\\nimport \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\nstruct Observation {\\\\r\\\\n    uint timestamp;\\\\r\\\\n    uint acc;\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ncontract UniswapSpotView is UniswapConfig {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n    \\\\r\\\\n    /// @notice Constant indicating that this contract is a UniswapSpotView\\\\r\\\\n    bool constant public IS_UNISWAP_VIEW = true;\\\\r\\\\n\\\\r\\\\n    /// @notice The number of wei in 1 ETH\\\\r\\\\n    uint public constant ethBaseUnit = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice A common scaling factor to maintain precision\\\\r\\\\n    uint public constant expScale = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice If new token configs can be added by anyone\\\\r\\\\n    bool public isPublic;\\\\r\\\\n\\\\r\\\\n    bytes32 constant ethHash = keccak256(abi.encodePacked(\\\\\\\"ETH\\\\\\\"));\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct a Uniswap spot price view for a set of token configurations\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     * @param _isPublic If true, anyone can add assets, but they will be validated\\\\r\\\\n     */\\\\r\\\\n    constructor(TokenConfig[] memory configs,\\\\r\\\\n                bool _canAdminOverwrite,\\\\r\\\\n                bool _isPublic) UniswapConfig(configs, _canAdminOverwrite, 0) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        isPublic = _isPublic;\\\\r\\\\n\\\\r\\\\n        // If public, force set admin to 0, require !canAdminOverwrite, and check token configs\\\\r\\\\n        if (isPublic) {\\\\r\\\\n            admin = address(0);\\\\r\\\\n            require(!canAdminOverwrite, \\\\\\\"canAdminOverwrite must be set to false for public UniswapSpotView contracts.\\\\\\\");\\\\r\\\\n            checkTokenConfigs(configs);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        // Init token configs\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev UniswapV2Factory contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private UNISWAP_V2_FACTORY_ADDRESS = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;\\\\r\\\\n    \\\\r\\\\n    /**\\\\r\\\\n     * @dev WETH contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Verifies token configs\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     */\\\\r\\\\n    function checkTokenConfigs(TokenConfig[] memory configs) internal view {\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // Check symbolHash for ETH\\\\r\\\\n            require(configs[i].symbolHash != ethHash, \\\\\\\"ETH does not need a price feed as all price feeds are based in ETH.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check symbolHash against underlying symbol\\\\r\\\\n            require(keccak256(abi.encodePacked(IERC20(configs[i].underlying).symbol())) == configs[i].symbolHash, \\\\\\\"Symbol mismatch between token config and ERC20 symbol method.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check baseUnit against underlying decimals\\\\r\\\\n            require(10 ** uint256(IERC20(configs[i].underlying).decimals()) == configs[i].baseUnit, \\\\\\\"Incorrect token config base unit.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check for WETH\\\\r\\\\n            if (configs[i].underlying == WETH_ADDRESS) {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.FIXED_ETH, \\\\\\\"Invalid WETH token config price source: must be FIXED_ETH.\\\\\\\");\\\\r\\\\n                \\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 1e18, \\\\\\\"WETH token config fixed price must be 1e18.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                require(configs[i].uniswapMarket == address(0), \\\\\\\"WETH Uniswap market not necessary.\\\\\\\");\\\\r\\\\n                configs[i].isUniswapReversed = false;\\\\r\\\\n            } else {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.UNISWAP, \\\\\\\"Invalid token config price source: must be UNISWAP.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 0, \\\\\\\"Token config fixed price must be 0.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(UNISWAP_V2_FACTORY_ADDRESS, configs[i].underlying, WETH_ADDRESS));\\\\r\\\\n                require(configs[i].uniswapMarket == address(pair), \\\\\\\"Token config Uniswap market is not correct.\\\\\\\");\\\\r\\\\n                address token0 = pair.token0();\\\\r\\\\n                require((token0 == configs[i].underlying && !configs[i].isUniswapReversed) || (token0 != configs[i].underlying && configs[i].isUniswapReversed), \\\\\\\"Token config Uniswap reversal is incorrect.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Initialize token configs\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function initConfigs(TokenConfig[] memory configs) internal pure {\\\\r\\\\n        for (uint i = 0; i < configs.length; i++) {\\\\r\\\\n            TokenConfig memory config = configs[i];\\\\r\\\\n            require(config.baseUnit > 0, \\\\\\\"baseUnit must be greater than zero\\\\\\\");\\\\r\\\\n            address uniswapMarket = config.uniswapMarket;\\\\r\\\\n            if (config.priceSource == PriceSource.UNISWAP) {\\\\r\\\\n                require(uniswapMarket != address(0), \\\\\\\"UNISWAP prices must have a Uniswap market\\\\\\\");\\\\r\\\\n            } else {\\\\r\\\\n                require(uniswapMarket == address(0), \\\\\\\"only UNISWAP prices utilize a Uniswap market\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function add(TokenConfig[] memory configs) external {\\\\r\\\\n        // If public, check token configs; if private, check that msg.sender == admin\\\\r\\\\n        if (isPublic) checkTokenConfigs(configs);\\\\r\\\\n        else require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n\\\\r\\\\n        // Add and init token configs\\\\r\\\\n        _add(configs);\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the official price for an underlying token address\\\\r\\\\n     * @param underlying The underlying token address for which to get the price (set to zero address for ETH)\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals\\\\r\\\\n     */\\\\r\\\\n    function price(address underlying) external view returns (uint) {\\\\r\\\\n        TokenConfig memory config = getTokenConfigByUnderlying(underlying);\\\\r\\\\n        return priceInternal(config);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function priceInternal(TokenConfig memory config) internal view returns (uint) {\\\\r\\\\n        if (config.priceSource == PriceSource.UNISWAP) return fetchSpotPrice(config);\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_USD) {\\\\r\\\\n            uint ethPerUsd = fetchSpotPrice(getTokenConfigByUnderlying(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48));\\\\r\\\\n            return mul(config.fixedPrice, ethPerUsd) / 1e6;\\\\r\\\\n        }\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_ETH) return config.fixedPrice;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the underlying price of a cToken\\\\r\\\\n     * @dev Implements the PriceOracle interface for Compound v2.\\\\r\\\\n     * @param cToken The cToken address for price retrieval\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals, for the given cToken address\\\\r\\\\n     */\\\\r\\\\n    function getUnderlyingPrice(address cToken) external view returns (uint) {\\\\r\\\\n        if (CToken(cToken).isCEther()) return 1e18;\\\\r\\\\n        TokenConfig memory config = getTokenConfigByCToken(cToken);\\\\r\\\\n         // Comptroller needs prices in the format: ${raw price} * 1e(36 - baseUnit)\\\\r\\\\n         // Since the prices in this view have 18 decimals, we must scale them by 1e(36 - 18 - baseUnit)\\\\r\\\\n        return mul(1e18, priceInternal(config)) / config.baseUnit;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current token/ETH price from Uniswap, with 18 decimals of precision.\\\\r\\\\n     */\\\\r\\\\n    function fetchSpotPrice(TokenConfig memory config) internal view virtual returns (uint) {\\\\r\\\\n        (uint reserve0, uint reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(config.uniswapMarket).getReserves();\\\\r\\\\n        require(uint32(block.timestamp % 2 ** 32) != blockTimestampLast, \\\\\\\"Uniswap LP token was updated in this block. Reverting due to risk of price manipulation.\\\\\\\");\\\\r\\\\n        return UniswapV2Library.getAmountOut(config.baseUnit, config.isUniswapReversed ? reserve1 : reserve0, config.isUniswapReversed ? reserve0 : reserve1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Overflow proof multiplication\\\\r\\\\n    function mul(uint a, uint b) internal pure returns (uint) {\\\\r\\\\n        if (a == 0) return 0;\\\\r\\\\n        uint c = a * b;\\\\r\\\\n        require(c / a == b, \\\\\\\"multiplication overflow\\\\\\\");\\\\r\\\\n        return c;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x112cd93222f65b474df9cb458170b2349a022746449d35d3e1fb328f35fbbe75\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"contracts/Uniswap/UniswapView.sol:UniswapView\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_isPublic\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isPublic\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"storedAndPendingPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"60a06040523480156200001157600080fd5b50604051620041743803806200417483398101604081905262000034916200107a565b60038054336001600160a01b03199091161760ff60a01b1916600160a01b8515150217905560048190558383826200006c83620000f3565b50505060808590526005805460ff1916831515179081905560ff1615620000dd57600380546001600160a01b03191690819055600160a01b900460ff1615620000d25760405162461bcd60e51b8152600401620000c99062001727565b60405180910390fd5b620000dd84620002e9565b620000e884620008d0565b5050505050620018c5565b60005b8151811015620002e557600354600160a01b900460ff166200016b57600260008383815181106200012357fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff16156200016b5760405162461bcd60e51b8152600401620000c990620013c4565b60008282815181106200017a57fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115620001f457fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106200026657fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160026000848481518110620002a957fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620000f6565b5050565b60005b8151811015620002e557604051602001620003079062001232565b604051602081830303815290604052805190602001208282815181106200032a57fe5b6020026020010151602001511415620003575760405162461bcd60e51b8152600401620000c99062001241565b8181815181106200036457fe5b6020026020010151602001518282815181106200037d57fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003c257600080fd5b505afa158015620003d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000401919081019062000f73565b604051602001620004139190620011ab565b6040516020818303038152906040528051906020012014620004495760405162461bcd60e51b8152600401620000c99062001463565b8181815181106200045657fe5b6020026020010151604001518282815181106200046f57fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620004b457600080fd5b505afa158015620004c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ef919062001166565b60ff16600a0a14620005155760405162461bcd60e51b8152600401620000c99062001578565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168282815181106200054057fe5b6020026020010151600001516001600160a01b031614156200065b5760008282815181106200056b57fe5b60200260200101516060015160048111156200058357fe5b14620005a35760405162461bcd60e51b8152600401620000c990620015b9565b818181518110620005b057fe5b602002602001015160800151670de0b6b3a764000014620005e55760405162461bcd60e51b8152600401620000c99062001795565b60006001600160a01b0316828281518110620005fd57fe5b602002602001015160a001516001600160a01b031614620006325760405162461bcd60e51b8152600401620000c99062001421565b60008282815181106200064157fe5b602090810291909101015190151560c090910152620008c7565b60038282815181106200066a57fe5b60200260200101516060015160048111156200068257fe5b14620006a25760405162461bcd60e51b8152600401620000c99062001374565b818181518110620006af57fe5b602002602001015160800151600014620006dd5760405162461bcd60e51b8152600401620000c990620012ec565b600062000737735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8484815181106200070557fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc262000a7660201b620007e71760201c565b9050806001600160a01b03168383815181106200075057fe5b602002602001015160a001516001600160a01b031614620007855760405162461bcd60e51b8152600401620000c990620014c0565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620007c157600080fd5b505afa158015620007d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007fc919062000f4e565b90508383815181106200080b57fe5b6020026020010151600001516001600160a01b0316816001600160a01b03161480156200084e57508383815181106200084057fe5b602002602001015160c00151155b80620008a557508383815181106200086257fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614158015620008a557508383815181106200089857fe5b602002602001015160c001515b620008c45760405162461bcd60e51b8152600401620000c99062001616565b50505b600101620002ec565b60005b8151811015620002e557620008e762000e44565b828281518110620008f457fe5b602002602001015190506000816040015111620009255760405162461bcd60e51b8152600401620000c990620012aa565b60a08101516003826060015160048111156200093d57fe5b141562000a00576001600160a01b0381166200096d5760405162461bcd60e51b8152600401620000c990620016e1565b815160006200097c8462000aeb565b6001600160a01b038316600081815260076020908152604080832042808255600890935292819020828155600193840186905592909201849055905192935090917f0d485bb9561d8954891bf391edd13fa8f4db3ea3191309867ecb63debeb509a891620009f09181908690819062001817565b60405180910390a2505062000a6b565b81516001600160a01b031673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48141562000a415760405162461bcd60e51b8152600401620000c9906200150b565b6001600160a01b0381161562000a6b5760405162461bcd60e51b8152600401620000c99062001661565b5050600101620008d3565b6000808062000a86858562000b2a565b9150915085828260405160200162000aa092919062001189565b6040516020818303038152906040528051906020012060405160200162000ac9929190620011c9565b60408051601f1981840301815291905280516020909101209695505050505050565b600080600062000b0a8460a0015162000bbc60201b620008571760201c565b50915091508360c0015162000b20578162000b22565b805b949350505050565b600080826001600160a01b0316846001600160a01b0316141562000b625760405162461bcd60e51b8152600401620000c9906200132f565b826001600160a01b0316846001600160a01b03161062000b8457828462000b87565b83835b90925090506001600160a01b03821662000bb55760405162461bcd60e51b8152600401620000c990620016aa565b9250929050565b6000808062000bca62000dbf565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c0657600080fd5b505afa15801562000c1b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c41919062001061565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c7d57600080fd5b505afa15801562000c92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cb8919062001061565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801562000cf957600080fd5b505afa15801562000d0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d34919062001007565b9250925092508363ffffffff168163ffffffff161462000db557600081850390508063ffffffff1662000d73848662000dc960201b62000a2c1760201c565b600001516001600160e01b031602870196508063ffffffff1662000da3858562000dc960201b62000a2c1760201c565b516001600160e01b0316029590950194505b5050509193909250565b63ffffffff421690565b62000dd362000e81565b6000826001600160701b03161162000dff5760405162461bcd60e51b8152600401620000c990620017e0565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b168162000e2e57fe5b046001600160e01b031681525090505b92915050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b80516001600160a01b038116811462000e3e57600080fd5b8051801515811462000e3e57600080fd5b600060e0828403121562000ece578081fd5b62000eda60e062001832565b905062000ee8838362000e93565b8152602082015160208201526040820151604082015260608201516005811062000f1157600080fd5b60608201526080828101519082015262000f2f8360a0840162000e93565b60a082015262000f438360c0840162000eab565b60c082015292915050565b60006020828403121562000f60578081fd5b62000f6c838362000e93565b9392505050565b60006020828403121562000f85578081fd5b81516001600160401b038082111562000f9c578283fd5b818401915084601f83011262000fb0578283fd5b81518181111562000fbf578384fd5b62000fd4601f8201601f191660200162001832565b915080825285602082850101111562000feb578384fd5b62000ffe81602084016020860162001879565b50949350505050565b6000806000606084860312156200101c578182fd5b83516200102981620018ac565b60208501519093506200103c81620018ac565b604085015190925063ffffffff8116811462001056578182fd5b809150509250925092565b60006020828403121562001073578081fd5b5051919050565b600080600080600060a0868803121562001092578081fd5b8551602080880151919650906001600160401b03811115620010b2578283fd5b8701601f81018913620010c3578283fd5b8051620010da620010d48262001859565b62001832565b8181528381019083850160e0808502860187018e1015620010f9578788fd5b8795505b848610156200112957620011128e8362000ebc565b8452600195909501949286019290810190620010fd565b5050809850505050505062001142876040880162000eab565b925062001153876060880162000eab565b9150608086015190509295509295909350565b60006020828403121562001178578081fd5b815160ff8116811462000f6c578182fd5b6001600160601b0319606093841b811682529190921b16601482015260280190565b60008251620011bf81846020870162001879565b9190910192915050565b7fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b60208082526043908201527f45544820646f6573206e6f74206e65656420612070726963652066656564206160408201527f7320616c6c2070726963652066656564732061726520626173656420696e20456060820152622a241760e91b608082015260a00190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526030908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201526f329d1036bab9ba103132902a2ba0a81760811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b60208082526047908201527f55534443206d757374206265205457415020626563617573652046495845445f60408201527f5553442070726963657320617265206261736564206f6e20746865205553444360608201526610383934b1b29760c91b608082015260a00190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b60208082526029908201527f6f6e6c79205457415020707269636573207574696c697a65206120556e697377604082015268185c081b585c9ad95d60ba1b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526026908201527f5457415020707269636573206d7573742068617665206120556e6973776170206040820152651b585c9ad95d60d21b606082015260800190565b60208082526048908201527f63616e41646d696e4f7665727772697465206d7573742062652073657420746f60408201527f2066616c736520666f72207075626c696320556e69737761705669657720636f606082015267373a3930b1ba399760c11b608082015260a00190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b93845260208401929092526040830152606082015260800190565b6040518181016001600160401b03811182821017156200185157600080fd5b604052919050565b60006001600160401b038211156200186f578081fd5b5060209081020190565b60005b83811015620018965781810151838201526020016200187c565b83811115620018a6576000848401525b50505050565b6001600160701b0381168114620018c257600080fd5b50565b60805161288f620018e5600039806106d552806119a5525061288f6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80639f599631116100b8578063dc9a15351161007c578063dc9a153514610268578063e073a24114610270578063e9206d7814610278578063f851a44014610280578063fc57d4df14610295578063fe16e80c146102a857610137565b80639f5996311461021c578063aea910781461022f578063b3bcdfba14610242578063cfed246b14610255578063d1b353b4146101b857610137565b806369aa3ac6116100ff57806369aa3ac6146101b85780638a003888146101cd5780638cea8c26146101e05780638e499bcf146102015780638f2839701461020957610137565b80631a04ee251461013c5780632d1c668f146101665780633a8521691461017b5780634da2194214610190578063656b0fd1146101b0575b600080fd5b61014f61014a366004611c04565b6102bb565b60405161015d929190611fa5565b60405180910390f35b610179610174366004611c73565b610430565b005b610183610488565b60405161015d9190611fd3565b6101a361019e366004611bcc565b61048d565b60405161015d9190612730565b6101836104d9565b6101c06104e9565b60405161015d9190612798565b6101a36101db366004611e1f565b6104f5565b6101f36101ee366004611bcc565b6105ce565b60405161015d9291906127a1565b6101c06105e7565b610179610217366004611bcc565b6105ed565b6101a361022a366004611bcc565b610639565b6101c061023d366004611bcc565b61064c565b610179610250366004611c04565b610671565b6101c0610263366004611bcc565b6106b2565b6101836106c4565b6101c06106cd565b6101c06106d3565b6102886106f7565b60405161015d9190611f52565b6101c06102a3366004611bcc565b610706565b6101f36102b6366004611bcc565b6107ce565b606080808367ffffffffffffffff811180156102d657600080fd5b50604051908082528060200260200182016040528015610300578160200160208202803683370190505b50905060608467ffffffffffffffff8111801561031c57600080fd5b50604051908082528060200260200182016040528015610346578160200160208202803683370190505b50905060005b8581101561042257600087878381811061036257fe5b90506020020160208101906103779190611bcc565b9050610381611ac2565b61038a8261048d565b905060038160600151600481111561039e57fe5b146103c45760405162461bcd60e51b81526004016103bb906124b6565b60405180910390fd5b6001600160a01b03821660009081526006602052604090205485518690859081106103eb57fe5b6020026020010181815250506104018282610aa8565b84848151811061040d57fe5b6020908102919091010152505060010161034c565b5090925090505b9250929050565b60055460ff16156104495761044481610ba7565b610473565b6003546001600160a01b031633146104735760405162461bcd60e51b81526004016103bb906121a6565b61047c8161113c565b61048581611323565b50565b600181565b610495611ac2565b60006104a0836114b1565b905060001981146104bc576104b4816104f5565b9150506104d4565b60405162461bcd60e51b81526004016103bb906120ee565b919050565b600354600160a01b900460ff1681565b670de0b6b3a764000081565b6104fd611ac2565b6105056105e7565b82106105235760405162461bcd60e51b81526004016103bb906120ee565b6000828154811061053057fe5b60009182526020918290206040805160e081018252600690930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154909190606083019060ff16600481111561058a57fe5b600481111561059557fe5b8152600482015460208201526005909101546001600160a01b0381166040830152600160a01b900460ff16151560609091015292915050565b6008602052600090815260409020805460019091015482565b60005490565b6003546001600160a01b031633146106175760405162461bcd60e51b81526004016103bb906121a6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610641611ac2565b60006104a0836114f5565b6000610656611ac2565b61065f8361048d565b905061066a816115ed565b9392505050565b60005b818110156106ad576106a583838381811061068b57fe5b90506020020160208101906106a09190611bcc565b6117db565b600101610674565b505050565b60066020526000908152604090205481565b60055460ff1681565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561074157600080fd5b505afa158015610755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107799190611d23565b1561078d5750670de0b6b3a76400006104d4565b610795611ac2565b61079e83610639565b905080604001516107bf670de0b6b3a76400006107ba846115ed565b611886565b816107c657fe5b049392505050565b6007602052600090815260409020805460019091015482565b60008060006107f685856118c0565b9150915085828260405160200161080e929190611eaa565b60405160208183030381529060405280519060200120604051602001610835929190611eed565b60408051601f1981840301815291905280516020909101209695505050505050565b6000806000610864611943565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561089f57600080fd5b505afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d79190611e37565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b15801561091257600080fd5b505afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611e37565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561098a57600080fd5b505afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c29190611dcb565b9250925092508363ffffffff168163ffffffff1614610a225780840363ffffffff81166109ef8486610a2c565b516001600160e01b031602969096019563ffffffff8116610a108585610a2c565b516001600160e01b0316029590950194505b5050509193909250565b610a34611aff565b6000826001600160701b031611610a5d5760405162461bcd60e51b81526004016103bb906126f9565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681610a9257fe5b046001600160e01b031681525090505b92915050565b600080600080610ab78561194d565b925092509250804211610adc5760405162461bcd60e51b81526004016103bb906123d1565b42819003610ae8611aff565b60405180602001604052808386880381610afe57fe5b046001600160e01b031681525090506000610b1882611a7a565b90506000610b2e82670de0b6b3a7640000611886565b90506000670de0b6b3a764000080610b4a848d60400151611886565b81610b5157fe5b0481610b5957fe5b0490507f7d881580fb2bb7844e8ecf8df26510247c4bbea2735d40bf0d9ac33c0d9acd818b828842604051610b919493929190611f7f565b60405180910390a19a9950505050505050505050565b60005b815181101561113857604051602001610bc290611f43565b60405160208183030381529060405280519060200120828281518110610be457fe5b6020026020010151602001511415610c0e5760405162461bcd60e51b81526004016103bb9061200c565b818181518110610c1a57fe5b602002602001015160200151828281518110610c3257fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610c7657600080fd5b505afa158015610c8a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cb29190810190611d3f565b604051602001610cc29190611ed1565b6040516020818303038152906040528051906020012014610cf55760405162461bcd60e51b81526004016103bb90612329565b818181518110610d0157fe5b602002602001015160400151828281518110610d1957fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d959190611e4f565b60ff16600a0a14610db85760405162461bcd60e51b81526004016103bb90612475565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316828281518110610de257fe5b6020026020010151600001516001600160a01b03161415610eed576000828281518110610e0b57fe5b6020026020010151606001516004811115610e2257fe5b14610e3f5760405162461bcd60e51b81526004016103bb906124ed565b818181518110610e4b57fe5b602002602001015160800151670de0b6b3a764000014610e7d5760405162461bcd60e51b81526004016103bb906126ae565b60006001600160a01b0316828281518110610e9457fe5b602002602001015160a001516001600160a01b031614610ec65760405162461bcd60e51b81526004016103bb906122e7565b6000828281518110610ed457fe5b602090810291909101015190151560c090910152611130565b6003828281518110610efb57fe5b6020026020010151606001516004811115610f1257fe5b14610f2f5760405162461bcd60e51b81526004016103bb906121dd565b818181518110610f3b57fe5b602002602001015160800151600014610f665760405162461bcd60e51b81526004016103bb9061211e565b6000610fb2735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f848481518110610f8c57fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26107e7565b9050806001600160a01b0316838381518110610fca57fe5b602002602001015160a001516001600160a01b031614610ffc5760405162461bcd60e51b81526004016103bb90612386565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561103757600080fd5b505afa15801561104b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106f9190611be8565b905083838151811061107d57fe5b6020026020010151600001516001600160a01b0316816001600160a01b03161480156110be57508383815181106110b057fe5b602002602001015160c00151155b8061111157508383815181106110d057fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614158015611111575083838151811061110457fe5b602002602001015160c001515b61112d5760405162461bcd60e51b81526004016103bb9061254a565b50505b600101610baa565b5050565b60005b815181101561113857600354600160a01b900460ff166111ae576002600083838151811061116957fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff16156111ae5760405162461bcd60e51b81526004016103bb9061222d565b60008282815181106111bc57fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff199091169083600481111561123557fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106112a657fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600260008484815181106112e857fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161113f565b60005b815181101561113857611337611ac2565b82828151811061134357fe5b6020026020010151905060008160400151116113715760405162461bcd60e51b81526004016103bb90612075565b60a081015160038260600151600481111561138857fe5b1415611442576001600160a01b0381166113b45760405162461bcd60e51b81526004016103bb90612615565b815160006113c184611a92565b6001600160a01b038316600081815260076020908152604080832042808255600890935292819020828155600193840186905592909201849055905192935090917f0d485bb9561d8954891bf391edd13fa8f4db3ea3191309867ecb63debeb509a891611433918190869081906127af565b60405180910390a250506114a7565b81516001600160a01b031673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4814156114805760405162461bcd60e51b81526004016103bb90612408565b6001600160a01b038116156114a75760405162461bcd60e51b81526004016103bb90612595565b5050600101611326565b6001600160a01b03811660009081526002602052604081205460ff166114d957600019610aa2565b506001600160a01b031660009081526001602052604090205490565b6000610aa2826001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153357600080fd5b505afa158015611547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156b9190611d23565b6115e557826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e09190611be8565b6115e8565b60005b6114b1565b600060038260600151600481111561160157fe5b141561168b576004541561166b5781516001600160a01b03908116600090815260086020908152604080832054865190941683526007909152902054600454600291909201049081014211156116695760405162461bcd60e51b81526004016103bb90611fde565b505b5080516001600160a01b03166000908152600660205260409020546104d4565b60018260600151600481111561169d57fe5b14156117b85773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860005260066020527fc54ea4dd6a734fa461b7ee355eb25a8cb9467ce4d0e78fa68c9c085fda8edba254806116ff5760405162461bcd60e51b81526004016103bb9061265b565b600454156117965773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486000527fa197b6ae0044c90610b63b51392eb7144f4390bba5cb14eeeb9a37521cf0dd8a5460076020527ff942f4688cdba65adc8aa59da583acae93fa87351143ebc775559218bfa5f83254600454600291909201049081014211156117945760405162461bcd60e51b81526004016103bb9061228a565b505b620f42406117a8846080015183611886565b816117af57fe5b049150506104d4565b6000826060015160048111156117ca57fe5b14156104d4575060808101516104d4565b6117e3611ac2565b6117ec8261048d565b905060038160600151600481111561180057fe5b1461181d5760405162461bcd60e51b81526004016103bb906124b6565b60006118298383610aa8565b6001600160a01b03841660009081526006602052604090819020829055519091507f0d86730737b142fc160892fa8a0f2db687a92a0e294d1ad70624cf5acef03b84906118799085908490611f66565b60405180910390a1505050565b60008261189557506000610aa2565b828202828482816118a257fe5b041461066a5760405162461bcd60e51b81526004016103bb906120b7565b600080826001600160a01b0316846001600160a01b031614156118f55760405162461bcd60e51b81526004016103bb90612161565b826001600160a01b0316846001600160a01b031610611915578284611918565b83835b90925090506001600160a01b0382166104295760405162461bcd60e51b81526004016103bb906125de565b63ffffffff421690565b8051600090819081908161196086611a92565b905061196a611b11565b506001600160a01b038216600090815260086020908152604091829020825180840190935280548084526001909101549183019190915242037f00000000000000000000000000000000000000000000000000000000000000008110611a4a5781516001600160a01b03808616600090815260076020908152604080832094855581870180516001968701556008909252918290204280825594018790558b518651915192519316937f0d485bb9561d8954891bf391edd13fa8f4db3ea3191309867ecb63debeb509a893611a41939089906127af565b60405180910390a25b50506001600160a01b03909116600090815260076020526040902060018101549054919450925090509193909250565b516612725dd1d243ab6001600160e01b039091160490565b6000806000611aa48460a00151610857565b50915091508360c00151611ab85781611aba565b805b949350505050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b604051806040016040528060008152602001600081525090565b8035610aa281612821565b8035610aa281612836565b600060e08284031215611b52578081fd5b611b5c60e06127ca565b90508135611b6981612821565b808252506020820135602082015260408201356040820152606082013560058110611b9357600080fd5b606082015260808281013590820152611baf8360a08401611b2b565b60a0820152611bc18360c08401611b36565b60c082015292915050565b600060208284031215611bdd578081fd5b813561066a81612821565b600060208284031215611bf9578081fd5b815161066a81612821565b60008060208385031215611c16578081fd5b823567ffffffffffffffff80821115611c2d578283fd5b818501915085601f830112611c40578283fd5b813581811115611c4e578384fd5b8660208083028501011115611c61578384fd5b60209290920196919550909350505050565b60006020808385031215611c85578182fd5b823567ffffffffffffffff80821115611c9c578384fd5b818501915085601f830112611caf578384fd5b813581811115611cbd578485fd5b611cca84858302016127ca565b818152848101925083850160e0808402860187018a1015611ce9578788fd5b8795505b83861015611d1557611cff8a83611b41565b8552600195909501949386019390810190611ced565b509098975050505050505050565b600060208284031215611d34578081fd5b815161066a81612836565b600060208284031215611d50578081fd5b815167ffffffffffffffff80821115611d67578283fd5b818401915084601f830112611d7a578283fd5b815181811115611d88578384fd5b611d9b601f8201601f19166020016127ca565b9150808252856020828501011115611db1578384fd5b611dc28160208401602086016127f1565b50949350505050565b600080600060608486031215611ddf578081fd5b8351611dea81612844565b6020850151909350611dfb81612844565b604085015190925063ffffffff81168114611e14578182fd5b809150509250925092565b600060208284031215611e30578081fd5b5035919050565b600060208284031215611e48578081fd5b5051919050565b600060208284031215611e60578081fd5b815160ff8116811461066a578182fd5b6000815180845260208085019450808401835b83811015611e9f57815187529582019590820190600101611e83565b509495945050505050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b60008251611ee38184602087016127f1565b9190910192915050565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b600060408252611fb86040830185611e70565b8281036020840152611fca8185611e70565b95945050505050565b901515815260200190565b6020808252601490820152732a2ba0a810383934b1b29034b99039ba30b6329760611b604082015260600190565b60208082526043908201527f45544820646f6573206e6f74206e65656420612070726963652066656564206160408201527f7320616c6c2070726963652066656564732061726520626173656420696e20456060820152622a241760e91b608082015260a00190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526017908201527f6d73672e73656e646572206973206e6f742061646d696e000000000000000000604082015260600190565b60208082526030908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201526f329d1036bab9ba103132902a2ba0a81760811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526039908201527f555344432054574150207072696365206973207374616c653b2063616e6e6f7460408201527f20636f6e766572742066726f6d2055534420746f204554482e00000000000000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b6020808252601a908201527f6e6f77206d75737420636f6d65206166746572206265666f7265000000000000604082015260600190565b60208082526047908201527f55534443206d757374206265205457415020626563617573652046495845445f60408201527f5553442070726963657320617265206261736564206f6e20746865205553444360608201526610383934b1b29760c91b608082015260a00190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b6020808252601b908201527f6f6e6c792054574150207072696365732067657420706f737465640000000000604082015260600190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b60208082526029908201527f6f6e6c79205457415020707269636573207574696c697a65206120556e697377604082015268185c081b585c9ad95d60ba1b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526026908201527f5457415020707269636573206d7573742068617665206120556e6973776170206040820152651b585c9ad95d60d21b606082015260800190565b60208082526033908201527f55534443207072696365206e6f74207365743b2063616e6e6f7420636f6e7665604082015272393a10333937b6902aa9a2103a379022aa241760691b606082015260800190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b81516001600160a01b0390811682526020808401519083015260408084015190830152606083015160e0830191906005811061276857fe5b80606085015250608084015160808401528060a08501511660a08401525060c0830151151560c083015292915050565b90815260200190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60405181810167ffffffffffffffff811182821017156127e957600080fd5b604052919050565b60005b8381101561280c5781810151838201526020016127f4565b8381111561281b576000848401525b50505050565b6001600160a01b038116811461048557600080fd5b801515811461048557600080fd5b6001600160701b038116811461048557600080fdfea2646970667358221220fce9fdde45123469d3742f65be9f6b32097cdaa6da4ed575247ca14e4bc850e064736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_isPublic\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isPublic\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"storedAndPendingPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"params\\\":{\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Note that to avoid immature TWAPs, the system must run for at least a single anchorPeriod before using.\\\",\\\"params\\\":{\\\"_canAdminOverwrite\\\":\\\"Whether or not existing token configs can be overwritten (must be false if `_isPublic` is true)\\\",\\\"_isPublic\\\":\\\"If true, anyone can add assets, but they will be validated\\\",\\\"_maxSecondsBeforePriceIsStale\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\",\\\"anchorPeriod_\\\":\\\"The minimum amount of time required for the old uniswap price accumulator to be replaced\\\",\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\"}},\\\"getTokenConfig(uint256)\\\":{\\\"params\\\":{\\\"i\\\":\\\"The index of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByCToken(address)\\\":{\\\"params\\\":{\\\"cToken\\\":\\\"The address of the cToken of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The address of the underlying asset of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the PriceOracle interface for Compound v2.\\\",\\\"params\\\":{\\\"cToken\\\":\\\"The cToken address for price retrieval\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals, for the given cToken address\\\"}},\\\"postPrices(address[])\\\":{\\\"details\\\":\\\"We let anyone pay to post anything, but only prices from Uniswap will be stored in the view.\\\",\\\"params\\\":{\\\"underlyings\\\":\\\"The underlying token addresses for which to get and post TWAPs\\\"}},\\\"price(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The underlying token address for which to get the price (set to zero address for ETH)\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals\\\"}},\\\"storedAndPendingPrices(address[])\\\":{\\\"details\\\":\\\"Get both stored and pending prices for `underlyings` for comparison off-chain to determine if posting is needed.\\\"}},\\\"stateVariables\\\":{\\\"UNISWAP_V2_FACTORY_ADDRESS\\\":{\\\"details\\\":\\\"UniswapV2Factory contract address.\\\"},\\\"WETH_ADDRESS\\\":{\\\"details\\\":\\\"WETH contract address.\\\"},\\\"ethHash\\\":{\\\"details\\\":\\\"The symbol hash for ETH\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"AnchorPriceUpdated(address,uint256,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when anchor price is updated\\\"},\\\"PriceUpdated(address,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the stored price is updated\\\"},\\\"UniswapWindowUpdated(address,uint256,uint256,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the uniswap window changes\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"IS_UNISWAP_VIEW()\\\":{\\\"notice\\\":\\\"Constant indicating that this contract is a UniswapView\\\"},\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"notice\\\":\\\"Add new asset(s)\\\"},\\\"admin()\\\":{\\\"notice\\\":\\\"Admin address\\\"},\\\"anchorPeriod()\\\":{\\\"notice\\\":\\\"The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced\\\"},\\\"canAdminOverwrite()\\\":{\\\"notice\\\":\\\"Whether or not existing token configs can be overwritten\\\"},\\\"changeAdmin(address)\\\":{\\\"notice\\\":\\\"Changes the admin\\\"},\\\"constructor\\\":\\\"Construct a uniswap anchored view for a set of token configurations\\\",\\\"ethBaseUnit()\\\":{\\\"notice\\\":\\\"The number of wei in 1 ETH\\\"},\\\"expScale()\\\":{\\\"notice\\\":\\\"A common scaling factor to maintain precision\\\"},\\\"getTokenConfig(uint256)\\\":{\\\"notice\\\":\\\"Get the i-th config, according to the order they were passed in originally\\\"},\\\"getTokenConfigByCToken(address)\\\":{\\\"notice\\\":\\\"Get the config for the cToken\\\"},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"notice\\\":\\\"Get the config for an underlying asset\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Get the underlying price of a cToken\\\"},\\\"isPublic()\\\":{\\\"notice\\\":\\\"If new token configs can be added by anyone\\\"},\\\"maxSecondsBeforePriceIsStale()\\\":{\\\"notice\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\"},\\\"newObservations(address)\\\":{\\\"notice\\\":\\\"The new observation for each underlying\\\"},\\\"numTokens()\\\":{\\\"notice\\\":\\\"The number of tokens this contract actually supports\\\"},\\\"oldObservations(address)\\\":{\\\"notice\\\":\\\"The old observation for each underlying\\\"},\\\"postPrices(address[])\\\":{\\\"notice\\\":\\\"Update Uniswap TWAP prices\\\"},\\\"price(address)\\\":{\\\"notice\\\":\\\"Get the official price for an underlying token address\\\"},\\\"prices(address)\\\":{\\\"notice\\\":\\\"Official prices by underlying\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"contracts/Uniswap/UniswapView.sol\\\":\\\"UniswapView\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapConfig.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport { CToken, CErc20 } from \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\ncontract UniswapConfig {\\\\r\\\\n    /// @dev Describe how to interpret the fixedPrice in the TokenConfig.\\\\r\\\\n    enum PriceSource {\\\\r\\\\n        FIXED_ETH, /// implies the fixedPrice is a constant multiple of the ETH price (which varies)\\\\r\\\\n        FIXED_USD, /// implies the fixedPrice is a constant multiple of the USD price (which is 1)\\\\r\\\\n        REPORTER,  /// implies the price is set by the reporter (only available on UniswapAnchoredView)\\\\r\\\\n        TWAP,      /// implies the price is set by TWAPs (only available on UniswapView)\\\\r\\\\n        UNISWAP    /// implies the price is set by the direct Uniswap price (only available on UniswapDirectView)\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Describe how the USD price should be determined for an asset.\\\\r\\\\n    ///  There should be 1 TokenConfig object for each supported asset, passed in the constructor.\\\\r\\\\n    struct TokenConfig {\\\\r\\\\n        address underlying;\\\\r\\\\n        bytes32 symbolHash;\\\\r\\\\n        uint256 baseUnit;\\\\r\\\\n        PriceSource priceSource;\\\\r\\\\n        uint256 fixedPrice;\\\\r\\\\n        address uniswapMarket;\\\\r\\\\n        bool isUniswapReversed;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Token config objects\\\\r\\\\n    TokenConfig[] internal _configs;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to token config indexes\\\\r\\\\n    mapping(address => uint256) internal _configIndexesByUnderlying;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to booleans indicating if they have token configs\\\\r\\\\n    mapping(address => bool) internal _configPresenceByUnderlying;\\\\r\\\\n    \\\\r\\\\n    /// @notice Admin address\\\\r\\\\n    address public admin;\\\\r\\\\n    \\\\r\\\\n    /// @notice Whether or not existing token configs can be overwritten\\\\r\\\\n    bool public canAdminOverwrite;\\\\r\\\\n\\\\r\\\\n    /// @notice The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n    uint256 public maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct an immutable store of configs into the contract data\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\r\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n     */\\\\r\\\\n    constructor(TokenConfig[] memory configs, bool _canAdminOverwrite, uint256 _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        admin = msg.sender;\\\\r\\\\n        canAdminOverwrite = _canAdminOverwrite;\\\\r\\\\n        maxSecondsBeforePriceIsStale = _maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n        // Add configs\\\\r\\\\n        _add(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Internal function to add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function _add(TokenConfig[] memory configs) internal virtual {\\\\r\\\\n        // For each config\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // If !canAdminOverwrite, check for existing config\\\\r\\\\n            if (!canAdminOverwrite) require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Add config to state\\\\r\\\\n            _configs.push(configs[i]);\\\\r\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\r\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice Changes the admin\\\\r\\\\n    function changeAdmin(address newAdmin) external {\\\\r\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n        admin = newAdmin;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice The number of tokens this contract actually supports\\\\r\\\\n    function numTokens() public view returns (uint256) {\\\\r\\\\n        return _configs.length;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by cToken address\\\\r\\\\n    function getCTokenIndex(address cToken) internal view returns (uint) {\\\\r\\\\n        return getUnderlyingIndex(CToken(cToken).isCEther() ? address(0) : CErc20(cToken).underlying());\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by underlying ERC20 token address\\\\r\\\\n    function getUnderlyingIndex(address underlying) internal view returns (uint) {\\\\r\\\\n        return _configPresenceByUnderlying[underlying] ? _configIndexesByUnderlying[underlying] : uint(-1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the i-th config, according to the order they were passed in originally\\\\r\\\\n     * @param i The index of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfig(uint i) public view returns (TokenConfig memory) {\\\\r\\\\n        require(i < numTokens(), \\\\\\\"token config not found\\\\\\\");\\\\r\\\\n        return _configs[i];\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for the cToken\\\\r\\\\n     * @param cToken The address of the cToken of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByCToken(address cToken) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getCTokenIndex(cToken);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for an underlying asset\\\\r\\\\n     * @param underlying The address of the underlying asset of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByUnderlying(address underlying) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getUnderlyingIndex(underlying);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x5cdbac709449ecaa73d9bc7e628d5e78fcda19a579fce7a8afc5ee62dbf33fa0\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapView.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport \\\\\\\"./UniswapConfig.sol\\\\\\\";\\\\r\\\\nimport \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\nstruct Observation {\\\\r\\\\n    uint timestamp;\\\\r\\\\n    uint acc;\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ncontract UniswapView is UniswapConfig {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n    \\\\r\\\\n    /// @notice Constant indicating that this contract is a UniswapView\\\\r\\\\n    bool constant public IS_UNISWAP_VIEW = true;\\\\r\\\\n\\\\r\\\\n    /// @notice The number of wei in 1 ETH\\\\r\\\\n    uint public constant ethBaseUnit = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice A common scaling factor to maintain precision\\\\r\\\\n    uint public constant expScale = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced\\\\r\\\\n    uint public immutable anchorPeriod;\\\\r\\\\n\\\\r\\\\n    /// @notice If new token configs can be added by anyone\\\\r\\\\n    bool public isPublic;\\\\r\\\\n\\\\r\\\\n    /// @notice Official prices by underlying\\\\r\\\\n    mapping(address => uint) public prices;\\\\r\\\\n\\\\r\\\\n    /// @notice The old observation for each underlying\\\\r\\\\n    mapping(address => Observation) public oldObservations;\\\\r\\\\n\\\\r\\\\n    /// @notice The new observation for each underlying\\\\r\\\\n    mapping(address => Observation) public newObservations;\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when the stored price is updated\\\\r\\\\n    event PriceUpdated(address underlying, uint price);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when anchor price is updated\\\\r\\\\n    event AnchorPriceUpdated(address underlying, uint anchorPrice, uint oldTimestamp, uint newTimestamp);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when the uniswap window changes\\\\r\\\\n    event UniswapWindowUpdated(address indexed underlying, uint oldTimestamp, uint newTimestamp, uint oldPrice, uint newPrice);\\\\r\\\\n\\\\r\\\\n    /// @dev The symbol hash for ETH\\\\r\\\\n    bytes32 constant ethHash = keccak256(abi.encodePacked(\\\\\\\"ETH\\\\\\\"));\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct a uniswap anchored view for a set of token configurations\\\\r\\\\n     * @dev Note that to avoid immature TWAPs, the system must run for at least a single anchorPeriod before using.\\\\r\\\\n     * @param anchorPeriod_ The minimum amount of time required for the old uniswap price accumulator to be replaced\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten (must be false if `_isPublic` is true)\\\\r\\\\n     * @param _isPublic If true, anyone can add assets, but they will be validated\\\\r\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n     */\\\\r\\\\n    constructor(uint anchorPeriod_,\\\\r\\\\n                TokenConfig[] memory configs,\\\\r\\\\n                bool _canAdminOverwrite,\\\\r\\\\n                bool _isPublic,\\\\r\\\\n                uint256 _maxSecondsBeforePriceIsStale) UniswapConfig(configs, _canAdminOverwrite, _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        anchorPeriod = anchorPeriod_;\\\\r\\\\n        isPublic = _isPublic;\\\\r\\\\n\\\\r\\\\n        // If public, force set admin to 0, require !canAdminOverwrite, and check token configs\\\\r\\\\n        if (isPublic) {\\\\r\\\\n            admin = address(0);\\\\r\\\\n            require(!canAdminOverwrite, \\\\\\\"canAdminOverwrite must be set to false for public UniswapView contracts.\\\\\\\");\\\\r\\\\n            checkTokenConfigs(configs);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        // Init token configs\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev UniswapV2Factory contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private UNISWAP_V2_FACTORY_ADDRESS = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;\\\\r\\\\n    \\\\r\\\\n    /**\\\\r\\\\n     * @dev WETH contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Verifies token configs\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     */\\\\r\\\\n    function checkTokenConfigs(TokenConfig[] memory configs) internal view {\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // Check symbolHash for ETH\\\\r\\\\n            require(configs[i].symbolHash != ethHash, \\\\\\\"ETH does not need a price feed as all price feeds are based in ETH.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check symbolHash against underlying symbol\\\\r\\\\n            require(keccak256(abi.encodePacked(IERC20(configs[i].underlying).symbol())) == configs[i].symbolHash, \\\\\\\"Symbol mismatch between token config and ERC20 symbol method.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check baseUnit against underlying decimals\\\\r\\\\n            require(10 ** uint256(IERC20(configs[i].underlying).decimals()) == configs[i].baseUnit, \\\\\\\"Incorrect token config base unit.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check for WETH\\\\r\\\\n            if (configs[i].underlying == WETH_ADDRESS) {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.FIXED_ETH, \\\\\\\"Invalid WETH token config price source: must be FIXED_ETH.\\\\\\\");\\\\r\\\\n                \\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 1e18, \\\\\\\"WETH token config fixed price must be 1e18.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                require(configs[i].uniswapMarket == address(0), \\\\\\\"WETH Uniswap market not necessary.\\\\\\\");\\\\r\\\\n                configs[i].isUniswapReversed = false;\\\\r\\\\n            } else {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.TWAP, \\\\\\\"Invalid token config price source: must be TWAP.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 0, \\\\\\\"Token config fixed price must be 0.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(UNISWAP_V2_FACTORY_ADDRESS, configs[i].underlying, WETH_ADDRESS));\\\\r\\\\n                require(configs[i].uniswapMarket == address(pair), \\\\\\\"Token config Uniswap market is not correct.\\\\\\\");\\\\r\\\\n                address token0 = pair.token0();\\\\r\\\\n                require((token0 == configs[i].underlying && !configs[i].isUniswapReversed) || (token0 != configs[i].underlying && configs[i].isUniswapReversed), \\\\\\\"Token config Uniswap reversal is incorrect.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Initialize token configs\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function initConfigs(TokenConfig[] memory configs) internal {\\\\r\\\\n        for (uint i = 0; i < configs.length; i++) {\\\\r\\\\n            TokenConfig memory config = configs[i];\\\\r\\\\n            require(config.baseUnit > 0, \\\\\\\"baseUnit must be greater than zero\\\\\\\");\\\\r\\\\n            address uniswapMarket = config.uniswapMarket;\\\\r\\\\n            if (config.priceSource == PriceSource.TWAP) {\\\\r\\\\n                require(uniswapMarket != address(0), \\\\\\\"TWAP prices must have a Uniswap market\\\\\\\");\\\\r\\\\n                address underlying = config.underlying;\\\\r\\\\n                uint cumulativePrice = currentCumulativePrice(config);\\\\r\\\\n                oldObservations[underlying].timestamp = block.timestamp;\\\\r\\\\n                newObservations[underlying].timestamp = block.timestamp;\\\\r\\\\n                oldObservations[underlying].acc = cumulativePrice;\\\\r\\\\n                newObservations[underlying].acc = cumulativePrice;\\\\r\\\\n                emit UniswapWindowUpdated(underlying, block.timestamp, block.timestamp, cumulativePrice, cumulativePrice);\\\\r\\\\n            } else {\\\\r\\\\n                require(config.underlying != 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, \\\\\\\"USDC must be TWAP because FIXED_USD prices are based on the USDC price.\\\\\\\");\\\\r\\\\n                require(uniswapMarket == address(0), \\\\\\\"only TWAP prices utilize a Uniswap market\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function add(TokenConfig[] memory configs) external {\\\\r\\\\n        // If public, check token configs; if private, check that msg.sender == admin\\\\r\\\\n        if (isPublic) checkTokenConfigs(configs);\\\\r\\\\n        else require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n\\\\r\\\\n        // Add and init token configs\\\\r\\\\n        _add(configs);\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the official price for an underlying token address\\\\r\\\\n     * @param underlying The underlying token address for which to get the price (set to zero address for ETH)\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals\\\\r\\\\n     */\\\\r\\\\n    function price(address underlying) external view returns (uint) {\\\\r\\\\n        TokenConfig memory config = getTokenConfigByUnderlying(underlying);\\\\r\\\\n        return priceInternal(config);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function priceInternal(TokenConfig memory config) internal view returns (uint) {\\\\r\\\\n        if (config.priceSource == PriceSource.TWAP) {\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) {\\\\r\\\\n                uint256 averageObservationTimestamp = (oldObservations[config.underlying].timestamp + newObservations[config.underlying].timestamp) / 2;\\\\r\\\\n                require(block.timestamp <= averageObservationTimestamp + maxSecondsBeforePriceIsStale, \\\\\\\"TWAP price is stale.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n            return prices[config.underlying];\\\\r\\\\n        }\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_USD) {\\\\r\\\\n            // Use USDC/ETH price (requires a TWAP-based token config for USDC) to convert from USD to ETH\\\\r\\\\n            uint ethPerUsd = prices[0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48];\\\\r\\\\n            require(ethPerUsd > 0, \\\\\\\"USDC price not set; cannot convert from USD to ETH.\\\\\\\");\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) {\\\\r\\\\n                uint256 averageObservationTimestamp = (oldObservations[0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48].timestamp + newObservations[0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48].timestamp) / 2;\\\\r\\\\n                require(block.timestamp <= averageObservationTimestamp + maxSecondsBeforePriceIsStale, \\\\\\\"USDC TWAP price is stale; cannot convert from USD to ETH.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n            return mul(config.fixedPrice, ethPerUsd) / 1e6;\\\\r\\\\n        }\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_ETH) return config.fixedPrice;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the underlying price of a cToken\\\\r\\\\n     * @dev Implements the PriceOracle interface for Compound v2.\\\\r\\\\n     * @param cToken The cToken address for price retrieval\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals, for the given cToken address\\\\r\\\\n     */\\\\r\\\\n    function getUnderlyingPrice(address cToken) external view returns (uint) {\\\\r\\\\n        if (CToken(cToken).isCEther()) return ethBaseUnit; // ETH does not have a token config as `prices` is based in ETH\\\\r\\\\n        TokenConfig memory config = getTokenConfigByCToken(cToken);\\\\r\\\\n         // Comptroller needs prices in the format: ${raw price} * 1e(36 - baseUnit)\\\\r\\\\n         // Since the prices in this view have 18 decimals, we must scale them by 1e(36 - 18 - baseUnit)\\\\r\\\\n        return mul(1e18, priceInternal(config)) / config.baseUnit;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Update Uniswap TWAP prices\\\\r\\\\n     * @dev We let anyone pay to post anything, but only prices from Uniswap will be stored in the view.\\\\r\\\\n     * @param underlyings The underlying token addresses for which to get and post TWAPs\\\\r\\\\n     */\\\\r\\\\n    function postPrices(address[] calldata underlyings) external {\\\\r\\\\n        // Try to update the view storage\\\\r\\\\n        for (uint i = 0; i < underlyings.length; i++) {\\\\r\\\\n            postPriceInternal(underlyings[i]);\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function postPriceInternal(address underlying) internal {\\\\r\\\\n        TokenConfig memory config = getTokenConfigByUnderlying(underlying);\\\\r\\\\n        require(config.priceSource == PriceSource.TWAP, \\\\\\\"only TWAP prices get posted\\\\\\\");\\\\r\\\\n        uint anchorPrice = fetchAnchorPrice(underlying, config);\\\\r\\\\n        prices[underlying] = anchorPrice;\\\\r\\\\n        emit PriceUpdated(underlying, anchorPrice);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current token/ETH price accumulator from Uniswap.\\\\r\\\\n     */\\\\r\\\\n    function currentCumulativePrice(TokenConfig memory config) internal view returns (uint) {\\\\r\\\\n        (uint cumulativePrice0, uint cumulativePrice1,) = UniswapV2OracleLibrary.currentCumulativePrices(config.uniswapMarket);\\\\r\\\\n        return config.isUniswapReversed ? cumulativePrice1 : cumulativePrice0;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current token/ETH price from Uniswap, with 18 decimals of precision.\\\\r\\\\n     */\\\\r\\\\n    function fetchAnchorPrice(address underlying, TokenConfig memory config) internal virtual returns (uint) {\\\\r\\\\n        (uint nowCumulativePrice, uint oldCumulativePrice, uint oldTimestamp) = pokeWindowValues(config);\\\\r\\\\n\\\\r\\\\n        // This should be impossible, but better safe than sorry\\\\r\\\\n        require(block.timestamp > oldTimestamp, \\\\\\\"now must come after before\\\\\\\");\\\\r\\\\n        uint timeElapsed = block.timestamp - oldTimestamp;\\\\r\\\\n\\\\r\\\\n        // Calculate uniswap time-weighted average price\\\\r\\\\n        // Underflow is a property of the accumulators: https://uniswap.org/audit.html#orgc9b3190\\\\r\\\\n        FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112(uint224((nowCumulativePrice - oldCumulativePrice) / timeElapsed));\\\\r\\\\n        uint rawUniswapPriceMantissa = priceAverage.decode112with18();\\\\r\\\\n        uint unscaledPriceMantissa = mul(rawUniswapPriceMantissa, 1e18);\\\\r\\\\n        uint anchorPrice;\\\\r\\\\n\\\\r\\\\n        // Adjust rawUniswapPrice according to the units of the non-ETH asset\\\\r\\\\n\\\\r\\\\n        // In the case of non-ETH tokens\\\\r\\\\n        // a. pokeWindowValues already handled uniswap reversed cases, so priceAverage will always be Token/ETH TWAP price.\\\\r\\\\n        // b. conversionFactor = 1e18\\\\r\\\\n        // unscaledPriceMantissa = priceAverage(token/ETH TWAP price) * expScale * conversionFactor\\\\r\\\\n        // so ->\\\\r\\\\n        // anchorPrice = priceAverage * tokenBaseUnit / ethBaseUnit * 1e18\\\\r\\\\n        //             = priceAverage * conversionFactor * tokenBaseUnit / ethBaseUnit\\\\r\\\\n        //             = unscaledPriceMantissa / expScale * tokenBaseUnit / ethBaseUnit\\\\r\\\\n        anchorPrice = mul(unscaledPriceMantissa, config.baseUnit) / ethBaseUnit / expScale;\\\\r\\\\n\\\\r\\\\n        emit AnchorPriceUpdated(underlying, anchorPrice, oldTimestamp, block.timestamp);\\\\r\\\\n\\\\r\\\\n        return anchorPrice;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Get both stored and pending prices for `underlyings` for comparison off-chain to determine if posting is needed.\\\\r\\\\n     */\\\\r\\\\n    function storedAndPendingPrices(address[] calldata underlyings) external returns (uint256[] memory, uint256[] memory) {\\\\r\\\\n        uint256[] memory storedPrices = new uint256[](underlyings.length);\\\\r\\\\n        uint256[] memory pendingPrices = new uint256[](underlyings.length);\\\\r\\\\n\\\\r\\\\n        for (uint256 i = 0; i < underlyings.length; i++) {\\\\r\\\\n            address underlying = underlyings[i];\\\\r\\\\n            TokenConfig memory config = getTokenConfigByUnderlying(underlying);\\\\r\\\\n            require(config.priceSource == PriceSource.TWAP, \\\\\\\"only TWAP prices get posted\\\\\\\");\\\\r\\\\n            storedPrices[i] = prices[underlying];\\\\r\\\\n            pendingPrices[i] = fetchAnchorPrice(underlying, config);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        return (storedPrices, pendingPrices);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Get time-weighted average prices for a token at the current timestamp.\\\\r\\\\n     *  Update new and old observations of lagging window if period elapsed.\\\\r\\\\n     */\\\\r\\\\n    function pokeWindowValues(TokenConfig memory config) internal returns (uint, uint, uint) {\\\\r\\\\n        address underlying = config.underlying;\\\\r\\\\n        uint cumulativePrice = currentCumulativePrice(config);\\\\r\\\\n\\\\r\\\\n        Observation memory newObservation = newObservations[underlying];\\\\r\\\\n\\\\r\\\\n        // Update new and old observations if elapsed time is greater than or equal to anchor period\\\\r\\\\n        uint timeElapsed = block.timestamp - newObservation.timestamp;\\\\r\\\\n        if (timeElapsed >= anchorPeriod) {\\\\r\\\\n            oldObservations[underlying].timestamp = newObservation.timestamp;\\\\r\\\\n            oldObservations[underlying].acc = newObservation.acc;\\\\r\\\\n\\\\r\\\\n            newObservations[underlying].timestamp = block.timestamp;\\\\r\\\\n            newObservations[underlying].acc = cumulativePrice;\\\\r\\\\n            emit UniswapWindowUpdated(config.underlying, newObservation.timestamp, block.timestamp, newObservation.acc, cumulativePrice);\\\\r\\\\n        }\\\\r\\\\n        return (cumulativePrice, oldObservations[underlying].acc, oldObservations[underlying].timestamp);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Overflow proof multiplication\\\\r\\\\n    function mul(uint a, uint b) internal pure returns (uint) {\\\\r\\\\n        if (a == 0) return 0;\\\\r\\\\n        uint c = a * b;\\\\r\\\\n        require(c / a == b, \\\\\\\"multiplication overflow\\\\\\\");\\\\r\\\\n        return c;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xb9282ac9a5d271c0e166a345d382900c69a03ab866889cf17a178676fa6a96a5\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"tests/contracts/MockUniswapAnchoredView.sol:MockUniswapAnchoredView\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"priceData_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorToleranceMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchor\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceGuarded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ReporterInvalidated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_ANCHORED_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"anchorPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbol\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbolHash\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"invalidateReporter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isSecure\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"lowerBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"messages\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"symbols\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"priceData\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"priceTimestamps\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporterInvalidated\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setAnchorPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"upperBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"6101206040523480156200001257600080fd5b506040516200474238038062004742833981016040819052620000359162001238565b6003805460ff60a01b196001600160a01b031990911633171690556000600481905585908590859085908590808083818062000071836200015f565b5050506001600160601b0319606089811b821660805288901b1660a052610100859052600c805483151560ff19909116179055670de0b6b3a7640000198611620000c65785670de0b6b3a764000001620000ca565b6000195b60c052670de0b6b3a76400008610620000e5576001620000f1565b85670de0b6b3a7640000035b60e052600c5460ff16156200014157600354600160a01b900460ff1615620001365760405162461bcd60e51b81526004016200012d906200196c565b60405180910390fd5b62000141846200042e565b6200014c8462000be4565b5050505050505050505050505062001cc9565b60005b81518110156200042a57600354600160a01b900460ff166200022957600260008383815181106200018f57fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615620001d75760405162461bcd60e51b81526004016200012d90620017ad565b600b6000838381518110620001e857fe5b60209081029190910181015181015182528101919091526040016000205460ff1615620002295760405162461bcd60e51b81526004016200012d9062001577565b60008282815181106200023857fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115620002b257fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106200032457fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600260008484815181106200036757fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008054905003600a6000848481518110620003c457fe5b6020026020010151602001518152602001908152602001600020819055506001600b6000848481518110620003f557fe5b6020908102919091018101518101518252810191909152604001600020805460ff191691151591909117905560010162000162565b5050565b60005b81518110156200042a576040516020016200044c9062001517565b604051602081830303815290604052805190602001208282815181106200046f57fe5b60200260200101516020015114620005ea578181815181106200048e57fe5b602002602001015160a001516001600160a01b031673b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b031614620004e15760405162461bcd60e51b81526004016200012d90620016df565b818181518110620004ee57fe5b602002602001015160c00151156200051a5760405162461bcd60e51b81526004016200012d906200173c565b60006001600160a01b03168282815181106200053257fe5b6020026020010151600001516001600160a01b031614620005675760405162461bcd60e51b81526004016200012d9062001a82565b8181815181106200057457fe5b602002602001015160800151600014620005a25760405162461bcd60e51b81526004016200012d9062001b98565b670de0b6b3a7640000828281518110620005b857fe5b60200260200101516040015114620005e45760405162461bcd60e51b81526004016200012d90620018e3565b62000bdb565b6000828281518110620005f957fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200063e57600080fd5b505afa15801562000653573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200067d919081019062001334565b6040516020016200068f919062001480565b604051602081830303815290604052805190602001209050828281518110620006b457fe5b6020026020010151602001518114806200073c5750604051602001620006da9062001507565b60405160208183030381529060405280519060200120811480156200073c57506040516020016200070b9062001526565b604051602081830303815290604052805190602001208383815181106200072e57fe5b602002602001015160200151145b6200075b5760405162461bcd60e51b81526004016200012d906200183b565b8282815181106200076857fe5b6020026020010151604001518383815181106200078157fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620007c657600080fd5b505afa158015620007db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080191906200143b565b60ff16600a0a14620008275760405162461bcd60e51b81526004016200012d906200192b565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168383815181106200085257fe5b6020026020010151600001516001600160a01b031614156200096d5760008383815181106200087d57fe5b60200260200101516060015160048111156200089557fe5b14620008b55760405162461bcd60e51b81526004016200012d90620019da565b828281518110620008c257fe5b602002602001015160800151670de0b6b3a764000014620008f75760405162461bcd60e51b81526004016200012d9062001b16565b60006001600160a01b03168383815181106200090f57fe5b602002602001015160a001516001600160a01b031614620009445760405162461bcd60e51b81526004016200012d90620017f9565b60008383815181106200095357fe5b602090810291909101015190151560c09091015262000bd9565b60028383815181106200097c57fe5b60200260200101516060015160048111156200099457fe5b14620009b45760405162461bcd60e51b81526004016200012d90620015b7565b828281518110620009c157fe5b602002602001015160800151600014620009ef5760405162461bcd60e51b81526004016200012d9062001657565b600062000a49735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f85858151811062000a1757fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc262000d4260201b62000c421760201c565b9050806001600160a01b031684848151811062000a6257fe5b602002602001015160a001516001600160a01b03161462000a975760405162461bcd60e51b81526004016200012d9062001898565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ad357600080fd5b505afa15801562000ae8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b0e919062001212565b905084848151811062000b1d57fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614801562000b60575084848151811062000b5257fe5b602002602001015160c00151155b8062000bb7575084848151811062000b7457fe5b6020026020010151600001516001600160a01b0316816001600160a01b03161415801562000bb7575084848151811062000baa57fe5b602002602001015160c001515b62000bd65760405162461bcd60e51b81526004016200012d9062001a37565b50505b505b60010162000431565b60005b81518110156200042a5762000bfb62001110565b82828151811062000c0857fe5b60200260200101519050600081604001511162000c395760405162461bcd60e51b81526004016200012d9062001535565b60a081015160028260600151600481111562000c5157fe5b141562000d0d576001600160a01b03811662000c815760405162461bcd60e51b81526004016200012d9062001614565b6020820151600062000c938462000db7565b600083815260086020908152604080832042808255600990935292819020828155600193840185905592909201839055905191925083917fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9162000cfd9181908690819062001c25565b60405180910390a2505062000d37565b6001600160a01b0381161562000d375760405162461bcd60e51b81526004016200012d9062001bdf565b505060010162000be7565b6000808062000d52858562000df6565b9150915085828260405160200162000d6c9291906200145e565b6040516020818303038152906040528051906020012060405160200162000d959291906200149e565b60408051601f1981840301815291905280516020909101209695505050505050565b600080600062000dd68460a0015162000e8860201b62000cb21760201c565b50915091508360c0015162000dec578162000dee565b805b949350505050565b600080826001600160a01b0316846001600160a01b0316141562000e2e5760405162461bcd60e51b81526004016200012d906200169a565b826001600160a01b0316846001600160a01b03161062000e5057828462000e53565b83835b90925090506001600160a01b03821662000e815760405162461bcd60e51b81526004016200012d9062001adf565b9250929050565b6000808062000e966200108b565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ed257600080fd5b505afa15801562000ee7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f0d919062001422565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b15801562000f4957600080fd5b505afa15801562000f5e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f84919062001422565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801562000fc557600080fd5b505afa15801562000fda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010009190620013c8565b9250925092508363ffffffff168163ffffffff16146200108157600081850390508063ffffffff166200103f84866200109560201b62000e871760201c565b600001516001600160e01b031602870196508063ffffffff166200106f85856200109560201b62000e871760201c565b516001600160e01b0316029590950194505b5050509193909250565b63ffffffff421690565b6200109f6200114d565b6000826001600160701b031611620010cb5760405162461bcd60e51b81526004016200012d9062001b61565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b1681620010fa57fe5b046001600160e01b031681525090505b92915050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b80516200110a8162001c9a565b805180151581146200110a57600080fd5b600060e082840312156200118f578081fd5b6200119b60e062001c40565b90508151620011aa8162001c9a565b808252506020820151602082015260408201516040820152606082015160058110620011d557600080fd5b606082015260808281015190820152620011f38360a084016200115f565b60a0820152620012078360c084016200116c565b60c082015292915050565b60006020828403121562001224578081fd5b8151620012318162001c9a565b9392505050565b600080600080600060a0868803121562001250578081fd5b85516200125d8162001c9a565b80955050602080870151620012728162001c9a565b6040880151606089015160808a015192975090955093506001600160401b03808211156200129e578384fd5b818901915089601f830112620012b2578384fd5b815181811115620012c1578485fd5b620012d0848583020162001c40565b818152848101925083850160e0808402860187018e1015620012f0578788fd5b8795505b838610156200132057620013098e836200117d565b8552600195909501949386019390810190620012f4565b505080955050505050509295509295909350565b60006020828403121562001346578081fd5b81516001600160401b03808211156200135d578283fd5b818401915084601f83011262001371578283fd5b81518181111562001380578384fd5b62001395601f8201601f191660200162001c40565b9150808252856020828501011115620013ac578384fd5b620013bf81602084016020860162001c67565b50949350505050565b600080600060608486031215620013dd578283fd5b8351620013ea8162001cb3565b6020850151909350620013fd8162001cb3565b604085015190925063ffffffff8116811462001417578182fd5b809150509250925092565b60006020828403121562001434578081fd5b5051919050565b6000602082840312156200144d578081fd5b815160ff8116811462001231578182fd5b6001600160601b0319606093841b811682529190921b16601482015260280190565b600082516200149481846020870162001c67565b9190910192915050565b7fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b635742544360e01b815260040190565b6208aa8960eb1b815260030190565b6242544360e81b815260030190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b6020808252603190820152600080516020620047228339815191526040820152703a3434b99039bcb6b137b6103430b9b41760791b606082015260800190565b60208082526034908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201527f653a206d757374206265205245504f525445522e000000000000000000000000606082015260800190565b60208082526023908201527f7265706f7274656420707269636573206d757374206861766520616e20616e636040820152623437b960e91b606082015260800190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526033908201527f496e636f727265637420556e6973776170206d61726b657420666f722045544860408201527f3a206d75737420626520555344432d4554482e00000000000000000000000000606082015260800190565b6020808252604b908201527f496e636f727265637420556e6973776170206d61726b6574207265766572736160408201527f6c20666f72204554483a206d75737420626520555344432d45544820286e6f7460608201526a103932bb32b939b2b2149760a91b608082015260a00190565b6020808252603e908201526000805160206200472283398151915260408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b60208082526028908201527f45544820746f6b656e20636f6e666967206261736520756e6974206d7573742060408201526731329018b2989c1760c11b606082015260800190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b60208082526048908201527f63616e41646d696e4f7665727772697465206d7573742062652073657420746f60408201527f2066616c736520666f722073656375726520556e69737761705669657720636f606082015267373a3930b1ba399760c11b608082015260a00190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b6020808252603a908201527f556e6465726c79696e6720746f6b656e2061646472657373206d75737420626560408201527f20746865207a65726f206164647265737320666f72204554482e000000000000606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b60208082526027908201527f45544820746f6b656e20636f6e666967206669786564207072696365206d75736040820152663a10313290181760c91b606082015260800190565b60208082526026908201527f6f6e6c79207265706f7274656420707269636573207574696c697a6520616e2060408201526530b731b437b960d11b606082015260800190565b93845260208401929092526040830152606082015260800190565b6040518181016001600160401b038111828210171562001c5f57600080fd5b604052919050565b60005b8381101562001c8457818101518382015260200162001c6a565b8381111562001c94576000848401525b50505050565b6001600160a01b038116811462001cb057600080fd5b50565b6001600160701b038116811462001cb057600080fd5b60805160601c60a05160601c60c05160e051610100516129f062001d32600039806109715250806108ce5280611b785250806104965280611b4d52508061040252806107b85280610848528061155d52508061094d52806109d8528061152e52506129f06000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80638a0038881161010f578063e073a241116100a2578063ecc1e98411610071578063ecc1e984146103bf578063f851a440146103d2578063fc57d4df146103da578063fe2c6198146103ed576101f0565b8063e073a24114610394578063e61a5fe41461039c578063e9206d78146103a4578063eaa1c2ca146103ac576101f0565b806392b84357116100de57806392b84357146103665780639f5996311461036e578063c65ccb4214610381578063d1b353b41461031d576101f0565b80638a003888146103255780638aba91b4146103385780638e499bcf1461034b5780638f28397014610353576101f0565b8063300de3ca1161018757806360846bc61161015657806360846bc6146102fa578063651ed7881461030d578063656b0fd11461031557806369aa3ac61461031d576101f0565b8063300de3ca146102ab57806337c0e12d146102b3578063482a6193146102d45780634da21942146102e7576101f0565b806324105209116101c35780632410520914610268578063276c2cba1461027057806329da32fb146102835780632d1c668f14610296576101f0565b8063010ec441146101f55780631a1252041461021357806322798faf1461023357806322ddeb7d14610248575b600080fd5b6101fd610400565b60405161020a91906122ac565b60405180910390f35b610226610221366004611f2c565b610424565b60405161020a919061282b565b61023b610479565b60405161020a91906122e4565b61025b610256366004611f2c565b610482565b60405161020a9190612893565b61025b610494565b61022661027e366004611fe1565b6104b8565b61025b610291366004611f2c565b6104f5565b6102a96102a4366004611e61565b610507565b005b61023b610546565b6102c66102c1366004611f2c565b61054b565b60405161020a92919061289c565b6101fd6102e2366004611f81565b610564565b6102266102f5366004611d94565b610611565b61025b610308366004611f2c565b610624565b61023b610636565b61023b61063f565b61025b61064f565b610226610333366004611f2c565b61065b565b6102a9610346366004611f81565b610734565b61025b61087a565b6102a9610361366004611d94565b610880565b61025b6108cc565b61022661037c366004611d94565b6108f0565b6102a961038f366004612094565b610903565b61025b610945565b6101fd61094b565b61025b61096f565b6102c66103ba366004611f2c565b610993565b6102a96103cd366004611dcc565b6109ac565b6101fd610b46565b61025b6103e8366004611d94565b610b55565b61025b6103fb366004611fe1565b610c1d565b7f000000000000000000000000000000000000000000000000000000000000000081565b61042c611bac565b600061043783610f02565b905060001981146104535761044b8161065b565b915050610474565b60405162461bcd60e51b815260040161046b90612512565b60405180910390fd5b919050565b600c5460ff1681565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6104c0611bac565b6104ef826040516020016104d491906121e8565b60405160208183030381529060405280519060200120610424565b92915050565b600d6020526000908152604090205481565b6003546001600160a01b031633146105315760405162461bcd60e51b815260040161046b90612587565b61053a81610f33565b610543816111f1565b50565b600181565b6008602052600090815260409020805460019091015482565b6000806000808480602001905181019061057e9190611f44565b9250925092506000868051906020012060405160200161059e9190612204565b604051602081830303815290604052805190602001209050600181838686604051600081526020016040526040516105d994939291906122ef565b6020604051602081039080840390855afa1580156105fb573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b610619611bac565b60006104378361133a565b60056020526000908152604090205481565b60075460ff1681565b600354600160a01b900460ff1681565b670de0b6b3a764000081565b610663611bac565b61066b61087a565b82106106895760405162461bcd60e51b815260040161046b90612512565b6000828154811061069657fe5b60009182526020918290206040805160e081018252600690930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154909190606083019060ff1660048111156106f057fe5b60048111156106fb57fe5b8152600482015460208201526005909101546001600160a01b0381166040830152600160a01b900460ff16151560609091015292915050565b60608280602001905181019061074a9190612045565b50905060405160200161075c90612235565b604051602081830303815290604052805190602001208160405160200161078391906121e8565b60405160208183030381529060405280519060200120146107b65760405162461bcd60e51b815260040161046b906126ff565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107ea8484610564565b6001600160a01b0316146108105760405162461bcd60e51b815260040161046b906125be565b6007805460ff191660011790556040517f98a13f7b181a3a1f99c871e7a3507d4a037d386d157279f978e0d555ae9fe74d9061086d907f0000000000000000000000000000000000000000000000000000000000000000906122ac565b60405180910390a1505050565b60005490565b6003546001600160a01b031633146108aa5760405162461bcd60e51b815260040161046b90612587565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6108f8611bac565b60006104378361137e565b80600d60008460405160200161091991906121e8565b604051602081830303815290604052805190602001208152602001908152602001600020819055505050565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009602052600090815260409020805460019091015482565b8483146109cb5760405162461bcd60e51b815260040161046b9061276b565b60005b85811015610abf577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338636e9a888884818110610a1157fe5b9050602002810190610a2391906128c5565b888886818110610a2f57fe5b9050602002810190610a4191906128c5565b6040518563ffffffff1660e01b8152600401610a60949392919061230d565b600060405180830381600087803b158015610a7a57600080fd5b505af1158015610a8e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ab69190810190612013565b506001016109ce565b506000610aca611476565b905060005b82811015610b3c57610b34848483818110610ae657fe5b9050602002810190610af891906128c5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692506114bc915050565b600101610acf565b5050505050505050565b6003546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b9057600080fd5b505afa158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc89190611f10565b15610bdc5750670de0b6b3a7640000610474565b610be4611bac565b610bed836108f0565b90508060400151610c0e670de0b6b3a7640000610c0984611768565b611a0b565b81610c1557fe5b049392505050565b6000610c27611bac565b610c30836104b8565b9050610c3b81611768565b9392505050565b6000806000610c518585611a45565b91509150858282604051602001610c699291906121c1565b60405160208183030381529060405280519060200120604051602001610c90929190612247565b60408051601f1981840301815291905280516020909101209695505050505050565b6000806000610cbf611acf565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b158015610cfa57600080fd5b505afa158015610d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d32919061211f565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6d57600080fd5b505afa158015610d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da5919061211f565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610de557600080fd5b505afa158015610df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1d91906120d6565b9250925092508363ffffffff168163ffffffff1614610e7d5780840363ffffffff8116610e4a8486610e87565b516001600160e01b031602969096019563ffffffff8116610e6b8585610e87565b516001600160e01b0316029590950194505b5050509193909250565b610e8f611be9565b6000826001600160701b031611610eb85760405162461bcd60e51b815260040161046b906127ae565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681610eed57fe5b046001600160e01b0316815250905092915050565b6000818152600b602052604081205460ff16610f20576000196104ef565b506000908152600a602052604090205490565b60005b81518110156111ed57600354600160a01b900460ff16610ff35760026000838381518110610f6057fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615610fa55760405162461bcd60e51b815260040161046b9061260e565b600b6000838381518110610fb557fe5b60209081029190910181015181015182528101919091526040016000205460ff1615610ff35760405162461bcd60e51b815260040161046b906123f6565b600082828151811061100157fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff199091169083600481111561107a57fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106110eb57fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016002600084848151811061112d57fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008054905003600a600084848151811061118957fe5b6020026020010151602001518152602001908152602001600020819055506001600b60008484815181106111b957fe5b6020908102919091018101518101518252810191909152604001600020805460ff1916911515919091179055600101610f36565b5050565b60005b81518110156111ed57611205611bac565b82828151811061121157fe5b60200260200101519050600081604001511161123f5760405162461bcd60e51b815260040161046b906123b4565b60a081015160028260600151600481111561125657fe5b1415611309576001600160a01b0381166112825760405162461bcd60e51b815260040161046b90612498565b6020820151600061129284611ad9565b600083815260086020908152604080832042808255600990935292819020828155600193840185905592909201839055905191925083917fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a916112fa918190869081906128aa565b60405180910390a25050611330565b6001600160a01b038116156113305760405162461bcd60e51b815260040161046b906127e5565b50506001016111f4565b6001600160a01b03811660009081526002602052604081205460ff16611362576000196104ef565b506001600160a01b031660009081526001602052604090205490565b60006104ef826001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156113bc57600080fd5b505afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190611f10565b61146e57826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561143157600080fd5b505afa158015611445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114699190611db0565b611471565b60005b61133a565b60006114b76040518060400160405280600381526020016208aa8960eb1b8152506114a96040516020016104d49061229d565b670de0b6b3a7640000611b09565b905090565b6114c4611bac565b6114cd836104b8565b90506002816060015160048111156114e157fe5b146114fe5760405162461bcd60e51b815260040161046b906126c8565b60008360405160200161151191906121e8565b6040516020818303038152906040528051906020012090506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc2525ab7f0000000000000000000000000000000000000000000000000000000000000000886040518363ffffffff1660e01b815260040161159a9291906122c0565b604080518083038186803b1580156115b157600080fd5b505afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190612137565b6001600160401b031691506001600160401b0316915060006040516020016116109061229d565b60405160208183030381529060405280519060200120841415611634575084611642565b61163f878688611b09565b90505b60075460ff16156116c45760008481526005602090815260408083208490556009825280832054600883528184205460069093529281902060029290930191909104909155517f159e83f4712ba2552e68be9d848e49bf6dd35c24f19564ffd523b6549450a2f4906116b7908990849061233f565b60405180910390a161175f565b6116ce8382611b24565b15611723576000848152600560209081526040808320869055600690915290819020839055517f159e83f4712ba2552e68be9d848e49bf6dd35c24f19564ffd523b6549450a2f4906116b7908990869061233f565b7f90756d4c8646a4591078abac0e4e32dfa8437921729e36d51b88b659d265bfde87848360405161175693929190612361565b60405180910390a15b50505050505050565b60006040516020016117799061229d565b60405160208183030381529060405280519060200120826020015114156117a95750670de0b6b3a7640000610474565b6002826060015160048111156117bb57fe5b14156118fa576000600560006040516020016117d69061229d565b6040516020818303038152906040528051906020012081526020019081526020016000205490506000811161181d5760405162461bcd60e51b815260040161046b90612447565b60045415611880576004546006600060405160200161183b9061229d565b60405160208183030381529060405280519060200120815260200190815260200160002054014211156118805760405162461bcd60e51b815260040161046b9061266b565b600454156118c057600454602080850151600090815260069091526040902054014211156118c05760405162461bcd60e51b815260040161046b90612386565b806118ea600560008660200151815260200190815260200160002054670de0b6b3a7640000611a0b565b816118f157fe5b04915050610474565b60018260600151600481111561190c57fe5b14156119e8576000600560006040516020016119279061229d565b6040516020818303038152906040528051906020012081526020019081526020016000205490506000811161196e5760405162461bcd60e51b815260040161046b90612447565b600454156119d1576004546006600060405160200161198c9061229d565b60405160208183030381529060405280519060200120815260200190815260200160002054014211156119d15760405162461bcd60e51b815260040161046b9061266b565b806118ea8460800151670de0b6b3a7640000611a0b565b6000826060015160048111156119fa57fe5b141561047457506080810151610474565b600082611a1a575060006104ef565b82820282848281611a2757fe5b0414610c3b5760405162461bcd60e51b815260040161046b906124db565b600080826001600160a01b0316846001600160a01b03161415611a7a5760405162461bcd60e51b815260040161046b90612542565b826001600160a01b0316846001600160a01b031610611a9a578284611a9d565b83835b90925090506001600160a01b038216611ac85760405162461bcd60e51b815260040161046b90612734565b9250929050565b63ffffffff421690565b6000806000611aeb8460a00151610cb2565b50915091508360c00151611aff5781611b01565b805b949350505050565b506020908101516000908152600d9091526040902054919050565b60008215611ba357600083611b4184670de0b6b3a7640000611a0b565b81611b4857fe5b0490507f00000000000000000000000000000000000000000000000000000000000000008111158015611b9b57507f00000000000000000000000000000000000000000000000000000000000000008110155b9150506104ef565b50600092915050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b80356104ef81612982565b60008083601f840112611c17578182fd5b5081356001600160401b03811115611c2d578182fd5b6020830191508360208083028501011115611ac857600080fd5b80356104ef81612997565b600082601f830112611c62578081fd5b8135611c75611c708261292f565b612909565b9150808252836020828501011115611c8c57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112611cb5578081fd5b8151611cc3611c708261292f565b9150808252836020828501011115611cda57600080fd5b611ceb816020840160208601612952565b5092915050565b600060e08284031215611d03578081fd5b611d0d60e0612909565b90508135611d1a81612982565b808252506020820135602082015260408201356040820152606082013560058110611d4457600080fd5b606082015260808281013590820152611d608360a08401611bfb565b60a0820152611d728360c08401611c47565b60c082015292915050565b80516001600160401b03811681146104ef57600080fd5b600060208284031215611da5578081fd5b8135610c3b81612982565b600060208284031215611dc1578081fd5b8151610c3b81612982565b60008060008060008060608789031215611de4578182fd5b86356001600160401b0380821115611dfa578384fd5b611e068a838b01611c06565b90985096506020890135915080821115611e1e578384fd5b611e2a8a838b01611c06565b90965094506040890135915080821115611e42578384fd5b50611e4f89828a01611c06565b979a9699509497509295939492505050565b60006020808385031215611e73578182fd5b82356001600160401b0380821115611e89578384fd5b818501915085601f830112611e9c578384fd5b813581811115611eaa578485fd5b611eb78485830201612909565b818152848101925083850160e0808402860187018a1015611ed6578788fd5b8795505b83861015611f0257611eec8a83611cf2565b8552600195909501949386019390810190611eda565b509098975050505050505050565b600060208284031215611f21578081fd5b8151610c3b81612997565b600060208284031215611f3d578081fd5b5035919050565b600080600060608486031215611f58578081fd5b8351925060208401519150604084015160ff81168114611f76578182fd5b809150509250925092565b60008060408385031215611f93578182fd5b82356001600160401b0380821115611fa9578384fd5b611fb586838701611c52565b93506020850135915080821115611fca578283fd5b50611fd785828601611c52565b9150509250929050565b600060208284031215611ff2578081fd5b81356001600160401b03811115612007578182fd5b611b0184828501611c52565b600060208284031215612024578081fd5b81516001600160401b03811115612039578182fd5b611b0184828501611ca5565b60008060408385031215612057578182fd5b82516001600160401b0381111561206c578283fd5b61207885828601611ca5565b925050602083015161208981612982565b809150509250929050565b600080604083850312156120a6578182fd5b82356001600160401b038111156120bb578283fd5b6120c785828601611c52565b95602094909401359450505050565b6000806000606084860312156120ea578081fd5b83516120f5816129a5565b6020850151909350612106816129a5565b604085015190925063ffffffff81168114611f76578182fd5b600060208284031215612130578081fd5b5051919050565b60008060408385031215612149578182fd5b6121538484611d7d565b91506121628460208501611d7d565b90509250929050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526121ad816020860160208601612952565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b600082516121fa818460208701612952565b9190910192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b65726f7461746560d01b815260060190565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b6001600160a01b0383168152604060208201819052600090611b0190830184612195565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b60006040825261232160408301868861216b565b828103602084015261233481858761216b565b979650505050505050565b6000604082526123526040830185612195565b90508260208301529392505050565b6000606082526123746060830186612195565b60208301949094525060400152919050565b6020808252601490820152732a2ba0a810383934b1b29034b99039ba30b6329760611b604082015260600190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526031908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f72206040820152703a3434b99039bcb6b137b6103430b9b41760791b606082015260800190565b60208082526031908201527f455448207072696365206e6f74207365742c2063616e6e6f7420636f6e7665726040820152700e840cce4deda40aaa68840e8de408aa89607b1b606082015260800190565b60208082526023908201527f7265706f7274656420707269636573206d757374206861766520616e20616e636040820152623437b960e91b606082015260800190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526017908201527f6d73672e73656e646572206973206e6f742061646d696e000000000000000000604082015260600190565b60208082526030908201527f696e76616c69646174696f6e206d657373616765206d75737420636f6d65206660408201526f3937b6903a3432903932b837b93a32b960811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526038908201527f4554482054574150207072696365206973207374616c653b2063616e6e6f742060408201527f636f6e766572742066726f6d2055534420746f204554482e0000000000000000606082015260800190565b6020808252601f908201527f6f6e6c79207265706f72746572207072696365732067657420706f7374656400604082015260600190565b6020808252818101527f696e76616c6964206d657373616765206d7573742062652027726f7461746527604082015260600190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526023908201527f6d6573736167657320616e64207369676e617475726573206d75737420626520604082015262313a3160e81b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b60208082526026908201527f6f6e6c79207265706f7274656420707269636573207574696c697a6520616e2060408201526530b731b437b960d11b606082015260800190565b81516001600160a01b0390811682526020808401519083015260408084015190830152606083015160e0830191906005811061286357fe5b80606085015250608084015160808401528060a08501511660a08401525060c0830151151560c083015292915050565b90815260200190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6000808335601e198436030181126128db578283fd5b8301803591506001600160401b038211156128f4578283fd5b602001915036819003821315611ac857600080fd5b6040518181016001600160401b038111828210171561292757600080fd5b604052919050565b60006001600160401b03821115612944578081fd5b50601f01601f191660200190565b60005b8381101561296d578181015183820152602001612955565b8381111561297c576000848401525b50505050565b6001600160a01b038116811461054357600080fd5b801515811461054357600080fd5b6001600160701b038116811461054357600080fdfea26469706673582212208008be36e84812764142fe0c5b68727fdb25bea567195778ea22ad15da6a73cd64736f6c634300060c0033546f6b656e20636f6e66696720616c72656164792065786973747320666f7220\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"priceData_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorToleranceMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchor\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceGuarded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ReporterInvalidated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_ANCHORED_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"anchorPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbol\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbolHash\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"invalidateReporter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isSecure\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"lowerBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"messages\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"symbols\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"priceData\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"priceTimestamps\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporterInvalidated\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setAnchorPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"upperBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"params\\\":{\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\"}},\\\"getTokenConfig(uint256)\\\":{\\\"params\\\":{\\\"i\\\":\\\"The index of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByCToken(address)\\\":{\\\"params\\\":{\\\"cToken\\\":\\\"The address of the cToken of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigBySymbol(string)\\\":{\\\"params\\\":{\\\"symbol\\\":\\\"The symbol of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigBySymbolHash(bytes32)\\\":{\\\"params\\\":{\\\"symbolHash\\\":\\\"The keccack256 of the symbol of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The address of the underlying asset of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the PriceOracle interface for Compound v2.\\\",\\\"params\\\":{\\\"cToken\\\":\\\"The cToken address for price retrieval\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals, for the given cToken address\\\"}},\\\"invalidateReporter(bytes,bytes)\\\":{\\\"details\\\":\\\"Only the reporter may sign a message which allows it to invalidate itself.  To be used in cases of emergency, if the reporter thinks their key may be compromised.\\\",\\\"params\\\":{\\\"message\\\":\\\"The data that was presumably signed\\\",\\\"signature\\\":\\\"The fingerprint of the data + private key\\\"}},\\\"postPrices(bytes[],bytes[],string[])\\\":{\\\"details\\\":\\\"We let anyone pay to post anything, but only prices from configured reporter will be stored in the view.\\\",\\\"params\\\":{\\\"messages\\\":\\\"The messages to post to the oracle\\\",\\\"signatures\\\":\\\"The signatures for the corresponding messages\\\",\\\"symbols\\\":\\\"The symbols to compare to anchor for authoritative reading\\\"}},\\\"price(string)\\\":{\\\"params\\\":{\\\"symbol\\\":\\\"The symbol to fetch the price of\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals\\\"}},\\\"source(bytes,bytes)\\\":{\\\"details\\\":\\\"Comparing to a claimed address would add nothing,  as the caller could simply perform the recover and claim that address.\\\",\\\"params\\\":{\\\"message\\\":\\\"The data that was presumably signed\\\",\\\"signature\\\":\\\"The fingerprint of the data + private key\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The source address which signed the message, presumably\\\"}}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"AnchorPriceUpdated(string,uint256,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when anchor price is updated\\\"},\\\"PriceGuarded(string,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when new prices are posted but the stored price is not updated due to the anchor\\\"},\\\"PriceUpdated(string,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the stored price is updated\\\"},\\\"ReporterInvalidated(address)\\\":{\\\"notice\\\":\\\"The event emitted when reporter invalidates itself\\\"},\\\"UniswapWindowUpdated(bytes32,uint256,uint256,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the uniswap window changes\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"IS_UNISWAP_ANCHORED_VIEW()\\\":{\\\"notice\\\":\\\"Constant indicating that this contract is a UniswapAnchoredView\\\"},\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"notice\\\":\\\"Add new asset(s)\\\"},\\\"admin()\\\":{\\\"notice\\\":\\\"Admin address\\\"},\\\"anchorPeriod()\\\":{\\\"notice\\\":\\\"The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced\\\"},\\\"canAdminOverwrite()\\\":{\\\"notice\\\":\\\"Whether or not existing token configs can be overwritten\\\"},\\\"changeAdmin(address)\\\":{\\\"notice\\\":\\\"Changes the admin\\\"},\\\"ethBaseUnit()\\\":{\\\"notice\\\":\\\"The number of wei in 1 ETH\\\"},\\\"expScale()\\\":{\\\"notice\\\":\\\"A common scaling factor to maintain precision\\\"},\\\"getTokenConfig(uint256)\\\":{\\\"notice\\\":\\\"Get the i-th config, according to the order they were passed in originally\\\"},\\\"getTokenConfigByCToken(address)\\\":{\\\"notice\\\":\\\"Get the config for the cToken\\\"},\\\"getTokenConfigBySymbol(string)\\\":{\\\"notice\\\":\\\"Get the config for symbol\\\"},\\\"getTokenConfigBySymbolHash(bytes32)\\\":{\\\"notice\\\":\\\"Get the config for the symbolHash\\\"},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"notice\\\":\\\"Get the config for an underlying asset\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Get the underlying price of a cToken\\\"},\\\"invalidateReporter(bytes,bytes)\\\":{\\\"notice\\\":\\\"Invalidate the reporter, and fall back to using anchor directly in all cases\\\"},\\\"lowerBoundAnchorRatio()\\\":{\\\"notice\\\":\\\"The lowest ratio of the new price to the anchor price that will still trigger the price to be updated\\\"},\\\"maxSecondsBeforePriceIsStale()\\\":{\\\"notice\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\"},\\\"newObservations(bytes32)\\\":{\\\"notice\\\":\\\"The new observation for each symbolHash\\\"},\\\"numTokens()\\\":{\\\"notice\\\":\\\"The number of tokens this contract actually supports\\\"},\\\"oldObservations(bytes32)\\\":{\\\"notice\\\":\\\"The old observation for each symbolHash\\\"},\\\"postPrices(bytes[],bytes[],string[])\\\":{\\\"notice\\\":\\\"Post open oracle reporter prices, and recalculate stored price by comparing to anchor\\\"},\\\"price(string)\\\":{\\\"notice\\\":\\\"Get the official price for a symbol\\\"},\\\"priceData()\\\":{\\\"notice\\\":\\\"The Open Oracle Price Data contract\\\"},\\\"priceTimestamps(bytes32)\\\":{\\\"notice\\\":\\\"Official price timestamps by symbol hash\\\"},\\\"prices(bytes32)\\\":{\\\"notice\\\":\\\"Official prices by symbol hash\\\"},\\\"reporter()\\\":{\\\"notice\\\":\\\"The Open Oracle Reporter\\\"},\\\"reporterInvalidated()\\\":{\\\"notice\\\":\\\"Circuit breaker for using anchor price oracle directly, ignoring reporter\\\"},\\\"source(bytes,bytes)\\\":{\\\"notice\\\":\\\"Recovers the source address which signed a message\\\"},\\\"upperBoundAnchorRatio()\\\":{\\\"notice\\\":\\\"The highest ratio of the new price to the anchor price that will still trigger the price to be updated\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"tests/contracts/MockUniswapAnchoredView.sol\\\":\\\"MockUniswapAnchoredView\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/OpenOracleData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\npragma experimental ABIEncoderV2;\\\\n\\\\n/**\\\\n * @title The Open Oracle Data Base Contract\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOracleData {\\\\n    /**\\\\n     * @notice The event emitted when a source writes to its storage\\\\n     */\\\\n    //event Write(address indexed source, <Key> indexed key, string kind, uint64 timestamp, <Value> value);\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    //function put(bytes calldata message, bytes calldata signature) external returns (<Key> memory);\\\\n\\\\n    /**\\\\n     * @notice Read a single key with a pre-defined type signature from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the encoded value (defaults to (0, 0x))\\\\n     */\\\\n    //function get(address source, <Key> key) external view returns (uint, <Value>);\\\\n\\\\n    /**\\\\n     * @notice Recovers the source address which signed a message\\\\n     * @dev Comparing to a claimed address would add nothing,\\\\n     *  as the caller could simply perform the recover and claim that address.\\\\n     * @param message The data that was presumably signed\\\\n     * @param signature The fingerprint of the data + private key\\\\n     * @return The source address which signed the message, presumably\\\\n     */\\\\n    function source(bytes memory message, bytes memory signature) public pure returns (address) {\\\\n        (bytes32 r, bytes32 s, uint8 v) = abi.decode(signature, (bytes32, bytes32, uint8));\\\\n        bytes32 hash = keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", keccak256(message)));\\\\n        return ecrecover(hash, v, r, s);\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xce1c5e0af5d2642d2b35559b5ca24c1ad0bcf08ffb7dfd92b0f2121b5b3d4faa\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/OpenOraclePriceData.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\n\\\\nimport \\\\\\\"./OpenOracleData.sol\\\\\\\";\\\\n\\\\n/**\\\\n * @title The Open Oracle Price Data Contract\\\\n * @notice Values stored in this contract should represent a USD price with 6 decimals precision\\\\n * @author Compound Labs, Inc.\\\\n */\\\\ncontract OpenOraclePriceData is OpenOracleData {\\\\n    ///@notice The event emitted when a source writes to its storage\\\\n    event Write(address indexed source, string key, uint64 timestamp, uint64 value);\\\\n    ///@notice The event emitted when the timestamp on a price is invalid and it is not written to storage\\\\n    event NotWritten(uint64 priorTimestamp, uint256 messageTimestamp, uint256 blockTimestamp);\\\\n\\\\n    ///@notice The fundamental unit of storage for a reporter source\\\\n    struct Datum {\\\\n        uint64 timestamp;\\\\n        uint64 value;\\\\n    }\\\\n\\\\n    /**\\\\n     * @dev The most recent authenticated data from all sources.\\\\n     *  This is private because dynamic mapping keys preclude auto-generated getters.\\\\n     */\\\\n    mapping(address => mapping(string => Datum)) private data;\\\\n\\\\n    /**\\\\n     * @notice Write a bunch of signed datum to the authenticated storage mapping\\\\n     * @param message The payload containing the timestamp, and (key, value) pairs\\\\n     * @param signature The cryptographic signature of the message payload, authorizing the source to write\\\\n     * @return The keys that were written\\\\n     */\\\\n    function put(bytes calldata message, bytes calldata signature) external returns (string memory) {\\\\n        (address source, uint64 timestamp, string memory key, uint64 value) = decodeMessage(message, signature);\\\\n        return putInternal(source, timestamp, key, value);\\\\n    }\\\\n\\\\n    function putInternal(address source, uint64 timestamp, string memory key, uint64 value) internal returns (string memory) {\\\\n        // Only update if newer than stored, according to source\\\\n        Datum storage prior = data[source][key];\\\\n        if (timestamp > prior.timestamp && timestamp < block.timestamp + 60 minutes && source != address(0)) {\\\\n            data[source][key] = Datum(timestamp, value);\\\\n            emit Write(source, key, timestamp, value);\\\\n        } else {\\\\n            emit NotWritten(prior.timestamp, timestamp, block.timestamp);\\\\n        }\\\\n        return key;\\\\n    }\\\\n\\\\n    function decodeMessage(bytes calldata message, bytes calldata signature) internal pure returns (address, uint64, string memory, uint64) {\\\\n        // Recover the source address\\\\n        address source = source(message, signature);\\\\n\\\\n        // Decode the message and check the kind\\\\n        (string memory kind, uint64 timestamp, string memory key, uint64 value) = abi.decode(message, (string, uint64, string, uint64));\\\\n        require(keccak256(abi.encodePacked(kind)) == keccak256(abi.encodePacked(\\\\\\\"prices\\\\\\\")), \\\\\\\"Kind of data must be 'prices'\\\\\\\");\\\\n        return (source, timestamp, key, value);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Read a single key from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The claimed Unix timestamp for the data and the price value (defaults to (0, 0))\\\\n     */\\\\n    function get(address source, string calldata key) external view returns (uint64, uint64) {\\\\n        Datum storage datum = data[source][key];\\\\n        return (datum.timestamp, datum.value);\\\\n    }\\\\n\\\\n    /**\\\\n     * @notice Read only the value for a single key from an authenticated source\\\\n     * @param source The verifiable author of the data\\\\n     * @param key The selector for the value to return\\\\n     * @return The price value (defaults to 0)\\\\n     */\\\\n    function getPrice(address source, string calldata key) external view returns (uint64) {\\\\n        return data[source][key].value;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x16fa7df6cfce0bad70407ef8000b09d8468777a3453f30425ea553117abef4c6\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapAnchoredView.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport \\\\\\\"../OpenOraclePriceData.sol\\\\\\\";\\\\r\\\\nimport \\\\\\\"./UniswapConfig.sol\\\\\\\";\\\\r\\\\nimport \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\nstruct Observation {\\\\r\\\\n    uint timestamp;\\\\r\\\\n    uint acc;\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ncontract UniswapAnchoredView is UniswapConfig {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n    \\\\r\\\\n    /// @notice Constant indicating that this contract is a UniswapAnchoredView\\\\r\\\\n    bool public constant IS_UNISWAP_ANCHORED_VIEW = true;\\\\r\\\\n\\\\r\\\\n    /// @notice The Open Oracle Price Data contract\\\\r\\\\n    OpenOraclePriceData public immutable priceData;\\\\r\\\\n\\\\r\\\\n    /// @notice The number of wei in 1 ETH\\\\r\\\\n    uint public constant ethBaseUnit = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice A common scaling factor to maintain precision\\\\r\\\\n    uint public constant expScale = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice The Open Oracle Reporter\\\\r\\\\n    address public immutable reporter;\\\\r\\\\n\\\\r\\\\n    /// @notice The highest ratio of the new price to the anchor price that will still trigger the price to be updated\\\\r\\\\n    uint public immutable upperBoundAnchorRatio;\\\\r\\\\n\\\\r\\\\n    /// @notice The lowest ratio of the new price to the anchor price that will still trigger the price to be updated\\\\r\\\\n    uint public immutable lowerBoundAnchorRatio;\\\\r\\\\n\\\\r\\\\n    /// @notice The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced\\\\r\\\\n    uint public immutable anchorPeriod;\\\\r\\\\n\\\\r\\\\n    /// @notice Official prices by symbol hash\\\\r\\\\n    mapping(bytes32 => uint) public prices;\\\\r\\\\n\\\\r\\\\n    /// @notice Official price timestamps by symbol hash\\\\r\\\\n    mapping(bytes32 => uint) public priceTimestamps;\\\\r\\\\n\\\\r\\\\n    /// @notice Circuit breaker for using anchor price oracle directly, ignoring reporter\\\\r\\\\n    bool public reporterInvalidated;\\\\r\\\\n\\\\r\\\\n    /// @notice The old observation for each symbolHash\\\\r\\\\n    mapping(bytes32 => Observation) public oldObservations;\\\\r\\\\n\\\\r\\\\n    /// @notice The new observation for each symbolHash\\\\r\\\\n    mapping(bytes32 => Observation) public newObservations;\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when new prices are posted but the stored price is not updated due to the anchor\\\\r\\\\n    event PriceGuarded(string symbol, uint reporter, uint anchor);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when the stored price is updated\\\\r\\\\n    event PriceUpdated(string symbol, uint price);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when anchor price is updated\\\\r\\\\n    event AnchorPriceUpdated(string symbol, uint anchorPrice, uint oldTimestamp, uint newTimestamp);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when the uniswap window changes\\\\r\\\\n    event UniswapWindowUpdated(bytes32 indexed symbolHash, uint oldTimestamp, uint newTimestamp, uint oldPrice, uint newPrice);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when reporter invalidates itself\\\\r\\\\n    event ReporterInvalidated(address reporter);\\\\r\\\\n\\\\r\\\\n    bytes32 constant ethHash = keccak256(abi.encodePacked(\\\\\\\"ETH\\\\\\\"));\\\\r\\\\n    bytes32 constant btcSymbolHash = keccak256(abi.encodePacked(\\\\\\\"BTC\\\\\\\"));\\\\r\\\\n    bytes32 constant wbtcSymbolHash = keccak256(abi.encodePacked(\\\\\\\"WBTC\\\\\\\"));\\\\r\\\\n    bytes32 constant rotateHash = keccak256(abi.encodePacked(\\\\\\\"rotate\\\\\\\"));\\\\r\\\\n\\\\r\\\\n    /// @dev Maps symbol hashes to token config indexes\\\\r\\\\n    mapping(bytes32 => uint256) internal _configIndexesBySymbolHash;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps symbol hashes to booleans indicating if they have token configs\\\\r\\\\n    mapping(bytes32 => bool) internal _configPresenceBySymbolHash;\\\\r\\\\n\\\\r\\\\n    /// @dev Boolean indicating if Uniswap anchors are verified\\\\r\\\\n    bool public isSecure;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct a uniswap anchored view for a set of token configurations\\\\r\\\\n     * @dev Note that to avoid immature TWAPs, the system must run for at least a single anchorPeriod before using.\\\\r\\\\n     * @param priceData_ The OpenOraclePriceData contract to use\\\\r\\\\n     * @param reporter_ The reporter whose prices are to be used\\\\r\\\\n     * @param anchorToleranceMantissa_ The percentage tolerance that the reporter may deviate from the uniswap anchor\\\\r\\\\n     * @param anchorPeriod_ The minimum amount of time required for the old uniswap price accumulator to be replaced\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\r\\\\n     */\\\\r\\\\n    constructor(OpenOraclePriceData priceData_,\\\\r\\\\n                address reporter_,\\\\r\\\\n                uint anchorToleranceMantissa_,\\\\r\\\\n                uint anchorPeriod_,\\\\r\\\\n                TokenConfig[] memory configs,\\\\r\\\\n                bool _canAdminOverwrite,\\\\r\\\\n                bool _isSecure,\\\\r\\\\n                uint256 _maxSecondsBeforePriceIsStale) UniswapConfig(configs, _canAdminOverwrite, _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        priceData = priceData_;\\\\r\\\\n        reporter = reporter_;\\\\r\\\\n        anchorPeriod = anchorPeriod_;\\\\r\\\\n        isSecure = _isSecure;\\\\r\\\\n\\\\r\\\\n        // Allow the tolerance to be whatever the deployer chooses, but prevent under/overflow (and prices from being 0)\\\\r\\\\n        upperBoundAnchorRatio = anchorToleranceMantissa_ > uint(-1) - 100e16 ? uint(-1) : 100e16 + anchorToleranceMantissa_;\\\\r\\\\n        lowerBoundAnchorRatio = anchorToleranceMantissa_ < 100e16 ? 100e16 - anchorToleranceMantissa_ : 1;\\\\r\\\\n\\\\r\\\\n        // If secure, require !canAdminOverwrite and checkTokenConfigs\\\\r\\\\n        if (isSecure) {\\\\r\\\\n            require(!canAdminOverwrite, \\\\\\\"canAdminOverwrite must be set to false for secure UniswapView contracts.\\\\\\\");\\\\r\\\\n            checkTokenConfigs(configs);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        // Initialize token configs\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev UniswapV2Factory contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private UNISWAP_V2_FACTORY_ADDRESS = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;\\\\r\\\\n    \\\\r\\\\n    /**\\\\r\\\\n     * @dev WETH contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Verifies token configs\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     */\\\\r\\\\n    function checkTokenConfigs(TokenConfig[] memory configs) internal view {\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // Check symbolHash for ETH\\\\r\\\\n            if (configs[i].symbolHash != ethHash) {\\\\r\\\\n                require(configs[i].uniswapMarket == 0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc, \\\\\\\"Incorrect Uniswap market for ETH: must be USDC-ETH.\\\\\\\");\\\\r\\\\n                require(!configs[i].isUniswapReversed, \\\\\\\"Incorrect Uniswap market reversal for ETH: must be USDC-ETH (not reversed).\\\\\\\");\\\\r\\\\n                require(configs[i].underlying == address(0), \\\\\\\"Underlying token address must be the zero address for ETH.\\\\\\\");\\\\r\\\\n                require(configs[i].fixedPrice == 0, \\\\\\\"ETH token config fixed price must be 0.\\\\\\\");\\\\r\\\\n                require(configs[i].baseUnit == ethBaseUnit, \\\\\\\"ETH token config base unit must be 1e18.\\\\\\\");\\\\r\\\\n                continue;\\\\r\\\\n            }\\\\r\\\\n\\\\r\\\\n            // Check symbolHash against underlying symbol (with exception for WBTC/BTC)\\\\r\\\\n            bytes32 realSymbolHash = keccak256(abi.encodePacked(IERC20(configs[i].underlying).symbol()));\\\\r\\\\n            require(realSymbolHash == configs[i].symbolHash || (realSymbolHash == wbtcSymbolHash && configs[i].symbolHash == btcSymbolHash), \\\\\\\"Symbol mismatch between token config and ERC20 symbol method.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check baseUnit against underlying decimals\\\\r\\\\n            require(10 ** uint256(IERC20(configs[i].underlying).decimals()) == configs[i].baseUnit, \\\\\\\"Incorrect token config base unit.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check for WETH\\\\r\\\\n            if (configs[i].underlying == WETH_ADDRESS) {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.FIXED_ETH, \\\\\\\"Invalid WETH token config price source: must be FIXED_ETH.\\\\\\\");\\\\r\\\\n                \\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 1e18, \\\\\\\"WETH token config fixed price must be 1e18.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                require(configs[i].uniswapMarket == address(0), \\\\\\\"WETH Uniswap market not necessary.\\\\\\\");\\\\r\\\\n                configs[i].isUniswapReversed = false;\\\\r\\\\n            } else {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.REPORTER, \\\\\\\"Invalid token config price source: must be REPORTER.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 0, \\\\\\\"Token config fixed price must be 0.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(UNISWAP_V2_FACTORY_ADDRESS, configs[i].underlying, WETH_ADDRESS));\\\\r\\\\n                require(configs[i].uniswapMarket == address(pair), \\\\\\\"Token config Uniswap market is not correct.\\\\\\\");\\\\r\\\\n                address token0 = pair.token0();\\\\r\\\\n                require((token0 == configs[i].underlying && !configs[i].isUniswapReversed) || (token0 != configs[i].underlying && configs[i].isUniswapReversed), \\\\\\\"Token config Uniswap reversal is incorrect.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Initialize token configs\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function initConfigs(TokenConfig[] memory configs) internal {\\\\r\\\\n        for (uint i = 0; i < configs.length; i++) {\\\\r\\\\n            TokenConfig memory config = configs[i];\\\\r\\\\n            require(config.baseUnit > 0, \\\\\\\"baseUnit must be greater than zero\\\\\\\");\\\\r\\\\n            address uniswapMarket = config.uniswapMarket;\\\\r\\\\n            if (config.priceSource == PriceSource.REPORTER) {\\\\r\\\\n                require(uniswapMarket != address(0), \\\\\\\"reported prices must have an anchor\\\\\\\");\\\\r\\\\n                bytes32 symbolHash = config.symbolHash;\\\\r\\\\n                uint cumulativePrice = currentCumulativePrice(config);\\\\r\\\\n                oldObservations[symbolHash].timestamp = block.timestamp;\\\\r\\\\n                newObservations[symbolHash].timestamp = block.timestamp;\\\\r\\\\n                oldObservations[symbolHash].acc = cumulativePrice;\\\\r\\\\n                newObservations[symbolHash].acc = cumulativePrice;\\\\r\\\\n                emit UniswapWindowUpdated(symbolHash, block.timestamp, block.timestamp, cumulativePrice, cumulativePrice);\\\\r\\\\n            } else {\\\\r\\\\n                require(uniswapMarket == address(0), \\\\\\\"only reported prices utilize an anchor\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Internal function to add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function _add(TokenConfig[] memory configs) internal override {\\\\r\\\\n        // For each config\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // If !canAdminOverwrite, check for existing configs\\\\r\\\\n            if (!canAdminOverwrite) {\\\\r\\\\n                require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\r\\\\n                require(!_configPresenceBySymbolHash[configs[i].symbolHash], \\\\\\\"Token config already exists for this symbol hash.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n\\\\r\\\\n            // Add config to state\\\\r\\\\n            _configs.push(configs[i]);\\\\r\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\r\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\r\\\\n            _configIndexesBySymbolHash[configs[i].symbolHash] = _configs.length - 1;\\\\r\\\\n            _configPresenceBySymbolHash[configs[i].symbolHash] = true;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function add(TokenConfig[] memory configs) external {\\\\r\\\\n        // Check msg.sender == admin\\\\r\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n\\\\r\\\\n        // Add and init token configs\\\\r\\\\n        _add(configs);\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the official price for a symbol\\\\r\\\\n     * @param symbol The symbol to fetch the price of\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals\\\\r\\\\n     */\\\\r\\\\n    function price(string memory symbol) external view returns (uint) {\\\\r\\\\n        TokenConfig memory config = getTokenConfigBySymbol(symbol);\\\\r\\\\n        return priceInternal(config);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function priceInternal(TokenConfig memory config) internal view returns (uint) {\\\\r\\\\n        if (config.symbolHash == ethHash) return ethBaseUnit;\\\\r\\\\n        if (config.priceSource == PriceSource.REPORTER) {\\\\r\\\\n            // Prices are stored in terms of USD so we use the ETH/USD price to convert to ETH\\\\r\\\\n            uint usdPerEth = prices[ethHash];\\\\r\\\\n            require(usdPerEth > 0, \\\\\\\"ETH price not set, cannot convert from USD to ETH\\\\\\\");\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= priceTimestamps[ethHash] + maxSecondsBeforePriceIsStale, \\\\\\\"ETH TWAP price is stale; cannot convert from USD to ETH.\\\\\\\");\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= priceTimestamps[config.symbolHash] + maxSecondsBeforePriceIsStale, \\\\\\\"TWAP price is stale.\\\\\\\");\\\\r\\\\n            return mul(prices[config.symbolHash], ethBaseUnit) / usdPerEth; // usdPrice * 1e18 / usdPerEth = ethPrice\\\\r\\\\n        }\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_USD) {\\\\r\\\\n            uint usdPerEth = prices[ethHash];\\\\r\\\\n            require(usdPerEth > 0, \\\\\\\"ETH price not set, cannot convert from USD to ETH\\\\\\\");\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= priceTimestamps[ethHash] + maxSecondsBeforePriceIsStale, \\\\\\\"ETH TWAP price is stale; cannot convert from USD to ETH.\\\\\\\");\\\\r\\\\n            return mul(config.fixedPrice, ethBaseUnit) / usdPerEth; // usdPrice * 1e18 / usdPerEth = ethPrice\\\\r\\\\n        }\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_ETH) return config.fixedPrice;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the underlying price of a cToken\\\\r\\\\n     * @dev Implements the PriceOracle interface for Compound v2.\\\\r\\\\n     * @param cToken The cToken address for price retrieval\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals, for the given cToken address\\\\r\\\\n     */\\\\r\\\\n    function getUnderlyingPrice(address cToken) external view returns (uint) {\\\\r\\\\n        if (CToken(cToken).isCEther()) return ethBaseUnit;\\\\r\\\\n        TokenConfig memory config = getTokenConfigByCToken(cToken);\\\\r\\\\n         // Comptroller needs prices in the format: ${raw price} * 1e(36 - baseUnit)\\\\r\\\\n         // Since the prices in this view have 18 decimals, we must scale them by 1e(36 - 18 - baseUnit)\\\\r\\\\n        return mul(1e18, priceInternal(config)) / config.baseUnit;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Post open oracle reporter prices, and recalculate stored price by comparing to anchor\\\\r\\\\n     * @dev We let anyone pay to post anything, but only prices from configured reporter will be stored in the view.\\\\r\\\\n     * @param messages The messages to post to the oracle\\\\r\\\\n     * @param signatures The signatures for the corresponding messages\\\\r\\\\n     * @param symbols The symbols to compare to anchor for authoritative reading\\\\r\\\\n     */\\\\r\\\\n    function postPrices(bytes[] calldata messages, bytes[] calldata signatures, string[] calldata symbols) external {\\\\r\\\\n        require(messages.length == signatures.length, \\\\\\\"messages and signatures must be 1:1\\\\\\\");\\\\r\\\\n\\\\r\\\\n        // Save the prices\\\\r\\\\n        for (uint i = 0; i < messages.length; i++) {\\\\r\\\\n            priceData.put(messages[i], signatures[i]);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        uint ethPrice = fetchEthPrice();\\\\r\\\\n\\\\r\\\\n        // Try to update the view storage\\\\r\\\\n        for (uint i = 0; i < symbols.length; i++) {\\\\r\\\\n            postPriceInternal(symbols[i], ethPrice);\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function postPriceInternal(string memory symbol, uint ethPrice) internal {\\\\r\\\\n        TokenConfig memory config = getTokenConfigBySymbol(symbol);\\\\r\\\\n        require(config.priceSource == PriceSource.REPORTER, \\\\\\\"only reporter prices get posted\\\\\\\");\\\\r\\\\n\\\\r\\\\n        bytes32 symbolHash = keccak256(abi.encodePacked(symbol));\\\\r\\\\n        (uint reporterPrice, uint reporterTimestamp) = priceData.get(reporter, symbol);\\\\r\\\\n        uint anchorPrice;\\\\r\\\\n        if (symbolHash == ethHash) {\\\\r\\\\n            anchorPrice = ethPrice;\\\\r\\\\n        } else {\\\\r\\\\n            anchorPrice = fetchAnchorPrice(symbol, config, ethPrice);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        if (reporterInvalidated) {\\\\r\\\\n            prices[symbolHash] = anchorPrice;\\\\r\\\\n            priceTimestamps[symbolHash] = (oldObservations[symbolHash].timestamp + newObservations[symbolHash].timestamp) / 2;\\\\r\\\\n            emit PriceUpdated(symbol, anchorPrice);\\\\r\\\\n        } else if (isWithinAnchor(reporterPrice, anchorPrice)) {\\\\r\\\\n            prices[symbolHash] = reporterPrice;\\\\r\\\\n            priceTimestamps[symbolHash] = reporterTimestamp;\\\\r\\\\n            emit PriceUpdated(symbol, reporterPrice);\\\\r\\\\n        } else {\\\\r\\\\n            emit PriceGuarded(symbol, reporterPrice, anchorPrice);\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function isWithinAnchor(uint reporterPrice, uint anchorPrice) internal view returns (bool) {\\\\r\\\\n        if (reporterPrice > 0) {\\\\r\\\\n            uint anchorRatio = mul(anchorPrice, 100e16) / reporterPrice;\\\\r\\\\n            return anchorRatio <= upperBoundAnchorRatio && anchorRatio >= lowerBoundAnchorRatio;\\\\r\\\\n        }\\\\r\\\\n        return false;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current token/ETH price accumulator from Uniswap.\\\\r\\\\n     */\\\\r\\\\n    function currentCumulativePrice(TokenConfig memory config) internal view returns (uint) {\\\\r\\\\n        (uint cumulativePrice0, uint cumulativePrice1,) = UniswapV2OracleLibrary.currentCumulativePrices(config.uniswapMarket);\\\\r\\\\n        return config.isUniswapReversed ? cumulativePrice1 : cumulativePrice0;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current eth/usd price from uniswap, with 6 decimals of precision.\\\\r\\\\n     *  Conversion factor is 1e18 for eth/usdc market, since we decode uniswap price statically with 18 decimals.\\\\r\\\\n     */\\\\r\\\\n    function fetchEthPrice() internal returns (uint) {\\\\r\\\\n        return fetchAnchorPrice(\\\\\\\"ETH\\\\\\\", getTokenConfigBySymbolHash(ethHash), ethBaseUnit);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current token/usd price from uniswap, with 6 decimals of precision.\\\\r\\\\n     * @param conversionFactor 1e18 if seeking the ETH price, and a 6 decimal ETH-USDC price in the case of other assets\\\\r\\\\n     */\\\\r\\\\n    function fetchAnchorPrice(string memory symbol, TokenConfig memory config, uint conversionFactor) internal virtual returns (uint) {\\\\r\\\\n        (uint nowCumulativePrice, uint oldCumulativePrice, uint oldTimestamp) = pokeWindowValues(config);\\\\r\\\\n\\\\r\\\\n        // This should be impossible, but better safe than sorry\\\\r\\\\n        require(block.timestamp > oldTimestamp, \\\\\\\"now must come after before\\\\\\\");\\\\r\\\\n        uint timeElapsed = block.timestamp - oldTimestamp;\\\\r\\\\n\\\\r\\\\n        // Calculate uniswap time-weighted average price\\\\r\\\\n        // Underflow is a property of the accumulators: https://uniswap.org/audit.html#orgc9b3190\\\\r\\\\n        FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112(uint224((nowCumulativePrice - oldCumulativePrice) / timeElapsed));\\\\r\\\\n        uint rawUniswapPriceMantissa = priceAverage.decode112with18();\\\\r\\\\n        uint unscaledPriceMantissa = mul(rawUniswapPriceMantissa, conversionFactor);\\\\r\\\\n        uint anchorPrice;\\\\r\\\\n\\\\r\\\\n        // Adjust rawUniswapPrice according to the units of the non-ETH asset\\\\r\\\\n        // In the case of ETH, we would have to scale by 1e6 / USDC_UNITS, but since baseUnit2 is 1e6 (USDC), it cancels\\\\r\\\\n\\\\r\\\\n        // In the case of non-ETH tokens\\\\r\\\\n        // a. pokeWindowValues already handled uniswap reversed cases, so priceAverage will always be Token/ETH TWAP price.\\\\r\\\\n        // b. conversionFactor = ETH price * 1e6\\\\r\\\\n        // unscaledPriceMantissa = priceAverage(token/ETH TWAP price) * expScale * conversionFactor\\\\r\\\\n        // so ->\\\\r\\\\n        // anchorPrice = priceAverage * tokenBaseUnit / ethBaseUnit * ETH_price * 1e6\\\\r\\\\n        //             = priceAverage * conversionFactor * tokenBaseUnit / ethBaseUnit\\\\r\\\\n        //             = unscaledPriceMantissa / expScale * tokenBaseUnit / ethBaseUnit\\\\r\\\\n        anchorPrice = mul(unscaledPriceMantissa, config.baseUnit) / ethBaseUnit / expScale;\\\\r\\\\n\\\\r\\\\n        emit AnchorPriceUpdated(symbol, anchorPrice, oldTimestamp, block.timestamp);\\\\r\\\\n\\\\r\\\\n        return anchorPrice;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Get time-weighted average prices for a token at the current timestamp.\\\\r\\\\n     *  Update new and old observations of lagging window if period elapsed.\\\\r\\\\n     */\\\\r\\\\n    function pokeWindowValues(TokenConfig memory config) internal returns (uint, uint, uint) {\\\\r\\\\n        bytes32 symbolHash = config.symbolHash;\\\\r\\\\n        uint cumulativePrice = currentCumulativePrice(config);\\\\r\\\\n\\\\r\\\\n        Observation memory newObservation = newObservations[symbolHash];\\\\r\\\\n\\\\r\\\\n        // Update new and old observations if elapsed time is greater than or equal to anchor period\\\\r\\\\n        uint timeElapsed = block.timestamp - newObservation.timestamp;\\\\r\\\\n        if (timeElapsed >= anchorPeriod) {\\\\r\\\\n            oldObservations[symbolHash].timestamp = newObservation.timestamp;\\\\r\\\\n            oldObservations[symbolHash].acc = newObservation.acc;\\\\r\\\\n\\\\r\\\\n            newObservations[symbolHash].timestamp = block.timestamp;\\\\r\\\\n            newObservations[symbolHash].acc = cumulativePrice;\\\\r\\\\n            emit UniswapWindowUpdated(config.symbolHash, newObservation.timestamp, block.timestamp, newObservation.acc, cumulativePrice);\\\\r\\\\n        }\\\\r\\\\n        return (cumulativePrice, oldObservations[symbolHash].acc, oldObservations[symbolHash].timestamp);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Invalidate the reporter, and fall back to using anchor directly in all cases\\\\r\\\\n     * @dev Only the reporter may sign a message which allows it to invalidate itself.\\\\r\\\\n     *  To be used in cases of emergency, if the reporter thinks their key may be compromised.\\\\r\\\\n     * @param message The data that was presumably signed\\\\r\\\\n     * @param signature The fingerprint of the data + private key\\\\r\\\\n     */\\\\r\\\\n    function invalidateReporter(bytes memory message, bytes memory signature) external {\\\\r\\\\n        (string memory decodedMessage, ) = abi.decode(message, (string, address));\\\\r\\\\n        require(keccak256(abi.encodePacked(decodedMessage)) == rotateHash, \\\\\\\"invalid message must be 'rotate'\\\\\\\");\\\\r\\\\n        require(source(message, signature) == reporter, \\\\\\\"invalidation message must come from the reporter\\\\\\\");\\\\r\\\\n        reporterInvalidated = true;\\\\r\\\\n        emit ReporterInvalidated(reporter);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Recovers the source address which signed a message\\\\r\\\\n     * @dev Comparing to a claimed address would add nothing,\\\\r\\\\n     *  as the caller could simply perform the recover and claim that address.\\\\r\\\\n     * @param message The data that was presumably signed\\\\r\\\\n     * @param signature The fingerprint of the data + private key\\\\r\\\\n     * @return The source address which signed the message, presumably\\\\r\\\\n     */\\\\r\\\\n    function source(bytes memory message, bytes memory signature) public pure returns (address) {\\\\r\\\\n        (bytes32 r, bytes32 s, uint8 v) = abi.decode(signature, (bytes32, bytes32, uint8));\\\\r\\\\n        bytes32 hash = keccak256(abi.encodePacked(\\\\\\\"\\\\\\\\x19Ethereum Signed Message:\\\\\\\\n32\\\\\\\", keccak256(message)));\\\\r\\\\n        return ecrecover(hash, v, r, s);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Overflow proof multiplication\\\\r\\\\n    function mul(uint a, uint b) internal pure returns (uint) {\\\\r\\\\n        if (a == 0) return 0;\\\\r\\\\n        uint c = a * b;\\\\r\\\\n        require(c / a == b, \\\\\\\"multiplication overflow\\\\\\\");\\\\r\\\\n        return c;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function getSymbolHashIndex(bytes32 symbolHash) internal view returns (uint) {\\\\r\\\\n        return _configPresenceBySymbolHash[symbolHash] ? _configIndexesBySymbolHash[symbolHash] : uint(-1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for symbol\\\\r\\\\n     * @param symbol The symbol of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigBySymbol(string memory symbol) public view returns (TokenConfig memory) {\\\\r\\\\n        return getTokenConfigBySymbolHash(keccak256(abi.encodePacked(symbol)));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for the symbolHash\\\\r\\\\n     * @param symbolHash The keccack256 of the symbol of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigBySymbolHash(bytes32 symbolHash) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getSymbolHashIndex(symbolHash);\\\\r\\\\n        if (index != uint(-1)) {\\\\r\\\\n            return getTokenConfig(index);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x9503690ab310b41f324a347db1b37ecb3f08fd0d463d51c87af83c64a46aff4f\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapConfig.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport { CToken, CErc20 } from \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\ncontract UniswapConfig {\\\\r\\\\n    /// @dev Describe how to interpret the fixedPrice in the TokenConfig.\\\\r\\\\n    enum PriceSource {\\\\r\\\\n        FIXED_ETH, /// implies the fixedPrice is a constant multiple of the ETH price (which varies)\\\\r\\\\n        FIXED_USD, /// implies the fixedPrice is a constant multiple of the USD price (which is 1)\\\\r\\\\n        REPORTER,  /// implies the price is set by the reporter (only available on UniswapAnchoredView)\\\\r\\\\n        TWAP,      /// implies the price is set by TWAPs (only available on UniswapView)\\\\r\\\\n        UNISWAP    /// implies the price is set by the direct Uniswap price (only available on UniswapDirectView)\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Describe how the USD price should be determined for an asset.\\\\r\\\\n    ///  There should be 1 TokenConfig object for each supported asset, passed in the constructor.\\\\r\\\\n    struct TokenConfig {\\\\r\\\\n        address underlying;\\\\r\\\\n        bytes32 symbolHash;\\\\r\\\\n        uint256 baseUnit;\\\\r\\\\n        PriceSource priceSource;\\\\r\\\\n        uint256 fixedPrice;\\\\r\\\\n        address uniswapMarket;\\\\r\\\\n        bool isUniswapReversed;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Token config objects\\\\r\\\\n    TokenConfig[] internal _configs;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to token config indexes\\\\r\\\\n    mapping(address => uint256) internal _configIndexesByUnderlying;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to booleans indicating if they have token configs\\\\r\\\\n    mapping(address => bool) internal _configPresenceByUnderlying;\\\\r\\\\n    \\\\r\\\\n    /// @notice Admin address\\\\r\\\\n    address public admin;\\\\r\\\\n    \\\\r\\\\n    /// @notice Whether or not existing token configs can be overwritten\\\\r\\\\n    bool public canAdminOverwrite;\\\\r\\\\n\\\\r\\\\n    /// @notice The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n    uint256 public maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct an immutable store of configs into the contract data\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\r\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n     */\\\\r\\\\n    constructor(TokenConfig[] memory configs, bool _canAdminOverwrite, uint256 _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        admin = msg.sender;\\\\r\\\\n        canAdminOverwrite = _canAdminOverwrite;\\\\r\\\\n        maxSecondsBeforePriceIsStale = _maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n        // Add configs\\\\r\\\\n        _add(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Internal function to add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function _add(TokenConfig[] memory configs) internal virtual {\\\\r\\\\n        // For each config\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // If !canAdminOverwrite, check for existing config\\\\r\\\\n            if (!canAdminOverwrite) require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Add config to state\\\\r\\\\n            _configs.push(configs[i]);\\\\r\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\r\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice Changes the admin\\\\r\\\\n    function changeAdmin(address newAdmin) external {\\\\r\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n        admin = newAdmin;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice The number of tokens this contract actually supports\\\\r\\\\n    function numTokens() public view returns (uint256) {\\\\r\\\\n        return _configs.length;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by cToken address\\\\r\\\\n    function getCTokenIndex(address cToken) internal view returns (uint) {\\\\r\\\\n        return getUnderlyingIndex(CToken(cToken).isCEther() ? address(0) : CErc20(cToken).underlying());\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by underlying ERC20 token address\\\\r\\\\n    function getUnderlyingIndex(address underlying) internal view returns (uint) {\\\\r\\\\n        return _configPresenceByUnderlying[underlying] ? _configIndexesByUnderlying[underlying] : uint(-1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the i-th config, according to the order they were passed in originally\\\\r\\\\n     * @param i The index of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfig(uint i) public view returns (TokenConfig memory) {\\\\r\\\\n        require(i < numTokens(), \\\\\\\"token config not found\\\\\\\");\\\\r\\\\n        return _configs[i];\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for the cToken\\\\r\\\\n     * @param cToken The address of the cToken of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByCToken(address cToken) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getCTokenIndex(cToken);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for an underlying asset\\\\r\\\\n     * @param underlying The address of the underlying asset of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByUnderlying(address underlying) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getUnderlyingIndex(underlying);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x5cdbac709449ecaa73d9bc7e628d5e78fcda19a579fce7a8afc5ee62dbf33fa0\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"tests/contracts/MockUniswapAnchoredView.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport \\\\\\\"../../contracts/Uniswap/UniswapAnchoredView.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\ncontract MockUniswapAnchoredView is UniswapAnchoredView {\\\\r\\\\n    mapping(bytes32 => uint) public anchorPrices;\\\\r\\\\n\\\\r\\\\n    constructor(OpenOraclePriceData priceData_,\\\\r\\\\n                address reporter_,\\\\r\\\\n                uint anchorToleranceMantissa_,\\\\r\\\\n                uint anchorPeriod_,\\\\r\\\\n                TokenConfig[] memory configs) UniswapAnchoredView(priceData_, reporter_, anchorToleranceMantissa_, anchorPeriod_, configs, false, false, 0) public {}\\\\r\\\\n\\\\r\\\\n    function setAnchorPrice(string memory symbol, uint price) external {\\\\r\\\\n        anchorPrices[keccak256(abi.encodePacked(symbol))] = price;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function fetchAnchorPrice(string memory _symbol, TokenConfig memory config, uint _conversionFactor) internal override returns (uint) {\\\\r\\\\n        _symbol; // Shh\\\\r\\\\n        _conversionFactor; // Shh\\\\r\\\\n        return anchorPrices[config.symbolHash];\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xe53185563917d13aa011dd0ee3058324ba097b8df50479f6677ca10eec7ab5c0\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"tests/contracts/MockUniswapTokenPair.sol:MockUniswapTokenPair\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve0_\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve1_\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"blockTimestampLast_\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price0CumulativeLast_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price1CumulativeLast_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"blockTimestampLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reversedMarket\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReservesFraction\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint224\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint224\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"price0CumulativeLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"price1CumulativeLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reserve0\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint112\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reserve1\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint112\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve0_\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve1_\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"blockTimestampLast_\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price0CumulativeLast_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price1CumulativeLast_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"update\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"608060405234801561001057600080fd5b506040516104a33803806104a3833981810160405260a081101561003357600080fd5b508051602082015160408301516060840151608090940151600080546001600160701b0319166001600160701b0395861617600160701b600160e01b031916600160701b9590941694909402929092176001600160e01b0316600160e01b63ffffffff909216919091021782556001929092556002919091556103e79081906100bc90396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80635a76f25e1161005b5780635a76f25e1461010b578063642f064e14610113578063c5700a021461014e578063d14393c11461016f57610088565b80630902f1ac1461008d578063443cb4bc146100c55780635909c0d5146100e95780635a3d549314610103575b600080fd5b6100956101b9565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b6100cd6101e3565b604080516001600160701b039092168252519081900360200190f35b6100f16101f2565b60408051918252519081900360200190f35b6100f16101f8565b6100cd6101fe565b6101326004803603602081101561012957600080fd5b50351515610214565b604080516001600160e01b039092168252519081900360200190f35b61015661032e565b6040805163ffffffff9092168252519081900360200190f35b6101b7600480360360a081101561018557600080fd5b506001600160701b03813581169160208101359091169063ffffffff6040820135169060608101359060800135610341565b005b6000546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000546001600160701b031681565b60015481565b60025481565b600054600160701b90046001600160701b031681565b600080546001600160701b031661026a576040805162461bcd60e51b815260206004820152601560248201527405265736572766520697320657175616c20746f203605c1b604482015290519081900360640190fd5b600054600160701b90046001600160701b03166102c6576040805162461bcd60e51b815260206004820152601560248201527405265736572766520697320657175616c20746f203605c1b604482015290519081900360640190fd5b81156102fe57600054600160701b81046001600160701b03169060701b600160701b600160e01b0316816102f657fe5b049050610329565b6000546001600160701b03811690600160701b900460701b600160701b600160e01b0316816102f657fe5b919050565b600054600160e01b900463ffffffff1681565b600080546dffffffffffffffffffffffffffff19166001600160701b03968716176dffffffffffffffffffffffffffff60701b1916600160701b9590961694909402949094176001600160e01b0316600160e01b63ffffffff93909316929092029190911790915560015560025556fea2646970667358221220db371910d66685f137ea7adf79e08749b217eef7e2d8714e4a003bc8c7abe0e664736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve0_\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve1_\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"blockTimestampLast_\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price0CumulativeLast_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price1CumulativeLast_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"blockTimestampLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"getReserves\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"reversedMarket\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"getReservesFraction\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint224\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint224\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"price0CumulativeLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"price1CumulativeLast\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reserve0\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint112\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reserve1\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint112\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve0_\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint112\\\",\\\"name\\\":\\\"reserve1_\\\",\\\"type\\\":\\\"uint112\\\"},{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"blockTimestampLast_\\\",\\\"type\\\":\\\"uint32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price0CumulativeLast_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price1CumulativeLast_\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"update\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"tests/contracts/MockUniswapTokenPair.sol\\\":\\\"MockUniswapTokenPair\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"tests/contracts/MockUniswapTokenPair.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\n\\\\ncontract MockUniswapTokenPair {\\\\n    uint112 public reserve0;\\\\n    uint112 public reserve1;\\\\n    uint32 public blockTimestampLast;\\\\n\\\\n    uint256 public price0CumulativeLast;\\\\n    uint256 public price1CumulativeLast;\\\\n\\\\n    constructor(\\\\n        uint112 reserve0_,\\\\n        uint112 reserve1_,\\\\n        uint32 blockTimestampLast_,\\\\n        uint256 price0CumulativeLast_,\\\\n        uint256 price1CumulativeLast_\\\\n    ) public {\\\\n        reserve0 = reserve0_;\\\\n        reserve1 = reserve1_;\\\\n        blockTimestampLast = blockTimestampLast_;\\\\n        price0CumulativeLast = price0CumulativeLast_;\\\\n        price1CumulativeLast = price1CumulativeLast_;\\\\n    }\\\\n\\\\n    function update(\\\\n        uint112 reserve0_,\\\\n        uint112 reserve1_,\\\\n        uint32 blockTimestampLast_,\\\\n        uint256 price0CumulativeLast_,\\\\n        uint256 price1CumulativeLast_\\\\n    ) public {\\\\n        reserve0 = reserve0_;\\\\n        reserve1 = reserve1_;\\\\n        blockTimestampLast = blockTimestampLast_;\\\\n        price0CumulativeLast = price0CumulativeLast_;\\\\n        price1CumulativeLast = price1CumulativeLast_;\\\\n    }\\\\n\\\\n    function getReserves() external view returns(uint112, uint112, uint32) {\\\\n        return (reserve0, reserve1, blockTimestampLast);\\\\n    }\\\\n\\\\n    function getReservesFraction(bool reversedMarket) external view returns (uint224) {\\\\n        require(reserve0 > 0, \\\\\\\"Reserve is equal to 0\\\\\\\");\\\\n        require(reserve1 > 0, \\\\\\\"Reserve is equal to 0\\\\\\\");\\\\n        if (reversedMarket) {\\\\n          return (uint224(reserve0) << 112) / reserve1;\\\\n        } else {\\\\n          return (uint224(reserve1) << 112) / reserve0;\\\\n        }\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0xb701290f6bc47261b8a365c775c3d0e9a2b97ef73525854e8308c52d183f60e6\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"tests/contracts/MockUniswapView.sol:MockUniswapView\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"anchorPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isPublic\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setAnchorPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"storedAndPendingPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"60a06040523480156200001157600080fd5b5060405162003f1f38038062003f1f83398101604081905262000034916200107a565b6003805460ff60a01b196001600160a01b03199091163317169055600060048190558290829080808381806200006a83620000f3565b50505060808590526005805460ff1916831515179081905560ff1615620000db57600380546001600160a01b03191690819055600160a01b900460ff1615620000d05760405162461bcd60e51b8152600401620000c79062001701565b60405180910390fd5b620000db84620002e9565b620000e684620008d0565b505050505050506200187f565b60005b8151811015620002e557600354600160a01b900460ff166200016b57600260008383815181106200012357fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff16156200016b5760405162461bcd60e51b8152600401620000c7906200139e565b60008282815181106200017a57fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115620001f457fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106200026657fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160026000848481518110620002a957fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620000f6565b5050565b60005b8151811015620002e55760405160200162000307906200120c565b604051602081830303815290604052805190602001208282815181106200032a57fe5b6020026020010151602001511415620003575760405162461bcd60e51b8152600401620000c7906200121b565b8181815181106200036457fe5b6020026020010151602001518282815181106200037d57fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003c257600080fd5b505afa158015620003d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000401919081019062000f73565b60405160200162000413919062001185565b6040516020818303038152906040528051906020012014620004495760405162461bcd60e51b8152600401620000c7906200143d565b8181815181106200045657fe5b6020026020010151604001518282815181106200046f57fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620004b457600080fd5b505afa158015620004c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ef919062001140565b60ff16600a0a14620005155760405162461bcd60e51b8152600401620000c79062001552565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168282815181106200054057fe5b6020026020010151600001516001600160a01b031614156200065b5760008282815181106200056b57fe5b60200260200101516060015160048111156200058357fe5b14620005a35760405162461bcd60e51b8152600401620000c79062001593565b818181518110620005b057fe5b602002602001015160800151670de0b6b3a764000014620005e55760405162461bcd60e51b8152600401620000c7906200176f565b60006001600160a01b0316828281518110620005fd57fe5b602002602001015160a001516001600160a01b031614620006325760405162461bcd60e51b8152600401620000c790620013fb565b60008282815181106200064157fe5b602090810291909101015190151560c090910152620008c7565b60038282815181106200066a57fe5b60200260200101516060015160048111156200068257fe5b14620006a25760405162461bcd60e51b8152600401620000c7906200134e565b818181518110620006af57fe5b602002602001015160800151600014620006dd5760405162461bcd60e51b8152600401620000c790620012c6565b600062000737735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8484815181106200070557fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc262000a7660201b620008511760201c565b9050806001600160a01b03168383815181106200075057fe5b602002602001015160a001516001600160a01b031614620007855760405162461bcd60e51b8152600401620000c7906200149a565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620007c157600080fd5b505afa158015620007d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007fc919062000f4e565b90508383815181106200080b57fe5b6020026020010151600001516001600160a01b0316816001600160a01b03161480156200084e57508383815181106200084057fe5b602002602001015160c00151155b80620008a557508383815181106200086257fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614158015620008a557508383815181106200089857fe5b602002602001015160c001515b620008c45760405162461bcd60e51b8152600401620000c790620015f0565b50505b600101620002ec565b60005b8151811015620002e557620008e762000e44565b828281518110620008f457fe5b602002602001015190506000816040015111620009255760405162461bcd60e51b8152600401620000c79062001284565b60a08101516003826060015160048111156200093d57fe5b141562000a00576001600160a01b0381166200096d5760405162461bcd60e51b8152600401620000c790620016bb565b815160006200097c8462000aeb565b6001600160a01b038316600081815260076020908152604080832042808255600890935292819020828155600193840186905592909201849055905192935090917f0d485bb9561d8954891bf391edd13fa8f4db3ea3191309867ecb63debeb509a891620009f091819086908190620017f1565b60405180910390a2505062000a6b565b81516001600160a01b031673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48141562000a415760405162461bcd60e51b8152600401620000c790620014e5565b6001600160a01b0381161562000a6b5760405162461bcd60e51b8152600401620000c7906200163b565b5050600101620008d3565b6000808062000a86858562000b2a565b9150915085828260405160200162000aa092919062001163565b6040516020818303038152906040528051906020012060405160200162000ac9929190620011a3565b60408051601f1981840301815291905280516020909101209695505050505050565b600080600062000b0a8460a0015162000bbc60201b620008c11760201c565b50915091508360c0015162000b20578162000b22565b805b949350505050565b600080826001600160a01b0316846001600160a01b0316141562000b625760405162461bcd60e51b8152600401620000c79062001309565b826001600160a01b0316846001600160a01b03161062000b8457828462000b87565b83835b90925090506001600160a01b03821662000bb55760405162461bcd60e51b8152600401620000c79062001684565b9250929050565b6000808062000bca62000dbf565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c0657600080fd5b505afa15801562000c1b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c41919062001061565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c7d57600080fd5b505afa15801562000c92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cb8919062001061565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801562000cf957600080fd5b505afa15801562000d0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d34919062001007565b9250925092508363ffffffff168163ffffffff161462000db557600081850390508063ffffffff1662000d73848662000dc960201b62000a961760201c565b600001516001600160e01b031602870196508063ffffffff1662000da3858562000dc960201b62000a961760201c565b516001600160e01b0316029590950194505b5050509193909250565b63ffffffff421690565b62000dd362000e81565b6000826001600160701b03161162000dff5760405162461bcd60e51b8152600401620000c790620017ba565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b168162000e2e57fe5b046001600160e01b031681525090505b92915050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b80516001600160a01b038116811462000e3e57600080fd5b8051801515811462000e3e57600080fd5b600060e0828403121562000ece578081fd5b62000eda60e06200180c565b905062000ee8838362000e93565b8152602082015160208201526040820151604082015260608201516005811062000f1157600080fd5b60608201526080828101519082015262000f2f8360a0840162000e93565b60a082015262000f438360c0840162000eab565b60c082015292915050565b60006020828403121562000f60578081fd5b62000f6c838362000e93565b9392505050565b60006020828403121562000f85578081fd5b81516001600160401b038082111562000f9c578283fd5b818401915084601f83011262000fb0578283fd5b81518181111562000fbf578384fd5b62000fd4601f8201601f19166020016200180c565b915080825285602082850101111562000feb578384fd5b62000ffe81602084016020860162001833565b50949350505050565b6000806000606084860312156200101c578182fd5b8351620010298162001866565b60208501519093506200103c8162001866565b604085015190925063ffffffff8116811462001056578182fd5b809150509250925092565b60006020828403121562001073578081fd5b5051919050565b600080604083850312156200108d578182fd5b8251602080850151919350906001600160401b0380821115620010ae578384fd5b818601915086601f830112620010c2578384fd5b815181811115620010d1578485fd5b620010e084858302016200180c565b818152848101925083850160e0808402860187018b101562001100578788fd5b8795505b838610156200113057620011198b8362000ebc565b855260019590950194938601939081019062001104565b5096999098509650505050505050565b60006020828403121562001152578081fd5b815160ff8116811462000f6c578182fd5b6001600160601b0319606093841b811682529190921b16601482015260280190565b600082516200119981846020870162001833565b9190910192915050565b7fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b60208082526043908201527f45544820646f6573206e6f74206e65656420612070726963652066656564206160408201527f7320616c6c2070726963652066656564732061726520626173656420696e20456060820152622a241760e91b608082015260a00190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526030908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201526f329d1036bab9ba103132902a2ba0a81760811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b60208082526047908201527f55534443206d757374206265205457415020626563617573652046495845445f60408201527f5553442070726963657320617265206261736564206f6e20746865205553444360608201526610383934b1b29760c91b608082015260a00190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b60208082526029908201527f6f6e6c79205457415020707269636573207574696c697a65206120556e697377604082015268185c081b585c9ad95d60ba1b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526026908201527f5457415020707269636573206d7573742068617665206120556e6973776170206040820152651b585c9ad95d60d21b606082015260800190565b60208082526048908201527f63616e41646d696e4f7665727772697465206d7573742062652073657420746f60408201527f2066616c736520666f72207075626c696320556e69737761705669657720636f606082015267373a3930b1ba399760c11b608082015260a00190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b93845260208401929092526040830152606082015260800190565b6040518181016001600160401b03811182821017156200182b57600080fd5b604052919050565b60005b838110156200185057818101518382015260200162001836565b8381111562001860576000848401525b50505050565b6001600160701b03811681146200187c57600080fd5b50565b6080516126856200189a6000398061073f52506126856000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80639f599631116100c3578063dc9a15351161007c578063dc9a1535146102a4578063e073a241146102ac578063e9206d78146102b4578063f851a440146102bc578063fc57d4df146102d1578063fe16e80c146102e45761014d565b80639f59963114610245578063aea9107814610258578063b3bcdfba1461026b578063bd3efef31461027e578063cfed246b14610291578063d1b353b4146101ce5761014d565b806369aa3ac61161011557806369aa3ac6146101ce57806386772638146101e35780638a003888146101f65780638cea8c26146102095780638e499bcf1461022a5780638f283970146102325761014d565b80631a04ee25146101525780632d1c668f1461017c5780633a852169146101915780634da21942146101a6578063656b0fd1146101c6575b600080fd5b610165610160366004611a57565b6102f7565b604051610173929190611dd2565b60405180910390f35b61018f61018a366004611ac6565b61046c565b005b6101996104c4565b6040516101739190611e00565b6101b96101b43660046119f4565b6104c9565b6040516101739190612526565b610199610515565b6101d6610525565b604051610173919061258e565b6101d66101f13660046119f4565b610531565b6101b9610204366004611c72565b610543565b61021c6102173660046119f4565b61061c565b604051610173929190612597565b6101d6610635565b61018f6102403660046119f4565b61063b565b6101b96102533660046119f4565b610687565b6101d66102663660046119f4565b61069a565b61018f610279366004611a57565b6106bf565b61018f61028c366004611a2c565b610700565b6101d661029f3660046119f4565b61071c565b61019961072e565b6101d6610737565b6101d661073d565b6102c4610761565b6040516101739190611da5565b6101d66102df3660046119f4565b610770565b61021c6102f23660046119f4565b610838565b606080808367ffffffffffffffff8111801561031257600080fd5b5060405190808252806020026020018201604052801561033c578160200160208202803683370190505b50905060608467ffffffffffffffff8111801561035857600080fd5b50604051908082528060200260200182016040528015610382578160200160208202803683370190505b50905060005b8581101561045e57600087878381811061039e57fe5b90506020020160208101906103b391906119f4565b90506103bd611904565b6103c6826104c9565b90506003816060015160048111156103da57fe5b146104005760405162461bcd60e51b81526004016103f7906122ac565b60405180910390fd5b6001600160a01b038216600090815260066020526040902054855186908590811061042757fe5b60200260200101818152505061043d8282610b12565b84848151811061044957fe5b60209081029190910101525050600101610388565b5090925090505b9250929050565b60055460ff16156104855761048081610b2e565b6104af565b6003546001600160a01b031633146104af5760405162461bcd60e51b81526004016103f790611fd3565b6104b8816110c3565b6104c1816112aa565b50565b600181565b6104d1611904565b60006104dc83611438565b905060001981146104f8576104f081610543565b915050610510565b60405162461bcd60e51b81526004016103f790611f1b565b919050565b600354600160a01b900460ff1681565b670de0b6b3a764000081565b60096020526000908152604090205481565b61054b611904565b610553610635565b82106105715760405162461bcd60e51b81526004016103f790611f1b565b6000828154811061057e57fe5b60009182526020918290206040805160e081018252600690930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154909190606083019060ff1660048111156105d857fe5b60048111156105e357fe5b8152600482015460208201526005909101546001600160a01b0381166040830152600160a01b900460ff16151560609091015292915050565b6008602052600090815260409020805460019091015482565b60005490565b6003546001600160a01b031633146106655760405162461bcd60e51b81526004016103f790611fd3565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61068f611904565b60006104dc8361147c565b60006106a4611904565b6106ad836104c9565b90506106b881611574565b9392505050565b60005b818110156106fb576106f38383838181106106d957fe5b90506020020160208101906106ee91906119f4565b611762565b6001016106c2565b505050565b6001600160a01b03909116600090815260096020526040902055565b60066020526000908152604090205481565b60055460ff1681565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107ab57600080fd5b505afa1580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e39190611b76565b156107f75750670de0b6b3a7640000610510565b6107ff611904565b61080883610687565b90508060400151610829670de0b6b3a764000061082484611574565b61180d565b8161083057fe5b049392505050565b6007602052600090815260409020805460019091015482565b60008060006108608585611847565b91509150858282604051602001610878929190611cfd565b6040516020818303038152906040528051906020012060405160200161089f929190611d40565b60408051601f1981840301815291905280516020909101209695505050505050565b60008060006108ce6118ca565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561090957600080fd5b505afa15801561091d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109419190611c8a565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b15801561097c57600080fd5b505afa158015610990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b49190611c8a565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156109f457600080fd5b505afa158015610a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c9190611c1e565b9250925092508363ffffffff168163ffffffff1614610a8c5780840363ffffffff8116610a598486610a96565b516001600160e01b031602969096019563ffffffff8116610a7a8585610a96565b516001600160e01b0316029590950194505b5050509193909250565b610a9e611941565b6000826001600160701b031611610ac75760405162461bcd60e51b81526004016103f7906124ef565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681610afc57fe5b046001600160e01b031681525090505b92915050565b506001600160a01b031660009081526009602052604090205490565b60005b81518110156110bf57604051602001610b4990611d96565b60405160208183030381529060405280519060200120828281518110610b6b57fe5b6020026020010151602001511415610b955760405162461bcd60e51b81526004016103f790611e39565b818181518110610ba157fe5b602002602001015160200151828281518110610bb957fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610bfd57600080fd5b505afa158015610c11573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c399190810190611b92565b604051602001610c499190611d24565b6040516020818303038152906040528051906020012014610c7c5760405162461bcd60e51b81526004016103f790612156565b818181518110610c8857fe5b602002602001015160400151828281518110610ca057fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce457600080fd5b505afa158015610cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1c9190611ca2565b60ff16600a0a14610d3f5760405162461bcd60e51b81526004016103f79061226b565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316828281518110610d6957fe5b6020026020010151600001516001600160a01b03161415610e74576000828281518110610d9257fe5b6020026020010151606001516004811115610da957fe5b14610dc65760405162461bcd60e51b81526004016103f7906122e3565b818181518110610dd257fe5b602002602001015160800151670de0b6b3a764000014610e045760405162461bcd60e51b81526004016103f7906124a4565b60006001600160a01b0316828281518110610e1b57fe5b602002602001015160a001516001600160a01b031614610e4d5760405162461bcd60e51b81526004016103f790612114565b6000828281518110610e5b57fe5b602090810291909101015190151560c0909101526110b7565b6003828281518110610e8257fe5b6020026020010151606001516004811115610e9957fe5b14610eb65760405162461bcd60e51b81526004016103f79061200a565b818181518110610ec257fe5b602002602001015160800151600014610eed5760405162461bcd60e51b81526004016103f790611f4b565b6000610f39735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f848481518110610f1357fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2610851565b9050806001600160a01b0316838381518110610f5157fe5b602002602001015160a001516001600160a01b031614610f835760405162461bcd60e51b81526004016103f7906121b3565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbe57600080fd5b505afa158015610fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff69190611a10565b905083838151811061100457fe5b6020026020010151600001516001600160a01b0316816001600160a01b0316148015611045575083838151811061103757fe5b602002602001015160c00151155b80611098575083838151811061105757fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614158015611098575083838151811061108b57fe5b602002602001015160c001515b6110b45760405162461bcd60e51b81526004016103f790612340565b50505b600101610b31565b5050565b60005b81518110156110bf57600354600160a01b900460ff1661113557600260008383815181106110f057fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff16156111355760405162461bcd60e51b81526004016103f79061205a565b600082828151811061114357fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff19909116908360048111156111bc57fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b03199094169390931791909116919091179055600080548351600019919091019160019185908590811061122d57fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016002600084848151811061126f57fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016110c6565b60005b81518110156110bf576112be611904565b8282815181106112ca57fe5b6020026020010151905060008160400151116112f85760405162461bcd60e51b81526004016103f790611ea2565b60a081015160038260600151600481111561130f57fe5b14156113c9576001600160a01b03811661133b5760405162461bcd60e51b81526004016103f79061240b565b81516000611348846118d4565b6001600160a01b038316600081815260076020908152604080832042808255600890935292819020828155600193840186905592909201849055905192935090917f0d485bb9561d8954891bf391edd13fa8f4db3ea3191309867ecb63debeb509a8916113ba918190869081906125a5565b60405180910390a2505061142e565b81516001600160a01b031673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4814156114075760405162461bcd60e51b81526004016103f7906121fe565b6001600160a01b0381161561142e5760405162461bcd60e51b81526004016103f79061238b565b50506001016112ad565b6001600160a01b03811660009081526002602052604081205460ff1661146057600019610b0c565b506001600160a01b031660009081526001602052604090205490565b6000610b0c826001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ba57600080fd5b505afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f29190611b76565b61156c57826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561152f57600080fd5b505afa158015611543573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115679190611a10565b61156f565b60005b611438565b600060038260600151600481111561158857fe5b141561161257600454156115f25781516001600160a01b03908116600090815260086020908152604080832054865190941683526007909152902054600454600291909201049081014211156115f05760405162461bcd60e51b81526004016103f790611e0b565b505b5080516001600160a01b0316600090815260066020526040902054610510565b60018260600151600481111561162457fe5b141561173f5773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860005260066020527fc54ea4dd6a734fa461b7ee355eb25a8cb9467ce4d0e78fa68c9c085fda8edba254806116865760405162461bcd60e51b81526004016103f790612451565b6004541561171d5773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486000527fa197b6ae0044c90610b63b51392eb7144f4390bba5cb14eeeb9a37521cf0dd8a5460076020527ff942f4688cdba65adc8aa59da583acae93fa87351143ebc775559218bfa5f832546004546002919092010490810142111561171b5760405162461bcd60e51b81526004016103f7906120b7565b505b620f424061172f84608001518361180d565b8161173657fe5b04915050610510565b60008260600151600481111561175157fe5b141561051057506080810151610510565b61176a611904565b611773826104c9565b905060038160600151600481111561178757fe5b146117a45760405162461bcd60e51b81526004016103f7906122ac565b60006117b08383610b12565b6001600160a01b03841660009081526006602052604090819020829055519091507f0d86730737b142fc160892fa8a0f2db687a92a0e294d1ad70624cf5acef03b84906118009085908490611db9565b60405180910390a1505050565b60008261181c57506000610b0c565b8282028284828161182957fe5b04146106b85760405162461bcd60e51b81526004016103f790611ee4565b600080826001600160a01b0316846001600160a01b0316141561187c5760405162461bcd60e51b81526004016103f790611f8e565b826001600160a01b0316846001600160a01b03161061189c57828461189f565b83835b90925090506001600160a01b0382166104655760405162461bcd60e51b81526004016103f7906123d4565b63ffffffff421690565b60008060006118e68460a001516108c1565b50915091508360c001516118fa57816118fc565b805b949350505050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b8035610b0c81612617565b8035610b0c8161262c565b600060e0828403121561197a578081fd5b61198460e06125c0565b9050813561199181612617565b8082525060208201356020820152604082013560408201526060820135600581106119bb57600080fd5b6060820152608082810135908201526119d78360a08401611953565b60a08201526119e98360c0840161195e565b60c082015292915050565b600060208284031215611a05578081fd5b81356106b881612617565b600060208284031215611a21578081fd5b81516106b881612617565b60008060408385031215611a3e578081fd5b8235611a4981612617565b946020939093013593505050565b60008060208385031215611a69578182fd5b823567ffffffffffffffff80821115611a80578384fd5b818501915085601f830112611a93578384fd5b813581811115611aa1578485fd5b8660208083028501011115611ab4578485fd5b60209290920196919550909350505050565b60006020808385031215611ad8578182fd5b823567ffffffffffffffff80821115611aef578384fd5b818501915085601f830112611b02578384fd5b813581811115611b10578485fd5b611b1d84858302016125c0565b818152848101925083850160e0808402860187018a1015611b3c578788fd5b8795505b83861015611b6857611b528a83611969565b8552600195909501949386019390810190611b40565b509098975050505050505050565b600060208284031215611b87578081fd5b81516106b88161262c565b600060208284031215611ba3578081fd5b815167ffffffffffffffff80821115611bba578283fd5b818401915084601f830112611bcd578283fd5b815181811115611bdb578384fd5b611bee601f8201601f19166020016125c0565b9150808252856020828501011115611c04578384fd5b611c158160208401602086016125e7565b50949350505050565b600080600060608486031215611c32578081fd5b8351611c3d8161263a565b6020850151909350611c4e8161263a565b604085015190925063ffffffff81168114611c67578182fd5b809150509250925092565b600060208284031215611c83578081fd5b5035919050565b600060208284031215611c9b578081fd5b5051919050565b600060208284031215611cb3578081fd5b815160ff811681146106b8578182fd5b6000815180845260208085019450808401835b83811015611cf257815187529582019590820190600101611cd6565b509495945050505050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b60008251611d368184602087016125e7565b9190910192915050565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b600060408252611de56040830185611cc3565b8281036020840152611df78185611cc3565b95945050505050565b901515815260200190565b6020808252601490820152732a2ba0a810383934b1b29034b99039ba30b6329760611b604082015260600190565b60208082526043908201527f45544820646f6573206e6f74206e65656420612070726963652066656564206160408201527f7320616c6c2070726963652066656564732061726520626173656420696e20456060820152622a241760e91b608082015260a00190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526017908201527f6d73672e73656e646572206973206e6f742061646d696e000000000000000000604082015260600190565b60208082526030908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201526f329d1036bab9ba103132902a2ba0a81760811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526039908201527f555344432054574150207072696365206973207374616c653b2063616e6e6f7460408201527f20636f6e766572742066726f6d2055534420746f204554482e00000000000000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b60208082526047908201527f55534443206d757374206265205457415020626563617573652046495845445f60408201527f5553442070726963657320617265206261736564206f6e20746865205553444360608201526610383934b1b29760c91b608082015260a00190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b6020808252601b908201527f6f6e6c792054574150207072696365732067657420706f737465640000000000604082015260600190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b60208082526029908201527f6f6e6c79205457415020707269636573207574696c697a65206120556e697377604082015268185c081b585c9ad95d60ba1b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526026908201527f5457415020707269636573206d7573742068617665206120556e6973776170206040820152651b585c9ad95d60d21b606082015260800190565b60208082526033908201527f55534443207072696365206e6f74207365743b2063616e6e6f7420636f6e7665604082015272393a10333937b6902aa9a2103a379022aa241760691b606082015260800190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b81516001600160a01b0390811682526020808401519083015260408084015190830152606083015160e0830191906005811061255e57fe5b80606085015250608084015160808401528060a08501511660a08401525060c0830151151560c083015292915050565b90815260200190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60405181810167ffffffffffffffff811182821017156125df57600080fd5b604052919050565b60005b838110156126025781810151838201526020016125ea565b83811115612611576000848401525b50505050565b6001600160a01b03811681146104c157600080fd5b80151581146104c157600080fd5b6001600160701b03811681146104c157600080fdfea2646970667358221220d5d89a6591287e2b7f36613a825cc4763951704888f57731bd33ee182cf3c16b64736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"anchorPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isPublic\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setAnchorPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"storedAndPendingPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"params\\\":{\\\"configs\\\":\\\"The static token configurations which define what prices are supported and how\\\"}},\\\"getTokenConfig(uint256)\\\":{\\\"params\\\":{\\\"i\\\":\\\"The index of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByCToken(address)\\\":{\\\"params\\\":{\\\"cToken\\\":\\\"The address of the cToken of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The address of the underlying asset of the config to get\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"The config object\\\"}},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the PriceOracle interface for Compound v2.\\\",\\\"params\\\":{\\\"cToken\\\":\\\"The cToken address for price retrieval\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals, for the given cToken address\\\"}},\\\"postPrices(address[])\\\":{\\\"details\\\":\\\"We let anyone pay to post anything, but only prices from Uniswap will be stored in the view.\\\",\\\"params\\\":{\\\"underlyings\\\":\\\"The underlying token addresses for which to get and post TWAPs\\\"}},\\\"price(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The underlying token address for which to get the price (set to zero address for ETH)\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals\\\"}},\\\"storedAndPendingPrices(address[])\\\":{\\\"details\\\":\\\"Get both stored and pending prices for `underlyings` for comparison off-chain to determine if posting is needed.\\\"}},\\\"version\\\":1},\\\"userdoc\\\":{\\\"events\\\":{\\\"AnchorPriceUpdated(address,uint256,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when anchor price is updated\\\"},\\\"PriceUpdated(address,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the stored price is updated\\\"},\\\"UniswapWindowUpdated(address,uint256,uint256,uint256,uint256)\\\":{\\\"notice\\\":\\\"The event emitted when the uniswap window changes\\\"}},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"IS_UNISWAP_VIEW()\\\":{\\\"notice\\\":\\\"Constant indicating that this contract is a UniswapView\\\"},\\\"add((address,bytes32,uint256,uint8,uint256,address,bool)[])\\\":{\\\"notice\\\":\\\"Add new asset(s)\\\"},\\\"admin()\\\":{\\\"notice\\\":\\\"Admin address\\\"},\\\"anchorPeriod()\\\":{\\\"notice\\\":\\\"The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced\\\"},\\\"canAdminOverwrite()\\\":{\\\"notice\\\":\\\"Whether or not existing token configs can be overwritten\\\"},\\\"changeAdmin(address)\\\":{\\\"notice\\\":\\\"Changes the admin\\\"},\\\"ethBaseUnit()\\\":{\\\"notice\\\":\\\"The number of wei in 1 ETH\\\"},\\\"expScale()\\\":{\\\"notice\\\":\\\"A common scaling factor to maintain precision\\\"},\\\"getTokenConfig(uint256)\\\":{\\\"notice\\\":\\\"Get the i-th config, according to the order they were passed in originally\\\"},\\\"getTokenConfigByCToken(address)\\\":{\\\"notice\\\":\\\"Get the config for the cToken\\\"},\\\"getTokenConfigByUnderlying(address)\\\":{\\\"notice\\\":\\\"Get the config for an underlying asset\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Get the underlying price of a cToken\\\"},\\\"isPublic()\\\":{\\\"notice\\\":\\\"If new token configs can be added by anyone\\\"},\\\"maxSecondsBeforePriceIsStale()\\\":{\\\"notice\\\":\\\"The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\"},\\\"newObservations(address)\\\":{\\\"notice\\\":\\\"The new observation for each underlying\\\"},\\\"numTokens()\\\":{\\\"notice\\\":\\\"The number of tokens this contract actually supports\\\"},\\\"oldObservations(address)\\\":{\\\"notice\\\":\\\"The old observation for each underlying\\\"},\\\"postPrices(address[])\\\":{\\\"notice\\\":\\\"Update Uniswap TWAP prices\\\"},\\\"price(address)\\\":{\\\"notice\\\":\\\"Get the official price for an underlying token address\\\"},\\\"prices(address)\\\":{\\\"notice\\\":\\\"Official prices by underlying\\\"}},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"tests/contracts/MockUniswapView.sol\\\":\\\"MockUniswapView\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"contracts/Uniswap/UniswapConfig.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport { CToken, CErc20 } from \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\ncontract UniswapConfig {\\\\r\\\\n    /// @dev Describe how to interpret the fixedPrice in the TokenConfig.\\\\r\\\\n    enum PriceSource {\\\\r\\\\n        FIXED_ETH, /// implies the fixedPrice is a constant multiple of the ETH price (which varies)\\\\r\\\\n        FIXED_USD, /// implies the fixedPrice is a constant multiple of the USD price (which is 1)\\\\r\\\\n        REPORTER,  /// implies the price is set by the reporter (only available on UniswapAnchoredView)\\\\r\\\\n        TWAP,      /// implies the price is set by TWAPs (only available on UniswapView)\\\\r\\\\n        UNISWAP    /// implies the price is set by the direct Uniswap price (only available on UniswapDirectView)\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Describe how the USD price should be determined for an asset.\\\\r\\\\n    ///  There should be 1 TokenConfig object for each supported asset, passed in the constructor.\\\\r\\\\n    struct TokenConfig {\\\\r\\\\n        address underlying;\\\\r\\\\n        bytes32 symbolHash;\\\\r\\\\n        uint256 baseUnit;\\\\r\\\\n        PriceSource priceSource;\\\\r\\\\n        uint256 fixedPrice;\\\\r\\\\n        address uniswapMarket;\\\\r\\\\n        bool isUniswapReversed;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Token config objects\\\\r\\\\n    TokenConfig[] internal _configs;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to token config indexes\\\\r\\\\n    mapping(address => uint256) internal _configIndexesByUnderlying;\\\\r\\\\n\\\\r\\\\n    /// @dev Maps underlying addresses to booleans indicating if they have token configs\\\\r\\\\n    mapping(address => bool) internal _configPresenceByUnderlying;\\\\r\\\\n    \\\\r\\\\n    /// @notice Admin address\\\\r\\\\n    address public admin;\\\\r\\\\n    \\\\r\\\\n    /// @notice Whether or not existing token configs can be overwritten\\\\r\\\\n    bool public canAdminOverwrite;\\\\r\\\\n\\\\r\\\\n    /// @notice The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n    uint256 public maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct an immutable store of configs into the contract data\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten\\\\r\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n     */\\\\r\\\\n    constructor(TokenConfig[] memory configs, bool _canAdminOverwrite, uint256 _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        admin = msg.sender;\\\\r\\\\n        canAdminOverwrite = _canAdminOverwrite;\\\\r\\\\n        maxSecondsBeforePriceIsStale = _maxSecondsBeforePriceIsStale;\\\\r\\\\n\\\\r\\\\n        // Add configs\\\\r\\\\n        _add(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Internal function to add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function _add(TokenConfig[] memory configs) internal virtual {\\\\r\\\\n        // For each config\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // If !canAdminOverwrite, check for existing config\\\\r\\\\n            if (!canAdminOverwrite) require(!_configPresenceByUnderlying[configs[i].underlying], \\\\\\\"Token config already exists for this underlying token address.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Add config to state\\\\r\\\\n            _configs.push(configs[i]);\\\\r\\\\n            _configIndexesByUnderlying[configs[i].underlying] = _configs.length - 1;\\\\r\\\\n            _configPresenceByUnderlying[configs[i].underlying] = true;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice Changes the admin\\\\r\\\\n    function changeAdmin(address newAdmin) external {\\\\r\\\\n        require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n        admin = newAdmin;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @notice The number of tokens this contract actually supports\\\\r\\\\n    function numTokens() public view returns (uint256) {\\\\r\\\\n        return _configs.length;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by cToken address\\\\r\\\\n    function getCTokenIndex(address cToken) internal view returns (uint) {\\\\r\\\\n        return getUnderlyingIndex(CToken(cToken).isCEther() ? address(0) : CErc20(cToken).underlying());\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Get token config index by underlying ERC20 token address\\\\r\\\\n    function getUnderlyingIndex(address underlying) internal view returns (uint) {\\\\r\\\\n        return _configPresenceByUnderlying[underlying] ? _configIndexesByUnderlying[underlying] : uint(-1);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the i-th config, according to the order they were passed in originally\\\\r\\\\n     * @param i The index of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfig(uint i) public view returns (TokenConfig memory) {\\\\r\\\\n        require(i < numTokens(), \\\\\\\"token config not found\\\\\\\");\\\\r\\\\n        return _configs[i];\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for the cToken\\\\r\\\\n     * @param cToken The address of the cToken of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByCToken(address cToken) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getCTokenIndex(cToken);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the config for an underlying asset\\\\r\\\\n     * @param underlying The address of the underlying asset of the config to get\\\\r\\\\n     * @return The config object\\\\r\\\\n     */\\\\r\\\\n    function getTokenConfigByUnderlying(address underlying) public view returns (TokenConfig memory) {\\\\r\\\\n        uint index = getUnderlyingIndex(underlying);\\\\r\\\\n        if (index != uint(-1)) return getTokenConfig(index);\\\\r\\\\n        revert(\\\\\\\"token config not found\\\\\\\");\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x5cdbac709449ecaa73d9bc7e628d5e78fcda19a579fce7a8afc5ee62dbf33fa0\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapLib.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\n\\\\r\\\\n// Based on code from https://github.com/Uniswap/uniswap-v2-periphery\\\\r\\\\n\\\\r\\\\n// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))\\\\r\\\\nlibrary FixedPoint {\\\\r\\\\n    // range: [0, 2**112 - 1]\\\\r\\\\n    // resolution: 1 / 2**112\\\\r\\\\n    struct uq112x112 {\\\\r\\\\n        uint224 _x;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // returns a uq112x112 which represents the ratio of the numerator to the denominator\\\\r\\\\n    // equivalent to encode(numerator).div(denominator)\\\\r\\\\n    function fraction(uint112 numerator, uint112 denominator) internal pure returns (uq112x112 memory) {\\\\r\\\\n        require(denominator > 0, \\\\\\\"FixedPoint: DIV_BY_ZERO\\\\\\\");\\\\r\\\\n        return uq112x112((uint224(numerator) << 112) / denominator);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // decode a uq112x112 into a uint with 18 decimals of precision\\\\r\\\\n    function decode112with18(uq112x112 memory self) internal pure returns (uint) {\\\\r\\\\n        // we only have 256 - 224 = 32 bits to spare, so scaling up by ~60 bits is dangerous\\\\r\\\\n        // instead, get close to:\\\\r\\\\n        //  (x * 1e18) >> 112\\\\r\\\\n        // without risk of overflowing, e.g.:\\\\r\\\\n        //  (x) / 2 ** (112 - lg(1e18))\\\\r\\\\n        return uint(self._x) / 5192296858534827;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// library with helper methods for oracles that are concerned with computing average prices\\\\r\\\\nlibrary UniswapV2OracleLibrary {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n\\\\r\\\\n    // helper function that returns the current block timestamp within the range of uint32, i.e. [0, 2**32 - 1]\\\\r\\\\n    function currentBlockTimestamp() internal view returns (uint32) {\\\\r\\\\n        return uint32(block.timestamp % 2 ** 32);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // produces the cumulative price using counterfactuals to save gas and avoid a call to sync.\\\\r\\\\n    function currentCumulativePrices(\\\\r\\\\n        address pair\\\\r\\\\n    ) internal view returns (uint price0Cumulative, uint price1Cumulative, uint32 blockTimestamp) {\\\\r\\\\n        blockTimestamp = currentBlockTimestamp();\\\\r\\\\n        price0Cumulative = IUniswapV2Pair(pair).price0CumulativeLast();\\\\r\\\\n        price1Cumulative = IUniswapV2Pair(pair).price1CumulativeLast();\\\\r\\\\n\\\\r\\\\n        // if time has elapsed since the last update on the pair, mock the accumulated price values\\\\r\\\\n        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = IUniswapV2Pair(pair).getReserves();\\\\r\\\\n        if (blockTimestampLast != blockTimestamp) {\\\\r\\\\n            // subtraction overflow is desired\\\\r\\\\n            uint32 timeElapsed = blockTimestamp - blockTimestampLast;\\\\r\\\\n            // addition overflow is desired\\\\r\\\\n            // counterfactual\\\\r\\\\n            price0Cumulative += uint(FixedPoint.fraction(reserve1, reserve0)._x) * timeElapsed;\\\\r\\\\n            // counterfactual\\\\r\\\\n            price1Cumulative += uint(FixedPoint.fraction(reserve0, reserve1)._x) * timeElapsed;\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IUniswapV2Pair {\\\\r\\\\n    function token0() external view returns (address);\\\\r\\\\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\\\\r\\\\n    function price0CumulativeLast() external view returns (uint);\\\\r\\\\n    function price1CumulativeLast() external view returns (uint);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\nlibrary UniswapV2Library {\\\\r\\\\n    using SafeMath for uint256;\\\\r\\\\n\\\\r\\\\n    // returns sorted token addresses, used to handle return values from pairs sorted in this order\\\\r\\\\n    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {\\\\r\\\\n        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');\\\\r\\\\n        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);\\\\r\\\\n        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // calculates the CREATE2 address for a pair without making any external calls\\\\r\\\\n    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {\\\\r\\\\n        (address token0, address token1) = sortTokens(tokenA, tokenB);\\\\r\\\\n        pair = address(uint(keccak256(abi.encodePacked(\\\\r\\\\n                hex'ff',\\\\r\\\\n                factory,\\\\r\\\\n                keccak256(abi.encodePacked(token0, token1)),\\\\r\\\\n                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash\\\\r\\\\n            ))));\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset\\\\r\\\\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {\\\\r\\\\n        require(amountIn > 0, 'UniswapV2Library: INSUFFICIENT_INPUT_AMOUNT');\\\\r\\\\n        require(reserveIn > 0 && reserveOut > 0, 'UniswapV2Library: INSUFFICIENT_LIQUIDITY');\\\\r\\\\n        uint amountInWithFee = amountIn.mul(997);\\\\r\\\\n        uint numerator = amountInWithFee.mul(reserveOut);\\\\r\\\\n        uint denominator = reserveIn.mul(1000).add(amountInWithFee);\\\\r\\\\n        amountOut = numerator / denominator;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\n// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)\\\\r\\\\nlibrary SafeMath {\\\\r\\\\n    function add(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x + y) >= x, 'ds-math-add-overflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function sub(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require((z = x - y) <= x, 'ds-math-sub-underflow');\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function mul(uint x, uint y) internal pure returns (uint z) {\\\\r\\\\n        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface IERC20 {\\\\r\\\\n    function symbol() external view returns (string memory);\\\\r\\\\n    function decimals() external view returns (uint8);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CToken {\\\\r\\\\n    function isCEther() external view returns (bool);\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ninterface CErc20 {\\\\r\\\\n    function underlying() external view returns (address);\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xca917f185b480ae24918e4a1d049b32c95d9a6677d6868f7126d3d24d7af0e26\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"contracts/Uniswap/UniswapView.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport \\\\\\\"./UniswapConfig.sol\\\\\\\";\\\\r\\\\nimport \\\\\\\"./UniswapLib.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\nstruct Observation {\\\\r\\\\n    uint timestamp;\\\\r\\\\n    uint acc;\\\\r\\\\n}\\\\r\\\\n\\\\r\\\\ncontract UniswapView is UniswapConfig {\\\\r\\\\n    using FixedPoint for *;\\\\r\\\\n    \\\\r\\\\n    /// @notice Constant indicating that this contract is a UniswapView\\\\r\\\\n    bool constant public IS_UNISWAP_VIEW = true;\\\\r\\\\n\\\\r\\\\n    /// @notice The number of wei in 1 ETH\\\\r\\\\n    uint public constant ethBaseUnit = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice A common scaling factor to maintain precision\\\\r\\\\n    uint public constant expScale = 1e18;\\\\r\\\\n\\\\r\\\\n    /// @notice The minimum amount of time in seconds required for the old uniswap price accumulator to be replaced\\\\r\\\\n    uint public immutable anchorPeriod;\\\\r\\\\n\\\\r\\\\n    /// @notice If new token configs can be added by anyone\\\\r\\\\n    bool public isPublic;\\\\r\\\\n\\\\r\\\\n    /// @notice Official prices by underlying\\\\r\\\\n    mapping(address => uint) public prices;\\\\r\\\\n\\\\r\\\\n    /// @notice The old observation for each underlying\\\\r\\\\n    mapping(address => Observation) public oldObservations;\\\\r\\\\n\\\\r\\\\n    /// @notice The new observation for each underlying\\\\r\\\\n    mapping(address => Observation) public newObservations;\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when the stored price is updated\\\\r\\\\n    event PriceUpdated(address underlying, uint price);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when anchor price is updated\\\\r\\\\n    event AnchorPriceUpdated(address underlying, uint anchorPrice, uint oldTimestamp, uint newTimestamp);\\\\r\\\\n\\\\r\\\\n    /// @notice The event emitted when the uniswap window changes\\\\r\\\\n    event UniswapWindowUpdated(address indexed underlying, uint oldTimestamp, uint newTimestamp, uint oldPrice, uint newPrice);\\\\r\\\\n\\\\r\\\\n    /// @dev The symbol hash for ETH\\\\r\\\\n    bytes32 constant ethHash = keccak256(abi.encodePacked(\\\\\\\"ETH\\\\\\\"));\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Construct a uniswap anchored view for a set of token configurations\\\\r\\\\n     * @dev Note that to avoid immature TWAPs, the system must run for at least a single anchorPeriod before using.\\\\r\\\\n     * @param anchorPeriod_ The minimum amount of time required for the old uniswap price accumulator to be replaced\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     * @param _canAdminOverwrite Whether or not existing token configs can be overwritten (must be false if `_isPublic` is true)\\\\r\\\\n     * @param _isPublic If true, anyone can add assets, but they will be validated\\\\r\\\\n     * @param _maxSecondsBeforePriceIsStale The maxmimum number of seconds elapsed since the price was last updated before it is considered stale. If set to 0, no limit is enforced.\\\\r\\\\n     */\\\\r\\\\n    constructor(uint anchorPeriod_,\\\\r\\\\n                TokenConfig[] memory configs,\\\\r\\\\n                bool _canAdminOverwrite,\\\\r\\\\n                bool _isPublic,\\\\r\\\\n                uint256 _maxSecondsBeforePriceIsStale) UniswapConfig(configs, _canAdminOverwrite, _maxSecondsBeforePriceIsStale) public {\\\\r\\\\n        // Initialize variables\\\\r\\\\n        anchorPeriod = anchorPeriod_;\\\\r\\\\n        isPublic = _isPublic;\\\\r\\\\n\\\\r\\\\n        // If public, force set admin to 0, require !canAdminOverwrite, and check token configs\\\\r\\\\n        if (isPublic) {\\\\r\\\\n            admin = address(0);\\\\r\\\\n            require(!canAdminOverwrite, \\\\\\\"canAdminOverwrite must be set to false for public UniswapView contracts.\\\\\\\");\\\\r\\\\n            checkTokenConfigs(configs);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        // Init token configs\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev UniswapV2Factory contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private UNISWAP_V2_FACTORY_ADDRESS = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;\\\\r\\\\n    \\\\r\\\\n    /**\\\\r\\\\n     * @dev WETH contract address.\\\\r\\\\n     */\\\\r\\\\n    address constant private WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Verifies token configs\\\\r\\\\n     * @param configs The configs for the supported assets\\\\r\\\\n     */\\\\r\\\\n    function checkTokenConfigs(TokenConfig[] memory configs) internal view {\\\\r\\\\n        for (uint256 i = 0; i < configs.length; i++) {\\\\r\\\\n            // Check symbolHash for ETH\\\\r\\\\n            require(configs[i].symbolHash != ethHash, \\\\\\\"ETH does not need a price feed as all price feeds are based in ETH.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check symbolHash against underlying symbol\\\\r\\\\n            require(keccak256(abi.encodePacked(IERC20(configs[i].underlying).symbol())) == configs[i].symbolHash, \\\\\\\"Symbol mismatch between token config and ERC20 symbol method.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check baseUnit against underlying decimals\\\\r\\\\n            require(10 ** uint256(IERC20(configs[i].underlying).decimals()) == configs[i].baseUnit, \\\\\\\"Incorrect token config base unit.\\\\\\\");\\\\r\\\\n\\\\r\\\\n            // Check for WETH\\\\r\\\\n            if (configs[i].underlying == WETH_ADDRESS) {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.FIXED_ETH, \\\\\\\"Invalid WETH token config price source: must be FIXED_ETH.\\\\\\\");\\\\r\\\\n                \\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 1e18, \\\\\\\"WETH token config fixed price must be 1e18.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                require(configs[i].uniswapMarket == address(0), \\\\\\\"WETH Uniswap market not necessary.\\\\\\\");\\\\r\\\\n                configs[i].isUniswapReversed = false;\\\\r\\\\n            } else {\\\\r\\\\n                // Check price source\\\\r\\\\n                require(configs[i].priceSource == PriceSource.TWAP, \\\\\\\"Invalid token config price source: must be TWAP.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check fixed price\\\\r\\\\n                require(configs[i].fixedPrice == 0, \\\\\\\"Token config fixed price must be 0.\\\\\\\");\\\\r\\\\n\\\\r\\\\n                // Check uniswapMarket and isUniswapReversed\\\\r\\\\n                IUniswapV2Pair pair = IUniswapV2Pair(UniswapV2Library.pairFor(UNISWAP_V2_FACTORY_ADDRESS, configs[i].underlying, WETH_ADDRESS));\\\\r\\\\n                require(configs[i].uniswapMarket == address(pair), \\\\\\\"Token config Uniswap market is not correct.\\\\\\\");\\\\r\\\\n                address token0 = pair.token0();\\\\r\\\\n                require((token0 == configs[i].underlying && !configs[i].isUniswapReversed) || (token0 != configs[i].underlying && configs[i].isUniswapReversed), \\\\\\\"Token config Uniswap reversal is incorrect.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Initialize token configs\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function initConfigs(TokenConfig[] memory configs) internal {\\\\r\\\\n        for (uint i = 0; i < configs.length; i++) {\\\\r\\\\n            TokenConfig memory config = configs[i];\\\\r\\\\n            require(config.baseUnit > 0, \\\\\\\"baseUnit must be greater than zero\\\\\\\");\\\\r\\\\n            address uniswapMarket = config.uniswapMarket;\\\\r\\\\n            if (config.priceSource == PriceSource.TWAP) {\\\\r\\\\n                require(uniswapMarket != address(0), \\\\\\\"TWAP prices must have a Uniswap market\\\\\\\");\\\\r\\\\n                address underlying = config.underlying;\\\\r\\\\n                uint cumulativePrice = currentCumulativePrice(config);\\\\r\\\\n                oldObservations[underlying].timestamp = block.timestamp;\\\\r\\\\n                newObservations[underlying].timestamp = block.timestamp;\\\\r\\\\n                oldObservations[underlying].acc = cumulativePrice;\\\\r\\\\n                newObservations[underlying].acc = cumulativePrice;\\\\r\\\\n                emit UniswapWindowUpdated(underlying, block.timestamp, block.timestamp, cumulativePrice, cumulativePrice);\\\\r\\\\n            } else {\\\\r\\\\n                require(config.underlying != 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, \\\\\\\"USDC must be TWAP because FIXED_USD prices are based on the USDC price.\\\\\\\");\\\\r\\\\n                require(uniswapMarket == address(0), \\\\\\\"only TWAP prices utilize a Uniswap market\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Add new asset(s)\\\\r\\\\n     * @param configs The static token configurations which define what prices are supported and how\\\\r\\\\n     */\\\\r\\\\n    function add(TokenConfig[] memory configs) external {\\\\r\\\\n        // If public, check token configs; if private, check that msg.sender == admin\\\\r\\\\n        if (isPublic) checkTokenConfigs(configs);\\\\r\\\\n        else require(msg.sender == admin, \\\\\\\"msg.sender is not admin\\\\\\\");\\\\r\\\\n\\\\r\\\\n        // Add and init token configs\\\\r\\\\n        _add(configs);\\\\r\\\\n        initConfigs(configs);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the official price for an underlying token address\\\\r\\\\n     * @param underlying The underlying token address for which to get the price (set to zero address for ETH)\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals\\\\r\\\\n     */\\\\r\\\\n    function price(address underlying) external view returns (uint) {\\\\r\\\\n        TokenConfig memory config = getTokenConfigByUnderlying(underlying);\\\\r\\\\n        return priceInternal(config);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function priceInternal(TokenConfig memory config) internal view returns (uint) {\\\\r\\\\n        if (config.priceSource == PriceSource.TWAP) {\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) {\\\\r\\\\n                uint256 averageObservationTimestamp = (oldObservations[config.underlying].timestamp + newObservations[config.underlying].timestamp) / 2;\\\\r\\\\n                require(block.timestamp <= averageObservationTimestamp + maxSecondsBeforePriceIsStale, \\\\\\\"TWAP price is stale.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n            return prices[config.underlying];\\\\r\\\\n        }\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_USD) {\\\\r\\\\n            // Use USDC/ETH price (requires a TWAP-based token config for USDC) to convert from USD to ETH\\\\r\\\\n            uint ethPerUsd = prices[0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48];\\\\r\\\\n            require(ethPerUsd > 0, \\\\\\\"USDC price not set; cannot convert from USD to ETH.\\\\\\\");\\\\r\\\\n            if (maxSecondsBeforePriceIsStale > 0) {\\\\r\\\\n                uint256 averageObservationTimestamp = (oldObservations[0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48].timestamp + newObservations[0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48].timestamp) / 2;\\\\r\\\\n                require(block.timestamp <= averageObservationTimestamp + maxSecondsBeforePriceIsStale, \\\\\\\"USDC TWAP price is stale; cannot convert from USD to ETH.\\\\\\\");\\\\r\\\\n            }\\\\r\\\\n            return mul(config.fixedPrice, ethPerUsd) / 1e6;\\\\r\\\\n        }\\\\r\\\\n        if (config.priceSource == PriceSource.FIXED_ETH) return config.fixedPrice;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Get the underlying price of a cToken\\\\r\\\\n     * @dev Implements the PriceOracle interface for Compound v2.\\\\r\\\\n     * @param cToken The cToken address for price retrieval\\\\r\\\\n     * @return Price denominated in ETH, with 18 decimals, for the given cToken address\\\\r\\\\n     */\\\\r\\\\n    function getUnderlyingPrice(address cToken) external view returns (uint) {\\\\r\\\\n        if (CToken(cToken).isCEther()) return ethBaseUnit; // ETH does not have a token config as `prices` is based in ETH\\\\r\\\\n        TokenConfig memory config = getTokenConfigByCToken(cToken);\\\\r\\\\n         // Comptroller needs prices in the format: ${raw price} * 1e(36 - baseUnit)\\\\r\\\\n         // Since the prices in this view have 18 decimals, we must scale them by 1e(36 - 18 - baseUnit)\\\\r\\\\n        return mul(1e18, priceInternal(config)) / config.baseUnit;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @notice Update Uniswap TWAP prices\\\\r\\\\n     * @dev We let anyone pay to post anything, but only prices from Uniswap will be stored in the view.\\\\r\\\\n     * @param underlyings The underlying token addresses for which to get and post TWAPs\\\\r\\\\n     */\\\\r\\\\n    function postPrices(address[] calldata underlyings) external {\\\\r\\\\n        // Try to update the view storage\\\\r\\\\n        for (uint i = 0; i < underlyings.length; i++) {\\\\r\\\\n            postPriceInternal(underlyings[i]);\\\\r\\\\n        }\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function postPriceInternal(address underlying) internal {\\\\r\\\\n        TokenConfig memory config = getTokenConfigByUnderlying(underlying);\\\\r\\\\n        require(config.priceSource == PriceSource.TWAP, \\\\\\\"only TWAP prices get posted\\\\\\\");\\\\r\\\\n        uint anchorPrice = fetchAnchorPrice(underlying, config);\\\\r\\\\n        prices[underlying] = anchorPrice;\\\\r\\\\n        emit PriceUpdated(underlying, anchorPrice);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current token/ETH price accumulator from Uniswap.\\\\r\\\\n     */\\\\r\\\\n    function currentCumulativePrice(TokenConfig memory config) internal view returns (uint) {\\\\r\\\\n        (uint cumulativePrice0, uint cumulativePrice1,) = UniswapV2OracleLibrary.currentCumulativePrices(config.uniswapMarket);\\\\r\\\\n        return config.isUniswapReversed ? cumulativePrice1 : cumulativePrice0;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Fetches the current token/ETH price from Uniswap, with 18 decimals of precision.\\\\r\\\\n     */\\\\r\\\\n    function fetchAnchorPrice(address underlying, TokenConfig memory config) internal virtual returns (uint) {\\\\r\\\\n        (uint nowCumulativePrice, uint oldCumulativePrice, uint oldTimestamp) = pokeWindowValues(config);\\\\r\\\\n\\\\r\\\\n        // This should be impossible, but better safe than sorry\\\\r\\\\n        require(block.timestamp > oldTimestamp, \\\\\\\"now must come after before\\\\\\\");\\\\r\\\\n        uint timeElapsed = block.timestamp - oldTimestamp;\\\\r\\\\n\\\\r\\\\n        // Calculate uniswap time-weighted average price\\\\r\\\\n        // Underflow is a property of the accumulators: https://uniswap.org/audit.html#orgc9b3190\\\\r\\\\n        FixedPoint.uq112x112 memory priceAverage = FixedPoint.uq112x112(uint224((nowCumulativePrice - oldCumulativePrice) / timeElapsed));\\\\r\\\\n        uint rawUniswapPriceMantissa = priceAverage.decode112with18();\\\\r\\\\n        uint unscaledPriceMantissa = mul(rawUniswapPriceMantissa, 1e18);\\\\r\\\\n        uint anchorPrice;\\\\r\\\\n\\\\r\\\\n        // Adjust rawUniswapPrice according to the units of the non-ETH asset\\\\r\\\\n\\\\r\\\\n        // In the case of non-ETH tokens\\\\r\\\\n        // a. pokeWindowValues already handled uniswap reversed cases, so priceAverage will always be Token/ETH TWAP price.\\\\r\\\\n        // b. conversionFactor = 1e18\\\\r\\\\n        // unscaledPriceMantissa = priceAverage(token/ETH TWAP price) * expScale * conversionFactor\\\\r\\\\n        // so ->\\\\r\\\\n        // anchorPrice = priceAverage * tokenBaseUnit / ethBaseUnit * 1e18\\\\r\\\\n        //             = priceAverage * conversionFactor * tokenBaseUnit / ethBaseUnit\\\\r\\\\n        //             = unscaledPriceMantissa / expScale * tokenBaseUnit / ethBaseUnit\\\\r\\\\n        anchorPrice = mul(unscaledPriceMantissa, config.baseUnit) / ethBaseUnit / expScale;\\\\r\\\\n\\\\r\\\\n        emit AnchorPriceUpdated(underlying, anchorPrice, oldTimestamp, block.timestamp);\\\\r\\\\n\\\\r\\\\n        return anchorPrice;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Get both stored and pending prices for `underlyings` for comparison off-chain to determine if posting is needed.\\\\r\\\\n     */\\\\r\\\\n    function storedAndPendingPrices(address[] calldata underlyings) external returns (uint256[] memory, uint256[] memory) {\\\\r\\\\n        uint256[] memory storedPrices = new uint256[](underlyings.length);\\\\r\\\\n        uint256[] memory pendingPrices = new uint256[](underlyings.length);\\\\r\\\\n\\\\r\\\\n        for (uint256 i = 0; i < underlyings.length; i++) {\\\\r\\\\n            address underlying = underlyings[i];\\\\r\\\\n            TokenConfig memory config = getTokenConfigByUnderlying(underlying);\\\\r\\\\n            require(config.priceSource == PriceSource.TWAP, \\\\\\\"only TWAP prices get posted\\\\\\\");\\\\r\\\\n            storedPrices[i] = prices[underlying];\\\\r\\\\n            pendingPrices[i] = fetchAnchorPrice(underlying, config);\\\\r\\\\n        }\\\\r\\\\n\\\\r\\\\n        return (storedPrices, pendingPrices);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /**\\\\r\\\\n     * @dev Get time-weighted average prices for a token at the current timestamp.\\\\r\\\\n     *  Update new and old observations of lagging window if period elapsed.\\\\r\\\\n     */\\\\r\\\\n    function pokeWindowValues(TokenConfig memory config) internal returns (uint, uint, uint) {\\\\r\\\\n        address underlying = config.underlying;\\\\r\\\\n        uint cumulativePrice = currentCumulativePrice(config);\\\\r\\\\n\\\\r\\\\n        Observation memory newObservation = newObservations[underlying];\\\\r\\\\n\\\\r\\\\n        // Update new and old observations if elapsed time is greater than or equal to anchor period\\\\r\\\\n        uint timeElapsed = block.timestamp - newObservation.timestamp;\\\\r\\\\n        if (timeElapsed >= anchorPeriod) {\\\\r\\\\n            oldObservations[underlying].timestamp = newObservation.timestamp;\\\\r\\\\n            oldObservations[underlying].acc = newObservation.acc;\\\\r\\\\n\\\\r\\\\n            newObservations[underlying].timestamp = block.timestamp;\\\\r\\\\n            newObservations[underlying].acc = cumulativePrice;\\\\r\\\\n            emit UniswapWindowUpdated(config.underlying, newObservation.timestamp, block.timestamp, newObservation.acc, cumulativePrice);\\\\r\\\\n        }\\\\r\\\\n        return (cumulativePrice, oldObservations[underlying].acc, oldObservations[underlying].timestamp);\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    /// @dev Overflow proof multiplication\\\\r\\\\n    function mul(uint a, uint b) internal pure returns (uint) {\\\\r\\\\n        if (a == 0) return 0;\\\\r\\\\n        uint c = a * b;\\\\r\\\\n        require(c / a == b, \\\\\\\"multiplication overflow\\\\\\\");\\\\r\\\\n        return c;\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0xb9282ac9a5d271c0e166a345d382900c69a03ab866889cf17a178676fa6a96a5\\\",\\\"license\\\":\\\"GPL-3.0\\\"},\\\"tests/contracts/MockUniswapView.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\r\\\\n\\\\r\\\\npragma solidity ^0.6.10;\\\\r\\\\npragma experimental ABIEncoderV2;\\\\r\\\\n\\\\r\\\\nimport \\\\\\\"../../contracts/Uniswap/UniswapView.sol\\\\\\\";\\\\r\\\\n\\\\r\\\\ncontract MockUniswapView is UniswapView {\\\\r\\\\n    mapping(address => uint) public anchorPrices;\\\\r\\\\n\\\\r\\\\n    constructor(uint anchorPeriod_,\\\\r\\\\n                TokenConfig[] memory configs) UniswapView(anchorPeriod_, configs, false, false, 0) public {}\\\\r\\\\n\\\\r\\\\n    function setAnchorPrice(address underlying, uint price) external {\\\\r\\\\n        anchorPrices[underlying] = price;\\\\r\\\\n    }\\\\r\\\\n\\\\r\\\\n    function fetchAnchorPrice(address underlying, TokenConfig memory config) internal override returns (uint) {\\\\r\\\\n        config; // Shh\\\\r\\\\n        return anchorPrices[underlying];\\\\r\\\\n    }\\\\r\\\\n}\\\\r\\\\n\\\",\\\"keccak256\\\":\\\"0x438650d38dd7a71eb9dcfba810991437a7e1cf46f0b017486ad34a28661ffba9\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"tests/contracts/ProxyPriceOracle.sol:MockAnchorOracle\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"anchors\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"period\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"priceMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"assetPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numBlocksPerPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"period\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setAnchorPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract MockCToken\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setUnderlyingPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"608060405234801561001057600080fd5b506102b5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100615760003560e01c8062e4768b14610066578063127ffda014610094578063485feabe146100c05780635e9a523c146100da578063692374e3146101005780639d0405c71461013f575b600080fd5b6100926004803603604081101561007c57600080fd5b506001600160a01b03813516906020013561016b565b005b610092600480360360408110156100aa57600080fd5b506001600160a01b038135169060200135610187565b6100c861020e565b60408051918252519081900360200190f35b6100c8600480360360208110156100f057600080fd5b50356001600160a01b0316610213565b6101266004803603602081101561011657600080fd5b50356001600160a01b0316610225565b6040805192835260208301919091528051918290030190f35b6100926004803603604081101561015557600080fd5b506001600160a01b03813516906020013561023e565b6001600160a01b03909116600090815260208190526040902055565b80600080846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156101c457600080fd5b505afa1580156101d8573d6000803e3d6000fd5b505050506040513d60208110156101ee57600080fd5b50516001600160a01b031681526020810191909152604001600020555050565b60f081565b60006020819052908152604090205481565b6001602081905260009182526040909120805491015482565b604080518082018252918252670de0b6b3a764000060208084019182526001600160a01b03909416600090815260019485905291909120915182555191015556fea2646970667358221220c3b4ba9e47c62673dedc6b8cb6a4860c4be2d25204dab7f8e4feb0bf3cc300dc64736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"anchors\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"period\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"priceMantissa\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"assetPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numBlocksPerPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"period\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setAnchorPeriod\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract MockCToken\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setUnderlyingPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"tests/contracts/ProxyPriceOracle.sol\\\":\\\"MockAnchorOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"tests/contracts/ProxyPriceOracle.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\n\\\\n// @dev mock version of v1 price oracle, allowing manually setting return values\\\\ncontract ProxyPriceOracle {\\\\n\\\\n    mapping(address => uint256) public prices;\\\\n\\\\n    function setUnderlyingPrice(address ctoken, uint price) external {\\\\n        prices[ctoken] = price;\\\\n    }\\\\n\\\\n    function getUnderlyingPrice(address ctoken) external view returns (uint) {\\\\n        return prices[ctoken];\\\\n    }\\\\n}\\\\n\\\\n\\\\ncontract MockAnchorOracle {\\\\n    struct Anchor {\\\\n        // floor(block.number / numBlocksPerPeriod) + 1\\\\n        uint period;\\\\n\\\\n        // Price in ETH, scaled by 10**18\\\\n        uint priceMantissa;\\\\n    }\\\\n    mapping(address => uint256) public assetPrices;\\\\n\\\\n    function setPrice(address asset, uint price) external {\\\\n        assetPrices[asset] = price;\\\\n    }\\\\n\\\\n    function setUnderlyingPrice(MockCToken asset, uint price) external {\\\\n        assetPrices[asset.underlying()] = price;\\\\n    }\\\\n\\\\n\\\\n    uint public constant numBlocksPerPeriod = 240;\\\\n\\\\n    mapping(address => Anchor) public anchors;\\\\n    function setAnchorPeriod(address asset, uint period) external {\\\\n        // dont care about anchor price, only period\\\\n        anchors[asset] = Anchor({period: period, priceMantissa: 1e18});\\\\n    }\\\\n}\\\\n\\\\ncontract MockCToken {\\\\n    address public underlying;\\\\n    constructor(address underlying_) public {\\\\n        underlying = underlying_;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9fa105ab4a388ff2851d21560f0ebb706df8ad7ac088ad5595455a4e5fce647e\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"tests/contracts/ProxyPriceOracle.sol:MockCToken\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying_\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"underlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"608060405234801561001057600080fd5b506040516100f83803806100f88339818101604052602081101561003357600080fd5b5051600080546001600160a01b039092166001600160a01b03199092169190911790556094806100646000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80636f307dc314602d575b600080fd5b6033604f565b604080516001600160a01b039092168252519081900360200190f35b6000546001600160a01b03168156fea26469706673582212209de6537bdcbc675bd2ee06e3b27f8fcf0f16421663af12c5b1154fd5dc804e3a64736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying_\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"underlying\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"tests/contracts/ProxyPriceOracle.sol\\\":\\\"MockCToken\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"tests/contracts/ProxyPriceOracle.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\n\\\\n// @dev mock version of v1 price oracle, allowing manually setting return values\\\\ncontract ProxyPriceOracle {\\\\n\\\\n    mapping(address => uint256) public prices;\\\\n\\\\n    function setUnderlyingPrice(address ctoken, uint price) external {\\\\n        prices[ctoken] = price;\\\\n    }\\\\n\\\\n    function getUnderlyingPrice(address ctoken) external view returns (uint) {\\\\n        return prices[ctoken];\\\\n    }\\\\n}\\\\n\\\\n\\\\ncontract MockAnchorOracle {\\\\n    struct Anchor {\\\\n        // floor(block.number / numBlocksPerPeriod) + 1\\\\n        uint period;\\\\n\\\\n        // Price in ETH, scaled by 10**18\\\\n        uint priceMantissa;\\\\n    }\\\\n    mapping(address => uint256) public assetPrices;\\\\n\\\\n    function setPrice(address asset, uint price) external {\\\\n        assetPrices[asset] = price;\\\\n    }\\\\n\\\\n    function setUnderlyingPrice(MockCToken asset, uint price) external {\\\\n        assetPrices[asset.underlying()] = price;\\\\n    }\\\\n\\\\n\\\\n    uint public constant numBlocksPerPeriod = 240;\\\\n\\\\n    mapping(address => Anchor) public anchors;\\\\n    function setAnchorPeriod(address asset, uint period) external {\\\\n        // dont care about anchor price, only period\\\\n        anchors[asset] = Anchor({period: period, priceMantissa: 1e18});\\\\n    }\\\\n}\\\\n\\\\ncontract MockCToken {\\\\n    address public underlying;\\\\n    constructor(address underlying_) public {\\\\n        underlying = underlying_;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9fa105ab4a388ff2851d21560f0ebb706df8ad7ac088ad5595455a4e5fce647e\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"tests/contracts/ProxyPriceOracle.sol:ProxyPriceOracle\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"ctoken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"ctoken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setUnderlyingPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"608060405234801561001057600080fd5b50610151806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063127ffda014610046578063cfed246b14610074578063fc57d4df146100ac575b600080fd5b6100726004803603604081101561005c57600080fd5b506001600160a01b0381351690602001356100d2565b005b61009a6004803603602081101561008a57600080fd5b50356001600160a01b03166100ee565b60408051918252519081900360200190f35b61009a600480360360208110156100c257600080fd5b50356001600160a01b0316610100565b6001600160a01b03909116600090815260208190526040902055565b60006020819052908152604090205481565b6001600160a01b03166000908152602081905260409020549056fea2646970667358221220f4c9f2825e9fb665b5d7ff6157620294b003d485100c3227ca79ac268b23b64d64736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"ctoken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"ctoken\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setUnderlyingPrice\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"tests/contracts/ProxyPriceOracle.sol\\\":\\\"ProxyPriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"tests/contracts/ProxyPriceOracle.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\n\\\\n// @dev mock version of v1 price oracle, allowing manually setting return values\\\\ncontract ProxyPriceOracle {\\\\n\\\\n    mapping(address => uint256) public prices;\\\\n\\\\n    function setUnderlyingPrice(address ctoken, uint price) external {\\\\n        prices[ctoken] = price;\\\\n    }\\\\n\\\\n    function getUnderlyingPrice(address ctoken) external view returns (uint) {\\\\n        return prices[ctoken];\\\\n    }\\\\n}\\\\n\\\\n\\\\ncontract MockAnchorOracle {\\\\n    struct Anchor {\\\\n        // floor(block.number / numBlocksPerPeriod) + 1\\\\n        uint period;\\\\n\\\\n        // Price in ETH, scaled by 10**18\\\\n        uint priceMantissa;\\\\n    }\\\\n    mapping(address => uint256) public assetPrices;\\\\n\\\\n    function setPrice(address asset, uint price) external {\\\\n        assetPrices[asset] = price;\\\\n    }\\\\n\\\\n    function setUnderlyingPrice(MockCToken asset, uint price) external {\\\\n        assetPrices[asset.underlying()] = price;\\\\n    }\\\\n\\\\n\\\\n    uint public constant numBlocksPerPeriod = 240;\\\\n\\\\n    mapping(address => Anchor) public anchors;\\\\n    function setAnchorPeriod(address asset, uint period) external {\\\\n        // dont care about anchor price, only period\\\\n        anchors[asset] = Anchor({period: period, priceMantissa: 1e18});\\\\n    }\\\\n}\\\\n\\\\ncontract MockCToken {\\\\n    address public underlying;\\\\n    constructor(address underlying_) public {\\\\n        underlying = underlying_;\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x9fa105ab4a388ff2851d21560f0ebb706df8ad7ac088ad5595455a4e5fce647e\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    },\n    \"tests/contracts/Test.sol:TestOverflow\": {\n      \"abi\": \"[{\\\"inputs\\\":[],\\\"name\\\":\\\"testOverflow\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"608060405234801561001057600080fd5b5060e58061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80638040cac414602d575b600080fd5b60336035565b005b6801fffffffffffffffe604c565b60405180910390fd5b60026fffffffffffffffffffffffffffffffff82160467ffffffffffffffff8082161460885760405162461bcd60e51b8152600401604390608c565b5050565b60208082526009908201526837bb32b9333637bb9960b91b60408201526060019056fea26469706673582212207dfb0ba73ad65d443d4dc4286370f7e23154c36a0be32b78244565d7aebe986864736f6c634300060c0033\",\n      \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"testOverflow\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{},\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"tests/contracts/Test.sol\\\":\\\"TestOverflow\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\",\\\"useLiteralContent\\\":true},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"tests/contracts/Test.sol\\\":{\\\"content\\\":\\\"// SPDX-License-Identifier: GPL-3.0\\\\n\\\\npragma solidity ^0.6.10;\\\\npragma experimental ABIEncoderV2;\\\\n\\\\ncontract TestOverflow {\\\\n\\\\n    function testOverflow() public pure {\\\\n        uint128 sum = uint128(uint64(-1)) + uint128(uint64(-1));\\\\n        require(sum == 36893488147419103230, \\\\\\\"overflows\\\\\\\");// (2^64 -1)*2\\\\n        uint64 half = uint64(sum / 2);\\\\n        require(half == 18446744073709551615, \\\\\\\"overflow2\\\\\\\");// 2 ^ 64 - 1\\\\n    }\\\\n}\\\\n\\\",\\\"keccak256\\\":\\\"0x54896be410933145616d842ffd8a5052b3e6736a414fb84c0f8bb9dd7abb5487\\\",\\\"license\\\":\\\"GPL-3.0\\\"}},\\\"version\\\":1}\"\n    }\n  },\n  \"version\": \"0.6.12+commit.27d51765.Linux.g++\"\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/open-oracle.min.json",
    "content": "{\n  \"contracts\": {\n    \"contracts/Uniswap/UniswapAnchoredView.sol:UniswapAnchoredView\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"priceData_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter_\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorToleranceMantissa_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_isSecure\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchor\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceGuarded\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"reporter\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ReporterInvalidated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_ANCHORED_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbol\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getTokenConfigBySymbolHash\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"invalidateReporter\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isSecure\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"lowerBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"messages\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"bytes[]\\\",\\\"name\\\":\\\"signatures\\\",\\\"type\\\":\\\"bytes[]\\\"},{\\\"internalType\\\":\\\"string[]\\\",\\\"name\\\":\\\"symbols\\\",\\\"type\\\":\\\"string[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"symbol\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"priceData\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract OpenOraclePriceData\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"priceTimestamps\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporter\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"reporterInvalidated\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"upperBoundAnchorRatio\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"6101206040523480156200001257600080fd5b50604051620049243803806200492483398101604081905262000035916200122f565b60038054336001600160a01b03199091161760ff60a01b1916600160a01b8515150217905560048190558383826200006d8362000156565b5050506001600160601b0319606089811b821660805288901b1660a052610100859052600c805483151560ff19909116179055670de0b6b3a7640000198611620000c25785670de0b6b3a764000001620000c6565b6000195b60c052670de0b6b3a76400008610620000e1576001620000ed565b85670de0b6b3a7640000035b60e052600c5460ff16156200013d57600354600160a01b900460ff1615620001325760405162461bcd60e51b8152600401620001299062001993565b60405180910390fd5b6200013d8462000425565b620001488462000bdb565b505050505050505062001cf0565b60005b81518110156200042157600354600160a01b900460ff166200022057600260008383815181106200018657fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615620001ce5760405162461bcd60e51b81526004016200012990620017d4565b600b6000838381518110620001df57fe5b60209081029190910181015181015182528101919091526040016000205460ff1615620002205760405162461bcd60e51b815260040162000129906200159e565b60008282815181106200022f57fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115620002a957fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106200031b57fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600260008484815181106200035e57fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008054905003600a6000848481518110620003bb57fe5b6020026020010151602001518152602001908152602001600020819055506001600b6000848481518110620003ec57fe5b6020908102919091018101518101518252810191909152604001600020805460ff191691151591909117905560010162000159565b5050565b60005b8151811015620004215760405160200162000443906200153e565b604051602081830303815290604052805190602001208282815181106200046657fe5b60200260200101516020015114620005e1578181815181106200048557fe5b602002602001015160a001516001600160a01b031673b4e16d0168e52d35cacd2c6185b44281ec28c9dc6001600160a01b031614620004d85760405162461bcd60e51b8152600401620001299062001706565b818181518110620004e557fe5b602002602001015160c0015115620005115760405162461bcd60e51b8152600401620001299062001763565b60006001600160a01b03168282815181106200052957fe5b6020026020010151600001516001600160a01b0316146200055e5760405162461bcd60e51b8152600401620001299062001aa9565b8181815181106200056b57fe5b602002602001015160800151600014620005995760405162461bcd60e51b8152600401620001299062001bbf565b670de0b6b3a7640000828281518110620005af57fe5b60200260200101516040015114620005db5760405162461bcd60e51b815260040162000129906200190a565b62000bd2565b6000828281518110620005f057fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b1580156200063557600080fd5b505afa1580156200064a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200067491908101906200135b565b604051602001620006869190620014a7565b604051602081830303815290604052805190602001209050828281518110620006ab57fe5b602002602001015160200151811480620007335750604051602001620006d1906200152e565b604051602081830303815290604052805190602001208114801562000733575060405160200162000702906200154d565b604051602081830303815290604052805190602001208383815181106200072557fe5b602002602001015160200151145b620007525760405162461bcd60e51b8152600401620001299062001862565b8282815181106200075f57fe5b6020026020010151604001518383815181106200077857fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620007bd57600080fd5b505afa158015620007d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007f8919062001462565b60ff16600a0a146200081e5760405162461bcd60e51b8152600401620001299062001952565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168383815181106200084957fe5b6020026020010151600001516001600160a01b03161415620009645760008383815181106200087457fe5b60200260200101516060015160048111156200088c57fe5b14620008ac5760405162461bcd60e51b8152600401620001299062001a01565b828281518110620008b957fe5b602002602001015160800151670de0b6b3a764000014620008ee5760405162461bcd60e51b8152600401620001299062001b3d565b60006001600160a01b03168383815181106200090657fe5b602002602001015160a001516001600160a01b0316146200093b5760405162461bcd60e51b8152600401620001299062001820565b60008383815181106200094a57fe5b602090810291909101015190151560c09091015262000bd0565b60028383815181106200097357fe5b60200260200101516060015160048111156200098b57fe5b14620009ab5760405162461bcd60e51b81526004016200012990620015de565b828281518110620009b857fe5b602002602001015160800151600014620009e65760405162461bcd60e51b815260040162000129906200167e565b600062000a40735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f85858151811062000a0e57fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc262000d3960201b62000bb21760201c565b9050806001600160a01b031684848151811062000a5957fe5b602002602001015160a001516001600160a01b03161462000a8e5760405162461bcd60e51b81526004016200012990620018bf565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562000aca57600080fd5b505afa15801562000adf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b05919062001209565b905084848151811062000b1457fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614801562000b57575084848151811062000b4957fe5b602002602001015160c00151155b8062000bae575084848151811062000b6b57fe5b6020026020010151600001516001600160a01b0316816001600160a01b03161415801562000bae575084848151811062000ba157fe5b602002602001015160c001515b62000bcd5760405162461bcd60e51b8152600401620001299062001a5e565b50505b505b60010162000428565b60005b8151811015620004215762000bf262001107565b82828151811062000bff57fe5b60200260200101519050600081604001511162000c305760405162461bcd60e51b815260040162000129906200155c565b60a081015160028260600151600481111562000c4857fe5b141562000d04576001600160a01b03811662000c785760405162461bcd60e51b815260040162000129906200163b565b6020820151600062000c8a8462000dae565b600083815260086020908152604080832042808255600990935292819020828155600193840185905592909201839055905191925083917fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9162000cf49181908690819062001c4c565b60405180910390a2505062000d2e565b6001600160a01b0381161562000d2e5760405162461bcd60e51b8152600401620001299062001c06565b505060010162000bde565b6000808062000d49858562000ded565b9150915085828260405160200162000d6392919062001485565b6040516020818303038152906040528051906020012060405160200162000d8c929190620014c5565b60408051601f1981840301815291905280516020909101209695505050505050565b600080600062000dcd8460a0015162000e7f60201b62000c221760201c565b50915091508360c0015162000de3578162000de5565b805b949350505050565b600080826001600160a01b0316846001600160a01b0316141562000e255760405162461bcd60e51b81526004016200012990620016c1565b826001600160a01b0316846001600160a01b03161062000e4757828462000e4a565b83835b90925090506001600160a01b03821662000e785760405162461bcd60e51b8152600401620001299062001b06565b9250929050565b6000808062000e8d62001082565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ec957600080fd5b505afa15801562000ede573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f04919062001449565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b15801562000f4057600080fd5b505afa15801562000f55573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f7b919062001449565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801562000fbc57600080fd5b505afa15801562000fd1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ff79190620013ef565b9250925092508363ffffffff168163ffffffff16146200107857600081850390508063ffffffff166200103684866200108c60201b62000df71760201c565b600001516001600160e01b031602870196508063ffffffff166200106685856200108c60201b62000df71760201c565b516001600160e01b0316029590950194505b5050509193909250565b63ffffffff421690565b6200109662001144565b6000826001600160701b031611620010c25760405162461bcd60e51b8152600401620001299062001b88565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b1681620010f157fe5b046001600160e01b031681525090505b92915050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b8051620011018162001cc1565b805180151581146200110157600080fd5b600060e0828403121562001186578081fd5b6200119260e062001c67565b90508151620011a18162001cc1565b808252506020820151602082015260408201516040820152606082015160058110620011cc57600080fd5b606082015260808281015190820152620011ea8360a0840162001156565b60a0820152620011fe8360c0840162001163565b60c082015292915050565b6000602082840312156200121b578081fd5b8151620012288162001cc1565b9392505050565b600080600080600080600080610100898b0312156200124c578384fd5b8851620012598162001cc1565b60208a01519098506200126c8162001cc1565b60408a015160608b015160808c015192995090975095506001600160401b038082111562001298578586fd5b818b0191508b601f830112620012ac578586fd5b815181811115620012bb578687fd5b620012cb60208083020162001c67565b818152602080820193508481019060e084028601018f1015620012ec578889fd5b8894505b828510156200131d57620013058f8262001174565b84526001949094019360209093019260e001620012f0565b5080975050505050620013348a60a08b0162001163565b9250620013458a60c08b0162001163565b915060e089015190509295985092959890939650565b6000602082840312156200136d578081fd5b81516001600160401b038082111562001384578283fd5b818401915084601f83011262001398578283fd5b815181811115620013a7578384fd5b620013bc601f8201601f191660200162001c67565b9150808252856020828501011115620013d3578384fd5b620013e681602084016020860162001c8e565b50949350505050565b60008060006060848603121562001404578283fd5b8351620014118162001cda565b6020850151909350620014248162001cda565b604085015190925063ffffffff811681146200143e578182fd5b809150509250925092565b6000602082840312156200145b578081fd5b5051919050565b60006020828403121562001474578081fd5b815160ff8116811462001228578182fd5b6001600160601b0319606093841b811682529190921b16601482015260280190565b60008251620014bb81846020870162001c8e565b9190910192915050565b7fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b635742544360e01b815260040190565b6208aa8960eb1b815260030190565b6242544360e81b815260030190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b6020808252603190820152600080516020620049048339815191526040820152703a3434b99039bcb6b137b6103430b9b41760791b606082015260800190565b60208082526034908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201527f653a206d757374206265205245504f525445522e000000000000000000000000606082015260800190565b60208082526023908201527f7265706f7274656420707269636573206d757374206861766520616e20616e636040820152623437b960e91b606082015260800190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526033908201527f496e636f727265637420556e6973776170206d61726b657420666f722045544860408201527f3a206d75737420626520555344432d4554482e00000000000000000000000000606082015260800190565b6020808252604b908201527f496e636f727265637420556e6973776170206d61726b6574207265766572736160408201527f6c20666f72204554483a206d75737420626520555344432d45544820286e6f7460608201526a103932bb32b939b2b2149760a91b608082015260a00190565b6020808252603e908201526000805160206200490483398151915260408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b60208082526028908201527f45544820746f6b656e20636f6e666967206261736520756e6974206d7573742060408201526731329018b2989c1760c11b606082015260800190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b60208082526048908201527f63616e41646d696e4f7665727772697465206d7573742062652073657420746f60408201527f2066616c736520666f722073656375726520556e69737761705669657720636f606082015267373a3930b1ba399760c11b608082015260a00190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b6020808252603a908201527f556e6465726c79696e6720746f6b656e2061646472657373206d75737420626560408201527f20746865207a65726f206164647265737320666f72204554482e000000000000606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b60208082526027908201527f45544820746f6b656e20636f6e666967206669786564207072696365206d75736040820152663a10313290181760c91b606082015260800190565b60208082526026908201527f6f6e6c79207265706f7274656420707269636573207574696c697a6520616e2060408201526530b731b437b960d11b606082015260800190565b93845260208401929092526040830152606082015260800190565b6040518181016001600160401b038111828210171562001c8657600080fd5b604052919050565b60005b8381101562001cab57818101518382015260200162001c91565b8381111562001cbb576000848401525b50505050565b6001600160a01b038116811462001cd757600080fd5b50565b6001600160701b038116811462001cd757600080fd5b60805160601c60a05160601c60c05160e05161010051612ba662001d5e600039806108e15280611c4c5250806108805280611bc552508061045a5280611b9a5250806103c6528061076a52806107fa52806114cd5250806108bd5280610948528061149e5250612ba66000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638a00388811610104578063e073a241116100a2578063ecc1e98411610071578063ecc1e98414610383578063f851a44014610396578063fc57d4df1461039e578063fe2c6198146103b1576101da565b8063e073a24114610358578063e61a5fe414610360578063e9206d7814610368578063eaa1c2ca14610370576101da565b80638f283970116100de5780638f2839701461032a57806392b843571461033d5780639f59963114610345578063d1b353b4146102f4576101da565b80638a003888146102fc5780638aba91b41461030f5780638e499bcf14610322576101da565b8063300de3ca1161017c57806360846bc61161014b57806360846bc6146102d1578063651ed788146102e4578063656b0fd1146102ec57806369aa3ac6146102f4576101da565b8063300de3ca1461028257806337c0e12d1461028a578063482a6193146102ab5780634da21942146102be576101da565b806322ddeb7d116101b857806322ddeb7d146102325780632410520914610252578063276c2cba1461025a5780632d1c668f1461026d576101da565b8063010ec441146101df5780631a125204146101fd57806322798faf1461021d575b600080fd5b6101e76103c4565b6040516101f491906123fc565b60405180910390f35b61021061020b3660046120be565b6103e8565b6040516101f491906129e1565b61022561043d565b6040516101f49190612434565b6102456102403660046120be565b610446565b6040516101f49190612a49565b610245610458565b610210610268366004612173565b61047c565b61028061027b366004611ff3565b6104b9565b005b6102256104f8565b61029d6102983660046120be565b6104fd565b6040516101f4929190612a52565b6101e76102b9366004612113565b610516565b6102106102cc366004611f26565b6105c3565b6102456102df3660046120be565b6105d6565b6102256105e8565b6102256105f1565b610245610601565b61021061030a3660046120be565b61060d565b61028061031d366004612113565b6106e6565b61024561082c565b610280610338366004611f26565b610832565b61024561087e565b610210610353366004611f26565b6108a2565b6102456108b5565b6101e76108bb565b6102456108df565b61029d61037e3660046120be565b610903565b610280610391366004611f5e565b61091c565b6101e7610ab6565b6102456103ac366004611f26565b610ac5565b6102456103bf366004612173565b610b8d565b7f000000000000000000000000000000000000000000000000000000000000000081565b6103f0611d24565b60006103fb83610e72565b905060001981146104175761040f8161060d565b915050610438565b60405162461bcd60e51b815260040161042f90612691565b60405180910390fd5b919050565b600c5460ff1681565b60066020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b610484611d24565b6104b3826040516020016104989190612338565b604051602081830303815290604052805190602001206103e8565b92915050565b6003546001600160a01b031633146104e35760405162461bcd60e51b815260040161042f90612706565b6104ec81610ea3565b6104f581611161565b50565b600181565b6008602052600090815260409020805460019091015482565b6000806000808480602001905181019061053091906120d6565b925092509250600086805190602001206040516020016105509190612354565b6040516020818303038152906040528051906020012090506001818386866040516000815260200160405260405161058b949392919061243f565b6020604051602081039080840390855afa1580156105ad573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b6105cb611d24565b60006103fb836112aa565b60056020526000908152604090205481565b60075460ff1681565b600354600160a01b900460ff1681565b670de0b6b3a764000081565b610615611d24565b61061d61082c565b821061063b5760405162461bcd60e51b815260040161042f90612691565b6000828154811061064857fe5b60009182526020918290206040805160e081018252600690930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154909190606083019060ff1660048111156106a257fe5b60048111156106ad57fe5b8152600482015460208201526005909101546001600160a01b0381166040830152600160a01b900460ff16151560609091015292915050565b6060828060200190518101906106fc91906121d7565b50905060405160200161070e90612385565b60405160208183030381529060405280519060200120816040516020016107359190612338565b60405160208183030381529060405280519060200120146107685760405162461bcd60e51b815260040161042f906128b5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661079c8484610516565b6001600160a01b0316146107c25760405162461bcd60e51b815260040161042f9061273d565b6007805460ff191660011790556040517f98a13f7b181a3a1f99c871e7a3507d4a037d386d157279f978e0d555ae9fe74d9061081f907f0000000000000000000000000000000000000000000000000000000000000000906123fc565b60405180910390a1505050565b60005490565b6003546001600160a01b0316331461085c5760405162461bcd60e51b815260040161042f90612706565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6108aa611d24565b60006103fb836112ee565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6009602052600090815260409020805460019091015482565b84831461093b5760405162461bcd60e51b815260040161042f90612921565b60005b85811015610a2f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338636e9a88888481811061098157fe5b90506020028101906109939190612a7b565b88888681811061099f57fe5b90506020028101906109b19190612a7b565b6040518563ffffffff1660e01b81526004016109d0949392919061245d565b600060405180830381600087803b1580156109ea57600080fd5b505af11580156109fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a2691908101906121a5565b5060010161093e565b506000610a3a6113e6565b905060005b82811015610aac57610aa4848483818110610a5657fe5b9050602002810190610a689190612a7b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086925061142c915050565b600101610a3f565b5050505050505050565b6003546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0057600080fd5b505afa158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3891906120a2565b15610b4c5750670de0b6b3a7640000610438565b610b54611d24565b610b5d836108a2565b90508060400151610b7e670de0b6b3a7640000610b79846116d8565b61197b565b81610b8557fe5b049392505050565b6000610b97611d24565b610ba08361047c565b9050610bab816116d8565b9392505050565b6000806000610bc185856119b5565b91509150858282604051602001610bd9929190612311565b60405160208183030381529060405280519060200120604051602001610c00929190612397565b60408051601f1981840301815291905280516020909101209695505050505050565b6000806000610c2f611a3f565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b158015610c6a57600080fd5b505afa158015610c7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca2919061226f565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b158015610cdd57600080fd5b505afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d15919061226f565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610d5557600080fd5b505afa158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d9190612226565b9250925092508363ffffffff168163ffffffff1614610ded5780840363ffffffff8116610dba8486610df7565b516001600160e01b031602969096019563ffffffff8116610ddb8585610df7565b516001600160e01b0316029590950194505b5050509193909250565b610dff611d61565b6000826001600160701b031611610e285760405162461bcd60e51b815260040161042f90612964565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681610e5d57fe5b046001600160e01b0316815250905092915050565b6000818152600b602052604081205460ff16610e90576000196104b3565b506000908152600a602052604090205490565b60005b815181101561115d57600354600160a01b900460ff16610f635760026000838381518110610ed057fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615610f155760405162461bcd60e51b815260040161042f9061278d565b600b6000838381518110610f2557fe5b60209081029190910181015181015182528101919091526040016000205460ff1615610f635760405162461bcd60e51b815260040161042f90612575565b6000828281518110610f7157fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115610fea57fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b03199094169390931791909116919091179055600080548351600019919091019160019185908590811061105b57fe5b6020026020010151600001516001600160a01b03166001600160a01b031681526020019081526020016000208190555060016002600084848151811061109d57fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160008054905003600a60008484815181106110f957fe5b6020026020010151602001518152602001908152602001600020819055506001600b600084848151811061112957fe5b6020908102919091018101518101518252810191909152604001600020805460ff1916911515919091179055600101610ea6565b5050565b60005b815181101561115d57611175611d24565b82828151811061118157fe5b6020026020010151905060008160400151116111af5760405162461bcd60e51b815260040161042f90612533565b60a08101516002826060015160048111156111c657fe5b1415611279576001600160a01b0381166111f25760405162461bcd60e51b815260040161042f90612617565b6020820151600061120284611a49565b600083815260086020908152604080832042808255600990935292819020828155600193840185905592909201839055905191925083917fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a9161126a91819086908190612a60565b60405180910390a250506112a0565b6001600160a01b038116156112a05760405162461bcd60e51b815260040161042f9061299b565b5050600101611164565b6001600160a01b03811660009081526002602052604081205460ff166112d2576000196104b3565b506001600160a01b031660009081526001602052604090205490565b60006104b3826001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561132c57600080fd5b505afa158015611340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136491906120a2565b6113de57826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a157600080fd5b505afa1580156113b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d99190611f42565b6113e1565b60005b6112aa565b60006114276040518060400160405280600381526020016208aa8960eb1b815250611419604051602001610498906123ed565b670de0b6b3a7640000611a79565b905090565b611434611d24565b61143d8361047c565b905060028160600151600481111561145157fe5b1461146e5760405162461bcd60e51b815260040161042f90612847565b6000836040516020016114819190612338565b6040516020818303038152906040528051906020012090506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fc2525ab7f0000000000000000000000000000000000000000000000000000000000000000886040518363ffffffff1660e01b815260040161150a929190612410565b604080518083038186803b15801561152157600080fd5b505afa158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190612287565b6001600160401b031691506001600160401b031691506000604051602001611580906123ed565b604051602081830303815290604052805190602001208414156115a45750846115b2565b6115af878688611a79565b90505b60075460ff16156116345760008481526005602090815260408083208490556009825280832054600883528184205460069093529281902060029290930191909104909155517f159e83f4712ba2552e68be9d848e49bf6dd35c24f19564ffd523b6549450a2f490611627908990849061248f565b60405180910390a16116cf565b61163e8382611b71565b15611693576000848152600560209081526040808320869055600690915290819020839055517f159e83f4712ba2552e68be9d848e49bf6dd35c24f19564ffd523b6549450a2f490611627908990869061248f565b7f90756d4c8646a4591078abac0e4e32dfa8437921729e36d51b88b659d265bfde8784836040516116c6939291906124b1565b60405180910390a15b50505050505050565b60006040516020016116e9906123ed565b60405160208183030381529060405280519060200120826020015114156117195750670de0b6b3a7640000610438565b60028260600151600481111561172b57fe5b141561186a57600060056000604051602001611746906123ed565b6040516020818303038152906040528051906020012081526020019081526020016000205490506000811161178d5760405162461bcd60e51b815260040161042f906125c6565b600454156117f057600454600660006040516020016117ab906123ed565b60405160208183030381529060405280519060200120815260200190815260200160002054014211156117f05760405162461bcd60e51b815260040161042f906127ea565b6004541561183057600454602080850151600090815260069091526040902054014211156118305760405162461bcd60e51b815260040161042f90612505565b8061185a600560008660200151815260200190815260200160002054670de0b6b3a764000061197b565b8161186157fe5b04915050610438565b60018260600151600481111561187c57fe5b141561195857600060056000604051602001611897906123ed565b604051602081830303815290604052805190602001208152602001908152602001600020549050600081116118de5760405162461bcd60e51b815260040161042f906125c6565b6004541561194157600454600660006040516020016118fc906123ed565b60405160208183030381529060405280519060200120815260200190815260200160002054014211156119415760405162461bcd60e51b815260040161042f906127ea565b8061185a8460800151670de0b6b3a764000061197b565b60008260600151600481111561196a57fe5b141561043857506080810151610438565b60008261198a575060006104b3565b8282028284828161199757fe5b0414610bab5760405162461bcd60e51b815260040161042f9061265a565b600080826001600160a01b0316846001600160a01b031614156119ea5760405162461bcd60e51b815260040161042f906126c1565b826001600160a01b0316846001600160a01b031610611a0a578284611a0d565b83835b90925090506001600160a01b038216611a385760405162461bcd60e51b815260040161042f906128ea565b9250929050565b63ffffffff421690565b6000806000611a5b8460a00151610c22565b50915091508360c00151611a6f5781611a71565b805b949350505050565b600080600080611a8886611bf9565b925092509250804211611aad5760405162461bcd60e51b815260040161042f9061287e565b42819003611ab9611d61565b60405180602001604052808386880381611acf57fe5b046001600160e01b031681525090506000611ae982611d0c565b90506000611af7828a61197b565b90506000670de0b6b3a764000080611b13848e6040015161197b565b81611b1a57fe5b0481611b2257fe5b0490507ff63d078e0de851897107641e96093a59e5ddc3c25e7b85a2585e3eba9e774a7b8c828842604051611b5a94939291906124d6565b60405180910390a19b9a5050505050505050505050565b60008215611bf057600083611b8e84670de0b6b3a764000061197b565b81611b9557fe5b0490507f00000000000000000000000000000000000000000000000000000000000000008111158015611be857507f00000000000000000000000000000000000000000000000000000000000000008110155b9150506104b3565b50600092915050565b600080600080846020015190506000611c1186611a49565b9050611c1b611d73565b50600082815260096020908152604091829020825180840190935280548084526001909101549183019190915242037f00000000000000000000000000000000000000000000000000000000000000008110611ce7578151600085815260086020908152604080832093845581860180516001958601556009835292819020428082559401879055908b015185519251915190937fe37d39315e3419c0937360f1ac88f2c52ecf67e3b22b367f82047ddb4591904a93611cde9390928990612a60565b60405180910390a25b5050600091825260086020526040909120600181015490549196909550909350915050565b516612725dd1d243ab6001600160e01b039091160490565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b604051806040016040528060008152602001600081525090565b80356104b381612b38565b60008083601f840112611da9578182fd5b5081356001600160401b03811115611dbf578182fd5b6020830191508360208083028501011115611a3857600080fd5b80356104b381612b4d565b600082601f830112611df4578081fd5b8135611e07611e0282612ae5565b612abf565b9150808252836020828501011115611e1e57600080fd5b8060208401602084013760009082016020015292915050565b600082601f830112611e47578081fd5b8151611e55611e0282612ae5565b9150808252836020828501011115611e6c57600080fd5b611e7d816020840160208601612b08565b5092915050565b600060e08284031215611e95578081fd5b611e9f60e0612abf565b90508135611eac81612b38565b808252506020820135602082015260408201356040820152606082013560058110611ed657600080fd5b606082015260808281013590820152611ef28360a08401611d8d565b60a0820152611f048360c08401611dd9565b60c082015292915050565b80516001600160401b03811681146104b357600080fd5b600060208284031215611f37578081fd5b8135610bab81612b38565b600060208284031215611f53578081fd5b8151610bab81612b38565b60008060008060008060608789031215611f76578182fd5b86356001600160401b0380821115611f8c578384fd5b611f988a838b01611d98565b90985096506020890135915080821115611fb0578384fd5b611fbc8a838b01611d98565b90965094506040890135915080821115611fd4578384fd5b50611fe189828a01611d98565b979a9699509497509295939492505050565b60006020808385031215612005578182fd5b82356001600160401b038082111561201b578384fd5b818501915085601f83011261202e578384fd5b81358181111561203c578485fd5b6120498485830201612abf565b818152848101925083850160e0808402860187018a1015612068578788fd5b8795505b838610156120945761207e8a83611e84565b855260019590950194938601939081019061206c565b509098975050505050505050565b6000602082840312156120b3578081fd5b8151610bab81612b4d565b6000602082840312156120cf578081fd5b5035919050565b6000806000606084860312156120ea578081fd5b8351925060208401519150604084015160ff81168114612108578182fd5b809150509250925092565b60008060408385031215612125578182fd5b82356001600160401b038082111561213b578384fd5b61214786838701611de4565b9350602085013591508082111561215c578283fd5b5061216985828601611de4565b9150509250929050565b600060208284031215612184578081fd5b81356001600160401b03811115612199578182fd5b611a7184828501611de4565b6000602082840312156121b6578081fd5b81516001600160401b038111156121cb578182fd5b611a7184828501611e37565b600080604083850312156121e9578182fd5b82516001600160401b038111156121fe578283fd5b61220a85828601611e37565b925050602083015161221b81612b38565b809150509250929050565b60008060006060848603121561223a578081fd5b835161224581612b5b565b602085015190935061225681612b5b565b604085015190925063ffffffff81168114612108578182fd5b600060208284031215612280578081fd5b5051919050565b60008060408385031215612299578182fd5b6122a38484611f0f565b91506122b28460208501611f0f565b90509250929050565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526122fd816020860160208601612b08565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b6000825161234a818460208701612b08565b9190910192915050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b65726f7461746560d01b815260060190565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b6001600160a01b0383168152604060208201819052600090611a71908301846122e5565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b6000604082526124716040830186886122bb565b82810360208401526124848185876122bb565b979650505050505050565b6000604082526124a260408301856122e5565b90508260208301529392505050565b6000606082526124c460608301866122e5565b60208301949094525060400152919050565b6000608082526124e960808301876122e5565b6020830195909552506040810192909252606090910152919050565b6020808252601490820152732a2ba0a810383934b1b29034b99039ba30b6329760611b604082015260600190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526031908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f72206040820152703a3434b99039bcb6b137b6103430b9b41760791b606082015260800190565b60208082526031908201527f455448207072696365206e6f74207365742c2063616e6e6f7420636f6e7665726040820152700e840cce4deda40aaa68840e8de408aa89607b1b606082015260800190565b60208082526023908201527f7265706f7274656420707269636573206d757374206861766520616e20616e636040820152623437b960e91b606082015260800190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526017908201527f6d73672e73656e646572206973206e6f742061646d696e000000000000000000604082015260600190565b60208082526030908201527f696e76616c69646174696f6e206d657373616765206d75737420636f6d65206660408201526f3937b6903a3432903932b837b93a32b960811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526038908201527f4554482054574150207072696365206973207374616c653b2063616e6e6f742060408201527f636f6e766572742066726f6d2055534420746f204554482e0000000000000000606082015260800190565b6020808252601f908201527f6f6e6c79207265706f72746572207072696365732067657420706f7374656400604082015260600190565b6020808252601a908201527f6e6f77206d75737420636f6d65206166746572206265666f7265000000000000604082015260600190565b6020808252818101527f696e76616c6964206d657373616765206d7573742062652027726f7461746527604082015260600190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526023908201527f6d6573736167657320616e64207369676e617475726573206d75737420626520604082015262313a3160e81b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b60208082526026908201527f6f6e6c79207265706f7274656420707269636573207574696c697a6520616e2060408201526530b731b437b960d11b606082015260800190565b81516001600160a01b0390811682526020808401519083015260408084015190830152606083015160e08301919060058110612a1957fe5b80606085015250608084015160808401528060a08501511660a08401525060c0830151151560c083015292915050565b90815260200190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b6000808335601e19843603018112612a91578283fd5b8301803591506001600160401b03821115612aaa578283fd5b602001915036819003821315611a3857600080fd5b6040518181016001600160401b0381118282101715612add57600080fd5b604052919050565b60006001600160401b03821115612afa578081fd5b50601f01601f191660200190565b60005b83811015612b23578181015183820152602001612b0b565b83811115612b32576000848401525b50505050565b6001600160a01b03811681146104f557600080fd5b80151581146104f557600080fd5b6001600160701b03811681146104f557600080fdfea2646970667358221220a5606089b3744b74b9286cd04b93567fc875cb7ebaebe2524ac3b512dcb1fd7e64736f6c634300060c0033546f6b656e20636f6e66696720616c72656164792065786973747320666f7220\"\n    },\n    \"contracts/OpenOraclePriceData.sol:OpenOraclePriceData\": {\n      \"abi\": \"[{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"priorTimestamp\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"messageTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"blockTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NotWritten\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"source\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"Write\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"source\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"get\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"},{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"source\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"getPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint64\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"put\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"string\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"message\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"signature\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"source\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}]\"\n    },\n    \"contracts/Uniswap/UniswapView.sol:UniswapView\": {\n      \"abi\": \"[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPeriod_\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_isPublic\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"anchorPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AnchorPriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"price\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"PriceUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newTimestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"oldPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"newPrice\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"UniswapWindowUpdated\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"IS_UNISWAP_VIEW\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig[]\\\",\\\"name\\\":\\\"configs\\\",\\\"type\\\":\\\"tuple[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"anchorPeriod\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ethBaseUnit\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"expScale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"i\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"getTokenConfig\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByCToken\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getTokenConfigByUnderlying\\\",\\\"outputs\\\":[{\\\"components\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"symbolHash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"baseUnit\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"enum UniswapConfig.PriceSource\\\",\\\"name\\\":\\\"priceSource\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"fixedPrice\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapMarket\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"isUniswapReversed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"internalType\\\":\\\"struct UniswapConfig.TokenConfig\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"tuple\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isPublic\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"newObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"numTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"oldObservations\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"timestamp\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"acc\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"postPrices\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"prices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"storedAndPendingPrices\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"},{\\\"internalType\\\":\\\"uint256[]\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256[]\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}]\",\n      \"bin\": \"60a06040523480156200001157600080fd5b50604051620041743803806200417483398101604081905262000034916200107a565b60038054336001600160a01b03199091161760ff60a01b1916600160a01b8515150217905560048190558383826200006c83620000f3565b50505060808590526005805460ff1916831515179081905560ff1615620000dd57600380546001600160a01b03191690819055600160a01b900460ff1615620000d25760405162461bcd60e51b8152600401620000c99062001727565b60405180910390fd5b620000dd84620002e9565b620000e884620008d0565b5050505050620018c5565b60005b8151811015620002e557600354600160a01b900460ff166200016b57600260008383815181106200012357fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff16156200016b5760405162461bcd60e51b8152600401620000c990620013c4565b60008282815181106200017a57fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff1990911690836004811115620001f457fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106200026657fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160026000848481518110620002a957fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620000f6565b5050565b60005b8151811015620002e557604051602001620003079062001232565b604051602081830303815290604052805190602001208282815181106200032a57fe5b6020026020010151602001511415620003575760405162461bcd60e51b8152600401620000c99062001241565b8181815181106200036457fe5b6020026020010151602001518282815181106200037d57fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003c257600080fd5b505afa158015620003d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000401919081019062000f73565b604051602001620004139190620011ab565b6040516020818303038152906040528051906020012014620004495760405162461bcd60e51b8152600401620000c99062001463565b8181815181106200045657fe5b6020026020010151604001518282815181106200046f57fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620004b457600080fd5b505afa158015620004c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ef919062001166565b60ff16600a0a14620005155760405162461bcd60e51b8152600401620000c99062001578565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168282815181106200054057fe5b6020026020010151600001516001600160a01b031614156200065b5760008282815181106200056b57fe5b60200260200101516060015160048111156200058357fe5b14620005a35760405162461bcd60e51b8152600401620000c990620015b9565b818181518110620005b057fe5b602002602001015160800151670de0b6b3a764000014620005e55760405162461bcd60e51b8152600401620000c99062001795565b60006001600160a01b0316828281518110620005fd57fe5b602002602001015160a001516001600160a01b031614620006325760405162461bcd60e51b8152600401620000c99062001421565b60008282815181106200064157fe5b602090810291909101015190151560c090910152620008c7565b60038282815181106200066a57fe5b60200260200101516060015160048111156200068257fe5b14620006a25760405162461bcd60e51b8152600401620000c99062001374565b818181518110620006af57fe5b602002602001015160800151600014620006dd5760405162461bcd60e51b8152600401620000c990620012ec565b600062000737735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f8484815181106200070557fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc262000a7660201b620007e71760201c565b9050806001600160a01b03168383815181106200075057fe5b602002602001015160a001516001600160a01b031614620007855760405162461bcd60e51b8152600401620000c990620014c0565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620007c157600080fd5b505afa158015620007d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007fc919062000f4e565b90508383815181106200080b57fe5b6020026020010151600001516001600160a01b0316816001600160a01b03161480156200084e57508383815181106200084057fe5b602002602001015160c00151155b80620008a557508383815181106200086257fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614158015620008a557508383815181106200089857fe5b602002602001015160c001515b620008c45760405162461bcd60e51b8152600401620000c99062001616565b50505b600101620002ec565b60005b8151811015620002e557620008e762000e44565b828281518110620008f457fe5b602002602001015190506000816040015111620009255760405162461bcd60e51b8152600401620000c990620012aa565b60a08101516003826060015160048111156200093d57fe5b141562000a00576001600160a01b0381166200096d5760405162461bcd60e51b8152600401620000c990620016e1565b815160006200097c8462000aeb565b6001600160a01b038316600081815260076020908152604080832042808255600890935292819020828155600193840186905592909201849055905192935090917f0d485bb9561d8954891bf391edd13fa8f4db3ea3191309867ecb63debeb509a891620009f09181908690819062001817565b60405180910390a2505062000a6b565b81516001600160a01b031673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48141562000a415760405162461bcd60e51b8152600401620000c9906200150b565b6001600160a01b0381161562000a6b5760405162461bcd60e51b8152600401620000c99062001661565b5050600101620008d3565b6000808062000a86858562000b2a565b9150915085828260405160200162000aa092919062001189565b6040516020818303038152906040528051906020012060405160200162000ac9929190620011c9565b60408051601f1981840301815291905280516020909101209695505050505050565b600080600062000b0a8460a0015162000bbc60201b620008571760201c565b50915091508360c0015162000b20578162000b22565b805b949350505050565b600080826001600160a01b0316846001600160a01b0316141562000b625760405162461bcd60e51b8152600401620000c9906200132f565b826001600160a01b0316846001600160a01b03161062000b8457828462000b87565b83835b90925090506001600160a01b03821662000bb55760405162461bcd60e51b8152600401620000c990620016aa565b9250929050565b6000808062000bca62000dbf565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c0657600080fd5b505afa15801562000c1b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c41919062001061565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c7d57600080fd5b505afa15801562000c92573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cb8919062001061565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801562000cf957600080fd5b505afa15801562000d0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d34919062001007565b9250925092508363ffffffff168163ffffffff161462000db557600081850390508063ffffffff1662000d73848662000dc960201b62000a2c1760201c565b600001516001600160e01b031602870196508063ffffffff1662000da3858562000dc960201b62000a2c1760201c565b516001600160e01b0316029590950194505b5050509193909250565b63ffffffff421690565b62000dd362000e81565b6000826001600160701b03161162000dff5760405162461bcd60e51b8152600401620000c990620017e0565b6040805160208101909152806001600160701b038416600160701b600160e01b03607087901b168162000e2e57fe5b046001600160e01b031681525090505b92915050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b80516001600160a01b038116811462000e3e57600080fd5b8051801515811462000e3e57600080fd5b600060e0828403121562000ece578081fd5b62000eda60e062001832565b905062000ee8838362000e93565b8152602082015160208201526040820151604082015260608201516005811062000f1157600080fd5b60608201526080828101519082015262000f2f8360a0840162000e93565b60a082015262000f438360c0840162000eab565b60c082015292915050565b60006020828403121562000f60578081fd5b62000f6c838362000e93565b9392505050565b60006020828403121562000f85578081fd5b81516001600160401b038082111562000f9c578283fd5b818401915084601f83011262000fb0578283fd5b81518181111562000fbf578384fd5b62000fd4601f8201601f191660200162001832565b915080825285602082850101111562000feb578384fd5b62000ffe81602084016020860162001879565b50949350505050565b6000806000606084860312156200101c578182fd5b83516200102981620018ac565b60208501519093506200103c81620018ac565b604085015190925063ffffffff8116811462001056578182fd5b809150509250925092565b60006020828403121562001073578081fd5b5051919050565b600080600080600060a0868803121562001092578081fd5b8551602080880151919650906001600160401b03811115620010b2578283fd5b8701601f81018913620010c3578283fd5b8051620010da620010d48262001859565b62001832565b8181528381019083850160e0808502860187018e1015620010f9578788fd5b8795505b848610156200112957620011128e8362000ebc565b8452600195909501949286019290810190620010fd565b5050809850505050505062001142876040880162000eab565b925062001153876060880162000eab565b9150608086015190509295509295909350565b60006020828403121562001178578081fd5b815160ff8116811462000f6c578182fd5b6001600160601b0319606093841b811682529190921b16601482015260280190565b60008251620011bf81846020870162001879565b9190910192915050565b7fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b60208082526043908201527f45544820646f6573206e6f74206e65656420612070726963652066656564206160408201527f7320616c6c2070726963652066656564732061726520626173656420696e20456060820152622a241760e91b608082015260a00190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526030908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201526f329d1036bab9ba103132902a2ba0a81760811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b60208082526047908201527f55534443206d757374206265205457415020626563617573652046495845445f60408201527f5553442070726963657320617265206261736564206f6e20746865205553444360608201526610383934b1b29760c91b608082015260a00190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b60208082526029908201527f6f6e6c79205457415020707269636573207574696c697a65206120556e697377604082015268185c081b585c9ad95d60ba1b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526026908201527f5457415020707269636573206d7573742068617665206120556e6973776170206040820152651b585c9ad95d60d21b606082015260800190565b60208082526048908201527f63616e41646d696e4f7665727772697465206d7573742062652073657420746f60408201527f2066616c736520666f72207075626c696320556e69737761705669657720636f606082015267373a3930b1ba399760c11b608082015260a00190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b93845260208401929092526040830152606082015260800190565b6040518181016001600160401b03811182821017156200185157600080fd5b604052919050565b60006001600160401b038211156200186f578081fd5b5060209081020190565b60005b83811015620018965781810151838201526020016200187c565b83811115620018a6576000848401525b50505050565b6001600160701b0381168114620018c257600080fd5b50565b60805161288f620018e5600039806106d552806119a5525061288f6000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80639f599631116100b8578063dc9a15351161007c578063dc9a153514610268578063e073a24114610270578063e9206d7814610278578063f851a44014610280578063fc57d4df14610295578063fe16e80c146102a857610137565b80639f5996311461021c578063aea910781461022f578063b3bcdfba14610242578063cfed246b14610255578063d1b353b4146101b857610137565b806369aa3ac6116100ff57806369aa3ac6146101b85780638a003888146101cd5780638cea8c26146101e05780638e499bcf146102015780638f2839701461020957610137565b80631a04ee251461013c5780632d1c668f146101665780633a8521691461017b5780634da2194214610190578063656b0fd1146101b0575b600080fd5b61014f61014a366004611c04565b6102bb565b60405161015d929190611fa5565b60405180910390f35b610179610174366004611c73565b610430565b005b610183610488565b60405161015d9190611fd3565b6101a361019e366004611bcc565b61048d565b60405161015d9190612730565b6101836104d9565b6101c06104e9565b60405161015d9190612798565b6101a36101db366004611e1f565b6104f5565b6101f36101ee366004611bcc565b6105ce565b60405161015d9291906127a1565b6101c06105e7565b610179610217366004611bcc565b6105ed565b6101a361022a366004611bcc565b610639565b6101c061023d366004611bcc565b61064c565b610179610250366004611c04565b610671565b6101c0610263366004611bcc565b6106b2565b6101836106c4565b6101c06106cd565b6101c06106d3565b6102886106f7565b60405161015d9190611f52565b6101c06102a3366004611bcc565b610706565b6101f36102b6366004611bcc565b6107ce565b606080808367ffffffffffffffff811180156102d657600080fd5b50604051908082528060200260200182016040528015610300578160200160208202803683370190505b50905060608467ffffffffffffffff8111801561031c57600080fd5b50604051908082528060200260200182016040528015610346578160200160208202803683370190505b50905060005b8581101561042257600087878381811061036257fe5b90506020020160208101906103779190611bcc565b9050610381611ac2565b61038a8261048d565b905060038160600151600481111561039e57fe5b146103c45760405162461bcd60e51b81526004016103bb906124b6565b60405180910390fd5b6001600160a01b03821660009081526006602052604090205485518690859081106103eb57fe5b6020026020010181815250506104018282610aa8565b84848151811061040d57fe5b6020908102919091010152505060010161034c565b5090925090505b9250929050565b60055460ff16156104495761044481610ba7565b610473565b6003546001600160a01b031633146104735760405162461bcd60e51b81526004016103bb906121a6565b61047c8161113c565b61048581611323565b50565b600181565b610495611ac2565b60006104a0836114b1565b905060001981146104bc576104b4816104f5565b9150506104d4565b60405162461bcd60e51b81526004016103bb906120ee565b919050565b600354600160a01b900460ff1681565b670de0b6b3a764000081565b6104fd611ac2565b6105056105e7565b82106105235760405162461bcd60e51b81526004016103bb906120ee565b6000828154811061053057fe5b60009182526020918290206040805160e081018252600690930290910180546001600160a01b031683526001810154938301939093526002830154908201526003820154909190606083019060ff16600481111561058a57fe5b600481111561059557fe5b8152600482015460208201526005909101546001600160a01b0381166040830152600160a01b900460ff16151560609091015292915050565b6008602052600090815260409020805460019091015482565b60005490565b6003546001600160a01b031633146106175760405162461bcd60e51b81526004016103bb906121a6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610641611ac2565b60006104a0836114f5565b6000610656611ac2565b61065f8361048d565b905061066a816115ed565b9392505050565b60005b818110156106ad576106a583838381811061068b57fe5b90506020020160208101906106a09190611bcc565b6117db565b600101610674565b505050565b60066020526000908152604090205481565b60055460ff1681565b60045481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6003546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561074157600080fd5b505afa158015610755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107799190611d23565b1561078d5750670de0b6b3a76400006104d4565b610795611ac2565b61079e83610639565b905080604001516107bf670de0b6b3a76400006107ba846115ed565b611886565b816107c657fe5b049392505050565b6007602052600090815260409020805460019091015482565b60008060006107f685856118c0565b9150915085828260405160200161080e929190611eaa565b60405160208183030381529060405280519060200120604051602001610835929190611eed565b60408051601f1981840301815291905280516020909101209695505050505050565b6000806000610864611943565b9050836001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b15801561089f57600080fd5b505afa1580156108b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d79190611e37565b9250836001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b15801561091257600080fd5b505afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190611e37565b91506000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561098a57600080fd5b505afa15801561099e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c29190611dcb565b9250925092508363ffffffff168163ffffffff1614610a225780840363ffffffff81166109ef8486610a2c565b516001600160e01b031602969096019563ffffffff8116610a108585610a2c565b516001600160e01b0316029590950194505b5050509193909250565b610a34611aff565b6000826001600160701b031611610a5d5760405162461bcd60e51b81526004016103bb906126f9565b6040805160208101909152806001600160701b0384166dffffffffffffffffffffffffffff60701b607087901b1681610a9257fe5b046001600160e01b031681525090505b92915050565b600080600080610ab78561194d565b925092509250804211610adc5760405162461bcd60e51b81526004016103bb906123d1565b42819003610ae8611aff565b60405180602001604052808386880381610afe57fe5b046001600160e01b031681525090506000610b1882611a7a565b90506000610b2e82670de0b6b3a7640000611886565b90506000670de0b6b3a764000080610b4a848d60400151611886565b81610b5157fe5b0481610b5957fe5b0490507f7d881580fb2bb7844e8ecf8df26510247c4bbea2735d40bf0d9ac33c0d9acd818b828842604051610b919493929190611f7f565b60405180910390a19a9950505050505050505050565b60005b815181101561113857604051602001610bc290611f43565b60405160208183030381529060405280519060200120828281518110610be457fe5b6020026020010151602001511415610c0e5760405162461bcd60e51b81526004016103bb9061200c565b818181518110610c1a57fe5b602002602001015160200151828281518110610c3257fe5b6020026020010151600001516001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015610c7657600080fd5b505afa158015610c8a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cb29190810190611d3f565b604051602001610cc29190611ed1565b6040516020818303038152906040528051906020012014610cf55760405162461bcd60e51b81526004016103bb90612329565b818181518110610d0157fe5b602002602001015160400151828281518110610d1957fe5b6020026020010151600001516001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d959190611e4f565b60ff16600a0a14610db85760405162461bcd60e51b81526004016103bb90612475565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316828281518110610de257fe5b6020026020010151600001516001600160a01b03161415610eed576000828281518110610e0b57fe5b6020026020010151606001516004811115610e2257fe5b14610e3f5760405162461bcd60e51b81526004016103bb906124ed565b818181518110610e4b57fe5b602002602001015160800151670de0b6b3a764000014610e7d5760405162461bcd60e51b81526004016103bb906126ae565b60006001600160a01b0316828281518110610e9457fe5b602002602001015160a001516001600160a01b031614610ec65760405162461bcd60e51b81526004016103bb906122e7565b6000828281518110610ed457fe5b602090810291909101015190151560c090910152611130565b6003828281518110610efb57fe5b6020026020010151606001516004811115610f1257fe5b14610f2f5760405162461bcd60e51b81526004016103bb906121dd565b818181518110610f3b57fe5b602002602001015160800151600014610f665760405162461bcd60e51b81526004016103bb9061211e565b6000610fb2735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f848481518110610f8c57fe5b60200260200101516000015173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26107e7565b9050806001600160a01b0316838381518110610fca57fe5b602002602001015160a001516001600160a01b031614610ffc5760405162461bcd60e51b81526004016103bb90612386565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561103757600080fd5b505afa15801561104b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061106f9190611be8565b905083838151811061107d57fe5b6020026020010151600001516001600160a01b0316816001600160a01b03161480156110be57508383815181106110b057fe5b602002602001015160c00151155b8061111157508383815181106110d057fe5b6020026020010151600001516001600160a01b0316816001600160a01b031614158015611111575083838151811061110457fe5b602002602001015160c001515b61112d5760405162461bcd60e51b81526004016103bb9061254a565b50505b600101610baa565b5050565b60005b815181101561113857600354600160a01b900460ff166111ae576002600083838151811061116957fe5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff16156111ae5760405162461bcd60e51b81526004016103bb9061222d565b60008282815181106111bc57fe5b602090810291909101810151825460018082018555600094855293839020825160069092020180546001600160a01b0319166001600160a01b03909216919091178155918101518284015560408101516002830155606081015160038301805492949192909160ff199091169083600481111561123557fe5b02179055506080820151600482015560a08201516005909101805460c0909301511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b0319909416939093179190911691909117905560008054835160001991909101916001918590859081106112a657fe5b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001600260008484815181106112e857fe5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161113f565b60005b815181101561113857611337611ac2565b82828151811061134357fe5b6020026020010151905060008160400151116113715760405162461bcd60e51b81526004016103bb90612075565b60a081015160038260600151600481111561138857fe5b1415611442576001600160a01b0381166113b45760405162461bcd60e51b81526004016103bb90612615565b815160006113c184611a92565b6001600160a01b038316600081815260076020908152604080832042808255600890935292819020828155600193840186905592909201849055905192935090917f0d485bb9561d8954891bf391edd13fa8f4db3ea3191309867ecb63debeb509a891611433918190869081906127af565b60405180910390a250506114a7565b81516001600160a01b031673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4814156114805760405162461bcd60e51b81526004016103bb90612408565b6001600160a01b038116156114a75760405162461bcd60e51b81526004016103bb90612595565b5050600101611326565b6001600160a01b03811660009081526002602052604081205460ff166114d957600019610aa2565b506001600160a01b031660009081526001602052604090205490565b6000610aa2826001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561153357600080fd5b505afa158015611547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156b9190611d23565b6115e557826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e09190611be8565b6115e8565b60005b6114b1565b600060038260600151600481111561160157fe5b141561168b576004541561166b5781516001600160a01b03908116600090815260086020908152604080832054865190941683526007909152902054600454600291909201049081014211156116695760405162461bcd60e51b81526004016103bb90611fde565b505b5080516001600160a01b03166000908152600660205260409020546104d4565b60018260600151600481111561169d57fe5b14156117b85773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860005260066020527fc54ea4dd6a734fa461b7ee355eb25a8cb9467ce4d0e78fa68c9c085fda8edba254806116ff5760405162461bcd60e51b81526004016103bb9061265b565b600454156117965773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486000527fa197b6ae0044c90610b63b51392eb7144f4390bba5cb14eeeb9a37521cf0dd8a5460076020527ff942f4688cdba65adc8aa59da583acae93fa87351143ebc775559218bfa5f83254600454600291909201049081014211156117945760405162461bcd60e51b81526004016103bb9061228a565b505b620f42406117a8846080015183611886565b816117af57fe5b049150506104d4565b6000826060015160048111156117ca57fe5b14156104d4575060808101516104d4565b6117e3611ac2565b6117ec8261048d565b905060038160600151600481111561180057fe5b1461181d5760405162461bcd60e51b81526004016103bb906124b6565b60006118298383610aa8565b6001600160a01b03841660009081526006602052604090819020829055519091507f0d86730737b142fc160892fa8a0f2db687a92a0e294d1ad70624cf5acef03b84906118799085908490611f66565b60405180910390a1505050565b60008261189557506000610aa2565b828202828482816118a257fe5b041461066a5760405162461bcd60e51b81526004016103bb906120b7565b600080826001600160a01b0316846001600160a01b031614156118f55760405162461bcd60e51b81526004016103bb90612161565b826001600160a01b0316846001600160a01b031610611915578284611918565b83835b90925090506001600160a01b0382166104295760405162461bcd60e51b81526004016103bb906125de565b63ffffffff421690565b8051600090819081908161196086611a92565b905061196a611b11565b506001600160a01b038216600090815260086020908152604091829020825180840190935280548084526001909101549183019190915242037f00000000000000000000000000000000000000000000000000000000000000008110611a4a5781516001600160a01b03808616600090815260076020908152604080832094855581870180516001968701556008909252918290204280825594018790558b518651915192519316937f0d485bb9561d8954891bf391edd13fa8f4db3ea3191309867ecb63debeb509a893611a41939089906127af565b60405180910390a25b50506001600160a01b03909116600090815260076020526040902060018101549054919450925090509193909250565b516612725dd1d243ab6001600160e01b039091160490565b6000806000611aa48460a00151610857565b50915091508360c00151611ab85781611aba565b805b949350505050565b6040805160e08101825260008082526020820181905291810182905290606082019081526000602082018190526040820181905260609091015290565b60408051602081019091526000815290565b604051806040016040528060008152602001600081525090565b8035610aa281612821565b8035610aa281612836565b600060e08284031215611b52578081fd5b611b5c60e06127ca565b90508135611b6981612821565b808252506020820135602082015260408201356040820152606082013560058110611b9357600080fd5b606082015260808281013590820152611baf8360a08401611b2b565b60a0820152611bc18360c08401611b36565b60c082015292915050565b600060208284031215611bdd578081fd5b813561066a81612821565b600060208284031215611bf9578081fd5b815161066a81612821565b60008060208385031215611c16578081fd5b823567ffffffffffffffff80821115611c2d578283fd5b818501915085601f830112611c40578283fd5b813581811115611c4e578384fd5b8660208083028501011115611c61578384fd5b60209290920196919550909350505050565b60006020808385031215611c85578182fd5b823567ffffffffffffffff80821115611c9c578384fd5b818501915085601f830112611caf578384fd5b813581811115611cbd578485fd5b611cca84858302016127ca565b818152848101925083850160e0808402860187018a1015611ce9578788fd5b8795505b83861015611d1557611cff8a83611b41565b8552600195909501949386019390810190611ced565b509098975050505050505050565b600060208284031215611d34578081fd5b815161066a81612836565b600060208284031215611d50578081fd5b815167ffffffffffffffff80821115611d67578283fd5b818401915084601f830112611d7a578283fd5b815181811115611d88578384fd5b611d9b601f8201601f19166020016127ca565b9150808252856020828501011115611db1578384fd5b611dc28160208401602086016127f1565b50949350505050565b600080600060608486031215611ddf578081fd5b8351611dea81612844565b6020850151909350611dfb81612844565b604085015190925063ffffffff81168114611e14578182fd5b809150509250925092565b600060208284031215611e30578081fd5b5035919050565b600060208284031215611e48578081fd5b5051919050565b600060208284031215611e60578081fd5b815160ff8116811461066a578182fd5b6000815180845260208085019450808401835b83811015611e9f57815187529582019590820190600101611e83565b509495945050505050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b60008251611ee38184602087016127f1565b9190910192915050565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b6208aa8960eb1b815260030190565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b600060408252611fb86040830185611e70565b8281036020840152611fca8185611e70565b95945050505050565b901515815260200190565b6020808252601490820152732a2ba0a810383934b1b29034b99039ba30b6329760611b604082015260600190565b60208082526043908201527f45544820646f6573206e6f74206e65656420612070726963652066656564206160408201527f7320616c6c2070726963652066656564732061726520626173656420696e20456060820152622a241760e91b608082015260a00190565b60208082526022908201527f62617365556e6974206d7573742062652067726561746572207468616e207a65604082015261726f60f01b606082015260800190565b60208082526017908201527f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000604082015260600190565b6020808252601690820152751d1bdad95b8818dbdb999a59c81b9bdd08199bdd5b9960521b604082015260600190565b60208082526023908201527f546f6b656e20636f6e666967206669786564207072696365206d75737420626560408201526210181760e91b606082015260800190565b60208082526025908201527f556e697377617056324c6962726172793a204944454e544943414c5f41444452604082015264455353455360d81b606082015260800190565b60208082526017908201527f6d73672e73656e646572206973206e6f742061646d696e000000000000000000604082015260600190565b60208082526030908201527f496e76616c696420746f6b656e20636f6e66696720707269636520736f75726360408201526f329d1036bab9ba103132902a2ba0a81760811b606082015260800190565b6020808252603e908201527f546f6b656e20636f6e66696720616c72656164792065786973747320666f722060408201527f7468697320756e6465726c79696e6720746f6b656e20616464726573732e0000606082015260800190565b60208082526039908201527f555344432054574150207072696365206973207374616c653b2063616e6e6f7460408201527f20636f6e766572742066726f6d2055534420746f204554482e00000000000000606082015260800190565b60208082526022908201527f5745544820556e6973776170206d61726b6574206e6f74206e656365737361726040820152613c9760f11b606082015260800190565b6020808252603d908201527f53796d626f6c206d69736d61746368206265747765656e20746f6b656e20636f60408201527f6e66696720616e642045524332302073796d626f6c206d6574686f642e000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e6973776170206d61726b6574206973206e60408201526a37ba1031b7b93932b1ba1760a91b606082015260800190565b6020808252601a908201527f6e6f77206d75737420636f6d65206166746572206265666f7265000000000000604082015260600190565b60208082526047908201527f55534443206d757374206265205457415020626563617573652046495845445f60408201527f5553442070726963657320617265206261736564206f6e20746865205553444360608201526610383934b1b29760c91b608082015260a00190565b60208082526021908201527f496e636f727265637420746f6b656e20636f6e666967206261736520756e69746040820152601760f91b606082015260800190565b6020808252601b908201527f6f6e6c792054574150207072696365732067657420706f737465640000000000604082015260600190565b6020808252603a908201527f496e76616c6964205745544820746f6b656e20636f6e6669672070726963652060408201527f736f757263653a206d7573742062652046495845445f4554482e000000000000606082015260800190565b6020808252602b908201527f546f6b656e20636f6e66696720556e697377617020726576657273616c20697360408201526a1034b731b7b93932b1ba1760a91b606082015260800190565b60208082526029908201527f6f6e6c79205457415020707269636573207574696c697a65206120556e697377604082015268185c081b585c9ad95d60ba1b606082015260800190565b6020808252601e908201527f556e697377617056324c6962726172793a205a45524f5f414444524553530000604082015260600190565b60208082526026908201527f5457415020707269636573206d7573742068617665206120556e6973776170206040820152651b585c9ad95d60d21b606082015260800190565b60208082526033908201527f55534443207072696365206e6f74207365743b2063616e6e6f7420636f6e7665604082015272393a10333937b6902aa9a2103a379022aa241760691b606082015260800190565b6020808252602b908201527f5745544820746f6b656e20636f6e666967206669786564207072696365206d7560408201526a39ba1031329018b2989c1760a91b606082015260800190565b60208082526017908201527f4669786564506f696e743a204449565f42595f5a45524f000000000000000000604082015260600190565b81516001600160a01b0390811682526020808401519083015260408084015190830152606083015160e0830191906005811061276857fe5b80606085015250608084015160808401528060a08501511660a08401525060c0830151151560c083015292915050565b90815260200190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60405181810167ffffffffffffffff811182821017156127e957600080fd5b604052919050565b60005b8381101561280c5781810151838201526020016127f4565b8381111561281b576000848401525b50505050565b6001600160a01b038116811461048557600080fd5b801515811461048557600080fd5b6001600160701b038116811461048557600080fdfea2646970667358221220fce9fdde45123469d3742f65be9f6b32097cdaa6da4ed575247ca14e4bc850e064736f6c634300060c0033\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/AlphaHomoraV1PriceOracle.json",
    "content": "{\n  \"contractName\": \"AlphaHomoraV1PriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"name\": \"IBETH\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract Bank\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"IBETH\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract Bank\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements the `PriceOracle` interface.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\\"}},\\\"stateVariables\\\":{\\\"IBETH\\\":{\\\"details\\\":\\\"Alpha Homora ibETH token contract object.\\\"}},\\\"title\\\":\\\"AlphaHomoraV1PriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"notice\\\":\\\"Returns prices the Alpha Homora V1 ibETH ERC20 token.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/AlphaHomoraV1PriceOracle.sol\\\":\\\"AlphaHomoraV1PriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/alpha/Bank.sol\\\":{\\\"keccak256\\\":\\\"0xf22457f3de70f1d82d9d6bf93339b6a9ca6c30dd1b042c37cddb6936d5e8a43a\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7e3ef22ec9fc5fc5f417571ad4811d21af80e786cbf7fa114295a1a733e9a6aa\\\",\\\"dweb:/ipfs/QmYFrXv7LAFk4DvJntFM1xDjgVDL39wcM17eqZu5sJmdmM\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/AlphaHomoraV1PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x62a951686146baeae22aee19acfce22a988501cb4043983c6aebd5d50926244e\\\",\\\"urls\\\":[\\\"bzz-raw://fe4e60284939db29eea174695ab4efbddc5bf7f6c9b274e958a324d65da34eff\\\",\\\"dweb:/ipfs/QmbvgeqDQ6ocgk8zu5ayJjEkTxUqT7hD59q2cQd2y4DWMX\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506103f0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806378cd49e91461003b578063fc57d4df1461005f575b600080fd5b610043610097565b604080516001600160a01b039092168252519081900360200190f35b6100856004803603602081101561007557600080fd5b50356001600160a01b03166100af565b60408051918252519081900360200190f35b7367b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a81565b60007367b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a6001600160a01b0316826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561010857600080fd5b505afa15801561011c573d6000803e3d6000fd5b505050506040513d602081101561013257600080fd5b50516001600160a01b03161461014757600080fd5b6102547367b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561019757600080fd5b505afa1580156101ab573d6000803e3d6000fd5b505050506040513d60208110156101c157600080fd5b505160408051630daf7b9d60e21b8152905161024e91670de0b6b3a7640000917367b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a916336bdee74916004808301926020929190829003018186803b15801561021c57600080fd5b505afa158015610230573d6000803e3d6000fd5b505050506040513d602081101561024657600080fd5b50519061025a565b906102ba565b92915050565b60008261026957506000610254565b8282028284828161027657fe5b04146102b35760405162461bcd60e51b815260040180806020018281038252602181526020018061039a6021913960400191505060405180910390fd5b9392505050565b60006102b383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836103835760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610348578181015183820152602001610330565b50505050905090810190601f1680156103755780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161038f57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220c7f21515d06cb78ee7c1f64c8997aca520579b3f468495a31652e8c332fb35e964736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100365760003560e01c806378cd49e91461003b578063fc57d4df1461005f575b600080fd5b610043610097565b604080516001600160a01b039092168252519081900360200190f35b6100856004803603602081101561007557600080fd5b50356001600160a01b03166100af565b60408051918252519081900360200190f35b7367b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a81565b60007367b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a6001600160a01b0316826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561010857600080fd5b505afa15801561011c573d6000803e3d6000fd5b505050506040513d602081101561013257600080fd5b50516001600160a01b03161461014757600080fd5b6102547367b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561019757600080fd5b505afa1580156101ab573d6000803e3d6000fd5b505050506040513d60208110156101c157600080fd5b505160408051630daf7b9d60e21b8152905161024e91670de0b6b3a7640000917367b66c99d3eb37fa76aa3ed1ff33e8e39f0b9c7a916336bdee74916004808301926020929190829003018186803b15801561021c57600080fd5b505afa158015610230573d6000803e3d6000fd5b505050506040513d602081101561024657600080fd5b50519061025a565b906102ba565b92915050565b60008261026957506000610254565b8282028284828161027657fe5b04146102b35760405162461bcd60e51b815260040180806020018281038252602181526020018061039a6021913960400191505060405180910390fd5b9392505050565b60006102b383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836103835760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610348578181015183820152602001610330565b50505050905090810190601f1680156103755780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161038f57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220c7f21515d06cb78ee7c1f64c8997aca520579b3f468495a31652e8c332fb35e964736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"519:613:32:-:0;;;;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"519:613:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;694:77;;;:::i;:::-;;;;-1:-1:-1;;;;;694:77:32;;;;;;;;;;;;;;897:232;;;;;;;;;;;;;;;;-1:-1:-1;897:232:32;-1:-1:-1;;;;;897:232:32;;:::i;:::-;;;;;;;;;;;;;;;;694:77;728:42;694:77;:::o;897:232::-;972:4;728:42;-1:-1:-1;;;;;997:54:32;1012:6;-1:-1:-1;;;;;997:34:32;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;997:36:32;-1:-1:-1;;;;;997:54:32;;989:63;;;;;;1070:51;728:42;-1:-1:-1;;;;;1101:17:32;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1101:19:32;1070:16;;;-1:-1:-1;;;1070:16:32;;;;:26;;1091:4;;728:42;;1070:14;;:16;;;;;1101:19;;1070:16;;;;;;;728:42;1070:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1070:16:32;;:20;:26::i;:::-;:30;;:51::i;:::-;1063:58;897:232;-1:-1:-1;;897:232:32:o;2199:459:47:-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:47;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:1;2199:459;-1:-1:-1;;;2199:459:47:o;3120:130::-;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:47:o\",\n  \"source\": \"pragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CToken.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"../external/alpha/Bank.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title AlphaHomoraV1PriceOracle\\r\\n * @notice Returns prices the Alpha Homora V1 ibETH ERC20 token.\\r\\n * @dev Implements the `PriceOracle` interface.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract AlphaHomoraV1PriceOracle is PriceOracle {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @dev Alpha Homora ibETH token contract object.\\r\\n     */\\r\\n    Bank constant public IBETH = Bank(0x67B66C99D3Eb37Fa76Aa3Ed1ff33E8e39F0b9c7A);\\r\\n\\r\\n    /**\\r\\n     * @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        require(CErc20(address(cToken)).underlying() == address(IBETH));\\r\\n        return IBETH.totalETH().mul(1e18).div(IBETH.totalSupply());\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/AlphaHomoraV1PriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/AlphaHomoraV1PriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"AlphaHomoraV1PriceOracle\": [7352]\n    },\n    \"id\": 7353,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 7296,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:32\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 7297,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7353,\n        \"sourceUnit\": 10933,\n        \"src\": \"27:74:32\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 7298,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7353,\n        \"sourceUnit\": 6024,\n        \"src\": \"105:46:32\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 7299,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7353,\n        \"sourceUnit\": 5867,\n        \"src\": \"153:41:32\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 7300,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7353,\n        \"sourceUnit\": 5724,\n        \"src\": \"196:41:32\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/alpha/Bank.sol\",\n        \"file\": \"../external/alpha/Bank.sol\",\n        \"id\": 7301,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7353,\n        \"sourceUnit\": 5004,\n        \"src\": \"241:36:32\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 7303,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"556:11:32\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 7304,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"556:11:32\"\n          }\n        ],\n        \"contractDependencies\": [6023],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 7302,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"281:236:32\",\n          \"text\": \" @title AlphaHomoraV1PriceOracle\\n @notice Returns prices the Alpha Homora V1 ibETH ERC20 token.\\n @dev Implements the `PriceOracle` interface.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 7352,\n        \"linearizedBaseContracts\": [7352, 6023],\n        \"name\": \"AlphaHomoraV1PriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 7307,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 7305,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 10932,\n              \"src\": \"581:19:32\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$10932\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"575:38:32\",\n            \"typeName\": {\n              \"id\": 7306,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"605:7:32\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 7308,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"621:67:32\",\n              \"text\": \" @dev Alpha Homora ibETH token contract object.\"\n            },\n            \"functionSelector\": \"78cd49e9\",\n            \"id\": 7313,\n            \"mutability\": \"constant\",\n            \"name\": \"IBETH\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 7352,\n            \"src\": \"694:77:32\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_Bank_$5003\",\n              \"typeString\": \"contract Bank\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 7309,\n              \"name\": \"Bank\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 5003,\n              \"src\": \"694:4:32\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Bank_$5003\",\n                \"typeString\": \"contract Bank\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"arguments\": [\n                {\n                  \"argumentTypes\": null,\n                  \"hexValue\": \"307836374236364339394433456233374661373641613345643166663333453865333946306239633741\",\n                  \"id\": 7311,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"kind\": \"number\",\n                  \"lValueRequested\": false,\n                  \"nodeType\": \"Literal\",\n                  \"src\": \"728:42:32\",\n                  \"subdenomination\": null,\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"value\": \"0x67B66C99D3Eb37Fa76Aa3Ed1ff33E8e39F0b9c7A\"\n                }\n              ],\n              \"expression\": {\n                \"argumentTypes\": [\n                  {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  }\n                ],\n                \"id\": 7310,\n                \"name\": \"Bank\",\n                \"nodeType\": \"Identifier\",\n                \"overloadedDeclarations\": [],\n                \"referencedDeclaration\": 5003,\n                \"src\": \"723:4:32\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_type$_t_contract$_Bank_$5003_$\",\n                  \"typeString\": \"type(contract Bank)\"\n                }\n              },\n              \"id\": 7312,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"typeConversion\",\n              \"lValueRequested\": false,\n              \"names\": [],\n              \"nodeType\": \"FunctionCall\",\n              \"src\": \"723:48:32\",\n              \"tryCall\": false,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Bank_$5003\",\n                \"typeString\": \"contract Bank\"\n              }\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 7350,\n              \"nodeType\": \"Block\",\n              \"src\": \"978:151:32\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 7335,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"id\": 7326,\n                                      \"name\": \"cToken\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 7316,\n                                      \"src\": \"1012:6:32\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                        \"typeString\": \"contract CToken\"\n                                      }\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                        \"typeString\": \"contract CToken\"\n                                      }\n                                    ],\n                                    \"id\": 7325,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"1004:7:32\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_address_$\",\n                                      \"typeString\": \"type(address)\"\n                                    },\n                                    \"typeName\": {\n                                      \"id\": 7324,\n                                      \"name\": \"address\",\n                                      \"nodeType\": \"ElementaryTypeName\",\n                                      \"src\": \"1004:7:32\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": null,\n                                        \"typeString\": null\n                                      }\n                                    }\n                                  },\n                                  \"id\": 7327,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"1004:15:32\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                ],\n                                \"id\": 7323,\n                                \"name\": \"CErc20\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 5723,\n                                \"src\": \"997:6:32\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                                  \"typeString\": \"type(contract CErc20)\"\n                                }\n                              },\n                              \"id\": 7328,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"997:23:32\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                                \"typeString\": \"contract CErc20\"\n                              }\n                            },\n                            \"id\": 7329,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"underlying\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 5711,\n                            \"src\": \"997:34:32\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                              \"typeString\": \"function () view external returns (address)\"\n                            }\n                          },\n                          \"id\": 7330,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"997:36:32\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 7333,\n                              \"name\": \"IBETH\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7313,\n                              \"src\": \"1045:5:32\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_Bank_$5003\",\n                                \"typeString\": \"contract Bank\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_contract$_Bank_$5003\",\n                                \"typeString\": \"contract Bank\"\n                              }\n                            ],\n                            \"id\": 7332,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1037:7:32\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 7331,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1037:7:32\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 7334,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1037:14:32\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"src\": \"997:54:32\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      ],\n                      \"id\": 7322,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"989:7:32\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$returns$__$\",\n                        \"typeString\": \"function (bool) pure\"\n                      }\n                    },\n                    \"id\": 7336,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"989:63:32\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 7337,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"989:63:32\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7345,\n                            \"name\": \"IBETH\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7313,\n                            \"src\": \"1101:5:32\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_Bank_$5003\",\n                              \"typeString\": \"contract Bank\"\n                            }\n                          },\n                          \"id\": 7346,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"totalSupply\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 11542,\n                          \"src\": \"1101:17:32\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                            \"typeString\": \"function () view external returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7347,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1101:19:32\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"31653138\",\n                            \"id\": 7342,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1091:4:32\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            },\n                            \"value\": \"1e18\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [],\n                            \"expression\": {\n                              \"argumentTypes\": [],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 7338,\n                                \"name\": \"IBETH\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7313,\n                                \"src\": \"1070:5:32\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_Bank_$5003\",\n                                  \"typeString\": \"contract Bank\"\n                                }\n                              },\n                              \"id\": 7339,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"totalETH\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 5002,\n                              \"src\": \"1070:14:32\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                                \"typeString\": \"function () view external returns (uint256)\"\n                              }\n                            },\n                            \"id\": 7340,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1070:16:32\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 7341,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"1070:20:32\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7343,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1070:26:32\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 7344,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"1070:30:32\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 7348,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1070:51:32\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 7321,\n                  \"id\": 7349,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1063:58:32\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 7314,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"780:111:32\",\n              \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 7351,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 7318,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"949:8:32\"\n            },\n            \"parameters\": {\n              \"id\": 7317,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7316,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7351,\n                  \"src\": \"925:13:32\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 7315,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"925:6:32\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"924:15:32\"\n            },\n            \"returnParameters\": {\n              \"id\": 7321,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7320,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7351,\n                  \"src\": \"972:4:32\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7319,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"972:4:32\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"971:6:32\"\n            },\n            \"scope\": 7352,\n            \"src\": \"897:232:32\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 7353,\n        \"src\": \"519:613:32\"\n      }\n    ],\n    \"src\": \"0:1134:32\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/AlphaHomoraV1PriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"AlphaHomoraV1PriceOracle\": [7352]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 7296,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"0:23:32\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 10933,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 7353,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7297,\n        \"name\": \"ImportDirective\",\n        \"src\": \"27:74:32\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 7353,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7298,\n        \"name\": \"ImportDirective\",\n        \"src\": \"105:46:32\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5867,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n          \"file\": \"../external/compound/CToken.sol\",\n          \"scope\": 7353,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7299,\n        \"name\": \"ImportDirective\",\n        \"src\": \"153:41:32\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 7353,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7300,\n        \"name\": \"ImportDirective\",\n        \"src\": \"196:41:32\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5004,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/alpha/Bank.sol\",\n          \"file\": \"../external/alpha/Bank.sol\",\n          \"scope\": 7353,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7301,\n        \"name\": \"ImportDirective\",\n        \"src\": \"241:36:32\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [7352, 6023],\n          \"name\": \"AlphaHomoraV1PriceOracle\",\n          \"scope\": 7353\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title AlphaHomoraV1PriceOracle\\n @notice Returns prices the Alpha Homora V1 ibETH ERC20 token.\\n @dev Implements the `PriceOracle` interface.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n            },\n            \"id\": 7302,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"281:236:32\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 7303,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"556:11:32\"\n              }\n            ],\n            \"id\": 7304,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"556:11:32\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 10932,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 7305,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"581:19:32\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 7306,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"605:7:32\"\n              }\n            ],\n            \"id\": 7307,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"575:38:32\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"78cd49e9\",\n              \"mutability\": \"constant\",\n              \"name\": \"IBETH\",\n              \"overrides\": null,\n              \"scope\": 7352,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"contract Bank\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"Bank\",\n                  \"referencedDeclaration\": 5003,\n                  \"type\": \"contract Bank\"\n                },\n                \"id\": 7309,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"694:4:32\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"isStructConstructorCall\": false,\n                  \"lValueRequested\": false,\n                  \"names\": [null],\n                  \"tryCall\": false,\n                  \"type\": \"contract Bank\",\n                  \"type_conversion\": true\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"overloadedDeclarations\": [null],\n                      \"referencedDeclaration\": 5003,\n                      \"type\": \"type(contract Bank)\",\n                      \"value\": \"Bank\"\n                    },\n                    \"id\": 7310,\n                    \"name\": \"Identifier\",\n                    \"src\": \"723:4:32\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": null,\n                      \"hexvalue\": \"307836374236364339394433456233374661373641613345643166663333453865333946306239633741\",\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"subdenomination\": null,\n                      \"token\": \"number\",\n                      \"type\": \"address payable\",\n                      \"value\": \"0x67B66C99D3Eb37Fa76Aa3Ed1ff33E8e39F0b9c7A\"\n                    },\n                    \"id\": 7311,\n                    \"name\": \"Literal\",\n                    \"src\": \"728:42:32\"\n                  }\n                ],\n                \"id\": 7312,\n                \"name\": \"FunctionCall\",\n                \"src\": \"723:48:32\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Alpha Homora ibETH token contract object.\"\n                },\n                \"id\": 7308,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"621:67:32\"\n              }\n            ],\n            \"id\": 7313,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"694:77:32\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 7352,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n                },\n                \"id\": 7314,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"780:111:32\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 7318,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"949:8:32\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 7351,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 7315,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"925:6:32\"\n                      }\n                    ],\n                    \"id\": 7316,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"925:13:32\"\n                  }\n                ],\n                \"id\": 7317,\n                \"name\": \"ParameterList\",\n                \"src\": \"924:15:32\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 7351,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7319,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"972:4:32\"\n                      }\n                    ],\n                    \"id\": 7320,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"972:4:32\"\n                  }\n                ],\n                \"id\": 7321,\n                \"name\": \"ParameterList\",\n                \"src\": \"971:6:32\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 7322,\n                            \"name\": \"Identifier\",\n                            \"src\": \"989:7:32\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"==\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"underlying\",\n                                      \"referencedDeclaration\": 5711,\n                                      \"type\": \"function () view external returns (address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"contract CErc20\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_address\",\n                                                  \"typeString\": \"address\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 5723,\n                                              \"type\": \"type(contract CErc20)\",\n                                              \"value\": \"CErc20\"\n                                            },\n                                            \"id\": 7323,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"997:6:32\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"address\",\n                                              \"type_conversion\": true\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                                      \"typeString\": \"contract CToken\"\n                                                    }\n                                                  ],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"type\": \"type(address)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"name\": \"address\",\n                                                      \"type\": null\n                                                    },\n                                                    \"id\": 7324,\n                                                    \"name\": \"ElementaryTypeName\",\n                                                    \"src\": \"1004:7:32\"\n                                                  }\n                                                ],\n                                                \"id\": 7325,\n                                                \"name\": \"ElementaryTypeNameExpression\",\n                                                \"src\": \"1004:7:32\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 7316,\n                                                  \"type\": \"contract CToken\",\n                                                  \"value\": \"cToken\"\n                                                },\n                                                \"id\": 7326,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1012:6:32\"\n                                              }\n                                            ],\n                                            \"id\": 7327,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"1004:15:32\"\n                                          }\n                                        ],\n                                        \"id\": 7328,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"997:23:32\"\n                                      }\n                                    ],\n                                    \"id\": 7329,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"997:34:32\"\n                                  }\n                                ],\n                                \"id\": 7330,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"997:36:32\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_contract$_Bank_$5003\",\n                                          \"typeString\": \"contract Bank\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 7331,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"1037:7:32\"\n                                      }\n                                    ],\n                                    \"id\": 7332,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"1037:7:32\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7313,\n                                      \"type\": \"contract Bank\",\n                                      \"value\": \"IBETH\"\n                                    },\n                                    \"id\": 7333,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"1045:5:32\"\n                                  }\n                                ],\n                                \"id\": 7334,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1037:14:32\"\n                              }\n                            ],\n                            \"id\": 7335,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"997:54:32\"\n                          }\n                        ],\n                        \"id\": 7336,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"989:63:32\"\n                      }\n                    ],\n                    \"id\": 7337,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"989:63:32\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 7321\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                          \"typeString\": \"int_const 1000000000000000000\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"arguments\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"totalETH\",\n                                              \"referencedDeclaration\": 5002,\n                                              \"type\": \"function () view external returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 7313,\n                                                  \"type\": \"contract Bank\",\n                                                  \"value\": \"IBETH\"\n                                                },\n                                                \"id\": 7338,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1070:5:32\"\n                                              }\n                                            ],\n                                            \"id\": 7339,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"1070:14:32\"\n                                          }\n                                        ],\n                                        \"id\": 7340,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1070:16:32\"\n                                      }\n                                    ],\n                                    \"id\": 7341,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1070:20:32\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"31653138\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 1000000000000000000\",\n                                      \"value\": \"1e18\"\n                                    },\n                                    \"id\": 7342,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"1091:4:32\"\n                                  }\n                                ],\n                                \"id\": 7343,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1070:26:32\"\n                              }\n                            ],\n                            \"id\": 7344,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1070:30:32\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"totalSupply\",\n                                  \"referencedDeclaration\": 11542,\n                                  \"type\": \"function () view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7313,\n                                      \"type\": \"contract Bank\",\n                                      \"value\": \"IBETH\"\n                                    },\n                                    \"id\": 7345,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"1101:5:32\"\n                                  }\n                                ],\n                                \"id\": 7346,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1101:17:32\"\n                              }\n                            ],\n                            \"id\": 7347,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1101:19:32\"\n                          }\n                        ],\n                        \"id\": 7348,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1070:51:32\"\n                      }\n                    ],\n                    \"id\": 7349,\n                    \"name\": \"Return\",\n                    \"src\": \"1063:58:32\"\n                  }\n                ],\n                \"id\": 7350,\n                \"name\": \"Block\",\n                \"src\": \"978:151:32\"\n              }\n            ],\n            \"id\": 7351,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"897:232:32\"\n          }\n        ],\n        \"id\": 7352,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"519:613:32\"\n      }\n    ],\n    \"id\": 7353,\n    \"name\": \"SourceUnit\",\n    \"src\": \"0:1134:32\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.110Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements the `PriceOracle` interface.\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n      }\n    },\n    \"stateVariables\": {\n      \"IBETH\": {\n        \"details\": \"Alpha Homora ibETH token contract object.\"\n      }\n    },\n    \"title\": \"AlphaHomoraV1PriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"notice\": \"Returns prices the Alpha Homora V1 ibETH ERC20 token.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/BalancerLpTokenPriceOracle.json",
    "content": "{\n  \"contractName\": \"BalancerLpTokenPriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"name\": \"BONE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"BPOW_PRECISION\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"EXIT_FEE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"INIT_POOL_SUPPLY\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_BOUND_TOKENS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_BPOW_BASE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_FEE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_IN_RATIO\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_OUT_RATIO\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_TOTAL_WEIGHT\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_WEIGHT\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MIN_BALANCE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MIN_BOUND_TOKENS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MIN_BPOW_BASE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MIN_FEE\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MIN_WEIGHT\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"underlying\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"price\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"BONE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BPOW_PRECISION\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"EXIT_FEE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"INIT_POOL_SUPPLY\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MAX_BOUND_TOKENS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MAX_BPOW_BASE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MAX_FEE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MAX_IN_RATIO\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MAX_OUT_RATIO\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MAX_TOTAL_WEIGHT\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MAX_WEIGHT\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MIN_BALANCE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MIN_BOUND_TOKENS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MIN_BPOW_BASE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MIN_FEE\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MIN_WEIGHT\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the PriceOracle interface for Fuse pools (and Compound v2).\\\",\\\"params\\\":{\\\"cToken\\\":\\\"The cToken address for price retrieval.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals, for the given cToken address.\\\"}},\\\"price(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The underlying token address for which to get the price (set to zero address for ETH).\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH (scaled by 1e18).\\\"}}},\\\"title\\\":\\\"BalancerLpTokenPriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Get the underlying price of a cToken.\\\"},\\\"price(address)\\\":{\\\"notice\\\":\\\"Get the LP token price price for an underlying token address.\\\"}},\\\"notice\\\":\\\"BalancerLpTokenPriceOracle is a price oracle for Balancer LP tokens.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BalancerLpTokenPriceOracle.sol\\\":\\\"BalancerLpTokenPriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/balancer/BConst.sol\\\":{\\\"keccak256\\\":\\\"0x44dce94672da76c15d4c8fe517e9df5eeb37705890efd6429e6535d6ca6c9722\\\",\\\"license\\\":\\\"GPL-3.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://76cb52806d995fef52ca3a721934b5da4c09fc4219428c688c5d02dc13007d10\\\",\\\"dweb:/ipfs/QmfA2Pnwm5hV6xJ5bk2KtA8esVpwceTWhGy5EA2FCTrbjf\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/balancer/BNum.sol\\\":{\\\"keccak256\\\":\\\"0x0ffdfaa16c3fa0f052e9ab073e3d6def2651c554130aa6143b165e67f54e76e4\\\",\\\"license\\\":\\\"GPL-3.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://743391172a1faa813fb45e173e8f16b3ce60e1f5b1ff1d9327c7ed3aaa95f034\\\",\\\"dweb:/ipfs/QmUoBr1cL12R9zr7njtUuXXYwNKzCMhxPEspYQjJiSfQNM\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/balancer/IBalancerPool.sol\\\":{\\\"keccak256\\\":\\\"0x3f3ec7765816984f8f04b7780f22a4b456731cd604b40818d42a3ca260b00c4c\\\",\\\"license\\\":\\\"GPL-3.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://508a0b956d34a0fe3ba3f692a61bd5b9046881167c760a41d03fc9690a428406\\\",\\\"dweb:/ipfs/QmY4pbf2uBdSQP2VZTJgruwH32eNGPsatPPkyRHTXrYL6e\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BalancerLpTokenPriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xc3efac2b02c7eb2525d44dedeb566de812f1b1a93d3c334cb26fe40f3665522d\\\",\\\"urls\\\":[\\\"bzz-raw://e3fbd201e6768eb8f1ef4c499382674087524cd4f0466b2c03013c08be774102\\\",\\\"dweb:/ipfs/QmWhaDQKrfEki6XEwrjvHnQgcqGrktknDhkqfPefvAB4Uk\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xf267cd7f597c43c528b18543849347126d814357a0c3e262ac657f3054260a89\\\",\\\"urls\\\":[\\\"bzz-raw://d315fcc20e26f6378189167f4ab86893819903823ea18a485588f355aab5e036\\\",\\\"dweb:/ipfs/QmYG9oa8Rti6u7bAoBWJC8TtSqM1V8QsBiivsQo9y4wkAF\\\"]},\\\"@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\\\",\\\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\\\",\\\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x9e71cf53c2ee5c9e4f183e168028fc208560493aaf48668bca0981bb2c8359c2\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7cb9d29f7bc76b077649ccef2043e1492a462afcb2410f443e63233f206a95dd\\\",\\\"dweb:/ipfs/QmRDXEro4hh2E6rTUAWvBkHzivAS1TBmtSLP1mRGAHVnnL\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50611261806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063b7b800a4116100a2578063c36596a611610071578063c36596a61461013d578063c6580d12146101b3578063e4a28a521461011b578063ec093021146101bb578063fc57d4df146101c357610116565b8063b7b800a414610193578063ba019dab1461019b578063bc063e1a146101a3578063bc694ea2146101ab57610116565b8063867378c5116100e9578063867378c51461014d5780639381cd2b14610155578063992e2a921461015d578063aea9107814610165578063b0e0d1361461018b57610116565b806309a3bbe41461011b578063189d00ca14610135578063218b53821461013d57806376c7a3c714610145575b600080fd5b6101236101e9565b60408051918252519081900360200190f35b6101236101f6565b61012361020a565b610123610216565b610123610228565b61012361023c565b610123610249565b6101236004803603602081101561017b57600080fd5b50356001600160a01b0316610255565b610123610266565b61012361026b565b610123610270565b610123610275565b610123610285565b610123610291565b610123610296565b610123600480360360208110156101d957600080fd5b50356001600160a01b03166102a6565b6802b5e3af16b188000081565b6402540be400670de0b6b3a76400005b0481565b670de0b6b3a764000081565b620f4240670de0b6b3a7640000610206565b64e8d4a51000670de0b6b3a7640000610206565b68056bc75e2d6310000081565b6704a03ce68d21555681565b6000610260826103af565b92915050565b600881565b600281565b600181565b600a670de0b6b3a7640000610206565b671bc16d674ec7ffff81565b600081565b6002670de0b6b3a7640000610206565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156102e257600080fd5b505afa1580156102f6573d6000803e3d6000fd5b505050506040513d602081101561030c57600080fd5b50516040805163313ce56760e01b815290519192506103a8916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561035557600080fd5b505afa158015610369573d6000803e3d6000fd5b505050506040513d602081101561037f57600080fd5b505160ff16600a0a6103a2670de0b6b3a764000061039c856103af565b90610a86565b90610adf565b9392505050565b600080829050806001600160a01b031663cd2ed8fb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ee57600080fd5b505afa158015610402573d6000803e3d6000fd5b505050506040513d602081101561041857600080fd5b50516002146104585760405162461bcd60e51b81526004018080602001828103825260298152602001806111e26029913960400191505060405180910390fd5b6060816001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561049357600080fd5b505afa1580156104a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156104d057600080fd5b81019080805160405193929190846401000000008211156104f057600080fd5b90830190602082018581111561050557600080fd5b825186602082028301116401000000008211171561052257600080fd5b82525081516020918201928201910280838360005b8381101561054f578181015183820152602001610537565b50505050905001604052505050905060008160008151811061056d57fe5b6020026020010151905060008260018151811061058657fe5b602002602001015190506000336001600160a01b031663aea91078846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156105df57600080fd5b505afa1580156105f3573d6000803e3d6000fd5b505050506040513d602081101561060957600080fd5b5051604080516315d5220f60e31b81526001600160a01b03851660048201529051919250600091339163aea91078916024808301926020929190829003018186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b505050506040513d602081101561068157600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0387169163313ce567916004808301926020929190829003018186803b1580156106c957600080fd5b505afa1580156106dd573d6000803e3d6000fd5b505050506040513d60208110156106f357600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0387169163313ce567916004808301926020929190829003018186803b15801561073b57600080fd5b505afa15801561074f573d6000803e3d6000fd5b505050506040513d602081101561076557600080fd5b50519050601260ff8316101561078b576107888460ff8416601203600a0a610a86565b93505b60128260ff1611156107ae576107ab8460111960ff851601600a0a610adf565b93505b60128160ff1610156107d0576107cd8360ff8316601203600a0a610a86565b92505b60128160ff1611156107f3576107f08360111960ff841601600a0a610adf565b92505b6000806109ed8a6001600160a01b031663f8b2cb4f8a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561084657600080fd5b505afa15801561085a573d6000803e3d6000fd5b505050506040513d602081101561087057600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b038b811660048301529151918e169163f8b2cb4f91602480820192602092909190829003018186803b1580156108bc57600080fd5b505afa1580156108d0573d6000803e3d6000fd5b505050506040513d60208110156108e657600080fd5b50516040805163f1b8a9b760e01b81526001600160a01b038d811660048301529151918f169163f1b8a9b791602480820192602092909190829003018186803b15801561093257600080fd5b505afa158015610946573d6000803e3d6000fd5b505050506040513d602081101561095c57600080fd5b81019080805190602001909291905050508d6001600160a01b031663f1b8a9b78c6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156109ba57600080fd5b505afa1580156109ce573d6000803e3d6000fd5b505050506040513d60208110156109e457600080fd5b50518a8a610b21565b91509150610a768a6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2d57600080fd5b505afa158015610a41573d6000803e3d6000fd5b505050506040513d6020811015610a5757600080fd5b50516103a2610a668489610a86565b610a70868b610a86565b90610bd0565b9c9b505050505050505050505050565b600082610a9557506000610260565b82820282848281610aa257fe5b04146103a85760405162461bcd60e51b815260040180806020018281038252602181526020018061120b6021913960400191505060405180910390fd5b60006103a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c2a565b6000806000610b308989610ccc565b90506000610b50610b418987610ddf565b610b4b8989610ddf565b610ccc565b905080821115610b93576000610b668284610ccc565b9050610b7b8b610b76838b610ea1565b610ddf565b9450610b8b8a610b4b838c610ea1565b935050610bc3565b6000610b9f8383610ccc565b9050610baf8b610b4b838b610ea1565b9450610bbf8a610b76838c610ea1565b9350505b5050965096945050505050565b6000828201838110156103a8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183610cb65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c7b578181015183820152602001610c63565b50505050905090810190601f168015610ca85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610cc257fe5b0495945050505050565b600081610d0f576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580610d375750670de0b6b3a7640000848281610d3457fe5b04145b610d7b576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015610dc9576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6000848281610dd457fe5b049695505050505050565b6000828202831580610df9575082848281610df657fe5b04145b610e3d576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015610e90576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a764000082610dd4565b60006001831015610ef1576040805162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b604482015290519081900360640190fd5b671bc16d674ec7ffff831115610f47576040805162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b604482015290519081900360640190fd5b6000610f5283610faf565b90506000610f608483610fca565b90506000610f7686610f718561102c565b61103a565b905081610f87579250610260915050565b6000610f9887846305f5e100611091565b9050610fa48282610ddf565b979650505050505050565b6000670de0b6b3a7640000610fc38361102c565b0292915050565b6000806000610fd9858561116f565b915091508015611024576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b670de0b6b3a7640000900490565b6000806002830661105357670de0b6b3a7640000611055565b835b90506002830492505b82156103a85761106e8485610ddf565b93506002830615611086576110838185610ddf565b90505b60028304925061105e565b60008281806110a887670de0b6b3a764000061116f565b9092509050670de0b6b3a764000080600060015b888410611160576000670de0b6b3a7640000820290506000806110f08a6110eb85670de0b6b3a7640000610fca565b61116f565b9150915061110287610b76848c610ddf565b965061110e8784610ccc565b96508661111d57505050611160565b8715611127579315935b8015611131579315935b8415611148576111418688610fca565b9550611155565b6111528688611194565b95505b5050506001016110bc565b50909998505050505050505050565b600080828410611185575050808203600061118d565b505081810360015b9250929050565b6000828201838110156103a8576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fdfe42616c616e63657220706f6f6c206d75737420686176652065786163746c79203220746f6b656e732e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122038d2111861095c99a108a7fd3a38dc7fd44e166b7a0417fa2b67c9868061782664736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063b7b800a4116100a2578063c36596a611610071578063c36596a61461013d578063c6580d12146101b3578063e4a28a521461011b578063ec093021146101bb578063fc57d4df146101c357610116565b8063b7b800a414610193578063ba019dab1461019b578063bc063e1a146101a3578063bc694ea2146101ab57610116565b8063867378c5116100e9578063867378c51461014d5780639381cd2b14610155578063992e2a921461015d578063aea9107814610165578063b0e0d1361461018b57610116565b806309a3bbe41461011b578063189d00ca14610135578063218b53821461013d57806376c7a3c714610145575b600080fd5b6101236101e9565b60408051918252519081900360200190f35b6101236101f6565b61012361020a565b610123610216565b610123610228565b61012361023c565b610123610249565b6101236004803603602081101561017b57600080fd5b50356001600160a01b0316610255565b610123610266565b61012361026b565b610123610270565b610123610275565b610123610285565b610123610291565b610123610296565b610123600480360360208110156101d957600080fd5b50356001600160a01b03166102a6565b6802b5e3af16b188000081565b6402540be400670de0b6b3a76400005b0481565b670de0b6b3a764000081565b620f4240670de0b6b3a7640000610206565b64e8d4a51000670de0b6b3a7640000610206565b68056bc75e2d6310000081565b6704a03ce68d21555681565b6000610260826103af565b92915050565b600881565b600281565b600181565b600a670de0b6b3a7640000610206565b671bc16d674ec7ffff81565b600081565b6002670de0b6b3a7640000610206565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156102e257600080fd5b505afa1580156102f6573d6000803e3d6000fd5b505050506040513d602081101561030c57600080fd5b50516040805163313ce56760e01b815290519192506103a8916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561035557600080fd5b505afa158015610369573d6000803e3d6000fd5b505050506040513d602081101561037f57600080fd5b505160ff16600a0a6103a2670de0b6b3a764000061039c856103af565b90610a86565b90610adf565b9392505050565b600080829050806001600160a01b031663cd2ed8fb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ee57600080fd5b505afa158015610402573d6000803e3d6000fd5b505050506040513d602081101561041857600080fd5b50516002146104585760405162461bcd60e51b81526004018080602001828103825260298152602001806111e26029913960400191505060405180910390fd5b6060816001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561049357600080fd5b505afa1580156104a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156104d057600080fd5b81019080805160405193929190846401000000008211156104f057600080fd5b90830190602082018581111561050557600080fd5b825186602082028301116401000000008211171561052257600080fd5b82525081516020918201928201910280838360005b8381101561054f578181015183820152602001610537565b50505050905001604052505050905060008160008151811061056d57fe5b6020026020010151905060008260018151811061058657fe5b602002602001015190506000336001600160a01b031663aea91078846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156105df57600080fd5b505afa1580156105f3573d6000803e3d6000fd5b505050506040513d602081101561060957600080fd5b5051604080516315d5220f60e31b81526001600160a01b03851660048201529051919250600091339163aea91078916024808301926020929190829003018186803b15801561065757600080fd5b505afa15801561066b573d6000803e3d6000fd5b505050506040513d602081101561068157600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0387169163313ce567916004808301926020929190829003018186803b1580156106c957600080fd5b505afa1580156106dd573d6000803e3d6000fd5b505050506040513d60208110156106f357600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0387169163313ce567916004808301926020929190829003018186803b15801561073b57600080fd5b505afa15801561074f573d6000803e3d6000fd5b505050506040513d602081101561076557600080fd5b50519050601260ff8316101561078b576107888460ff8416601203600a0a610a86565b93505b60128260ff1611156107ae576107ab8460111960ff851601600a0a610adf565b93505b60128160ff1610156107d0576107cd8360ff8316601203600a0a610a86565b92505b60128160ff1611156107f3576107f08360111960ff841601600a0a610adf565b92505b6000806109ed8a6001600160a01b031663f8b2cb4f8a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561084657600080fd5b505afa15801561085a573d6000803e3d6000fd5b505050506040513d602081101561087057600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b038b811660048301529151918e169163f8b2cb4f91602480820192602092909190829003018186803b1580156108bc57600080fd5b505afa1580156108d0573d6000803e3d6000fd5b505050506040513d60208110156108e657600080fd5b50516040805163f1b8a9b760e01b81526001600160a01b038d811660048301529151918f169163f1b8a9b791602480820192602092909190829003018186803b15801561093257600080fd5b505afa158015610946573d6000803e3d6000fd5b505050506040513d602081101561095c57600080fd5b81019080805190602001909291905050508d6001600160a01b031663f1b8a9b78c6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156109ba57600080fd5b505afa1580156109ce573d6000803e3d6000fd5b505050506040513d60208110156109e457600080fd5b50518a8a610b21565b91509150610a768a6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2d57600080fd5b505afa158015610a41573d6000803e3d6000fd5b505050506040513d6020811015610a5757600080fd5b50516103a2610a668489610a86565b610a70868b610a86565b90610bd0565b9c9b505050505050505050505050565b600082610a9557506000610260565b82820282848281610aa257fe5b04146103a85760405162461bcd60e51b815260040180806020018281038252602181526020018061120b6021913960400191505060405180910390fd5b60006103a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c2a565b6000806000610b308989610ccc565b90506000610b50610b418987610ddf565b610b4b8989610ddf565b610ccc565b905080821115610b93576000610b668284610ccc565b9050610b7b8b610b76838b610ea1565b610ddf565b9450610b8b8a610b4b838c610ea1565b935050610bc3565b6000610b9f8383610ccc565b9050610baf8b610b4b838b610ea1565b9450610bbf8a610b76838c610ea1565b9350505b5050965096945050505050565b6000828201838110156103a8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008183610cb65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c7b578181015183820152602001610c63565b50505050905090810190601f168015610ca85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610cc257fe5b0495945050505050565b600081610d0f576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b604482015290519081900360640190fd5b670de0b6b3a76400008302831580610d375750670de0b6b3a7640000848281610d3457fe5b04145b610d7b576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b60028304810181811015610dc9576040805162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b604482015290519081900360640190fd5b6000848281610dd457fe5b049695505050505050565b6000828202831580610df9575082848281610df657fe5b04145b610e3d576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6706f05b59d3b20000810181811015610e90576040805162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b604482015290519081900360640190fd5b6000670de0b6b3a764000082610dd4565b60006001831015610ef1576040805162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b604482015290519081900360640190fd5b671bc16d674ec7ffff831115610f47576040805162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b604482015290519081900360640190fd5b6000610f5283610faf565b90506000610f608483610fca565b90506000610f7686610f718561102c565b61103a565b905081610f87579250610260915050565b6000610f9887846305f5e100611091565b9050610fa48282610ddf565b979650505050505050565b6000670de0b6b3a7640000610fc38361102c565b0292915050565b6000806000610fd9858561116f565b915091508015611024576040805162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b604482015290519081900360640190fd5b509392505050565b670de0b6b3a7640000900490565b6000806002830661105357670de0b6b3a7640000611055565b835b90506002830492505b82156103a85761106e8485610ddf565b93506002830615611086576110838185610ddf565b90505b60028304925061105e565b60008281806110a887670de0b6b3a764000061116f565b9092509050670de0b6b3a764000080600060015b888410611160576000670de0b6b3a7640000820290506000806110f08a6110eb85670de0b6b3a7640000610fca565b61116f565b9150915061110287610b76848c610ddf565b965061110e8784610ccc565b96508661111d57505050611160565b8715611127579315935b8015611131579315935b8415611148576111418688610fca565b9550611155565b6111528688611194565b95505b5050506001016110bc565b50909998505050505050505050565b600080828410611185575050808203600061118d565b505081810360015b9250929050565b6000828201838110156103a8576040805162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b604482015290519081900360640190fdfe42616c616e63657220706f6f6c206d75737420686176652065786163746c79203220746f6b656e732e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122038d2111861095c99a108a7fd3a38dc7fd44e166b7a0417fa2b67c9868061782664736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"741:4688:33:-:0;;;;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"741:4688:33:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;529:50:7;;;:::i;:::-;;;;;;;;;;;;;;;;828:54;;;:::i;420:45::-;;;:::i;252:53::-;;;:::i;586:54::-;;;:::i;649:51::-;;;:::i;947:59::-;;;:::i;1119:108:33:-;;;;;;;;;;;;;;;;-1:-1:-1;1119:108:33;-1:-1:-1;;;;;1119:108:33;;:::i;201:42:7:-;;;:::i;152:::-;;;:::i;709:46::-;;;:::i;312:50::-;;;:::i;762:59::-;;;:::i;369:42::-;;;:::i;891:49::-;;;:::i;1543:444:33:-;;;;;;;;;;;;;;;;-1:-1:-1;1543:444:33;-1:-1:-1;;;;;1543:444:33;;:::i;529:50:7:-;570:9;529:50;:::o;828:54::-;876:6;137;869:13;;828:54;:::o;420:45::-;137:6;420:45;:::o;252:53::-;300:5;137:6;293:12;;586:54;634:6;137;627:13;;649:51;690:10;649:51;:::o;947:59::-;988:18;947:59;:::o;1119:108:33:-;1177:4;1201:18;1208:10;1201:6;:18::i;:::-;1194:25;1119:108;-1:-1:-1;;1119:108:33:o;201:42:7:-;242:1;201:42;:::o;152:::-;193:1;152:42;:::o;709:46::-;750:5;709:46;:::o;312:50::-;360:2;137:6;353:9;;762:59;803:18;762:59;:::o;369:42::-;410:1;369:42;:::o;891:49::-;939:1;137:6;932:8;;1543:444:33;1618:4;1635:18;1671:6;-1:-1:-1;;;;;1656:34:33;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1656:36:33;1938:39;;;-1:-1:-1;;;1938:39:33;;;;1656:36;;-1:-1:-1;1891:88:33;;-1:-1:-1;;;;;1938:37:33;;;;;:39;;;;;1656:36;;1938:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1938:39:33;1930:48;;1924:2;:54;1891:28;1914:4;1891:18;1898:10;1891:6;:18::i;:::-;:22;;:28::i;:::-;:32;;:88::i;:::-;1884:95;1543:444;-1:-1:-1;;;1543:444:33:o;2221:1440::-;2288:4;2305:18;2340:10;2305:46;;2370:4;-1:-1:-1;;;;;2370:17:33;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2370:19:33;2393:1;2370:24;2362:78;;;;-1:-1:-1;;;2362:78:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2451:23;2477:4;-1:-1:-1;;;;;2477:19:33;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2477:21:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2477:21:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2451:47;;2509:14;2526:6;2533:1;2526:9;;;;;;;;;;;;;;2509:26;;2546:14;2563:6;2570:1;2563:9;;;;;;;;;;;;;;2546:26;;2583:11;2613:10;-1:-1:-1;;;;;2597:33:33;;2631:6;2597:41;;;;;;;;;;;;;-1:-1:-1;;;;;2597:41:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2597:41:33;2663;;;-1:-1:-1;;;2663:41:33;;-1:-1:-1;;;;;2663:41:33;;;;;;;;2597;;-1:-1:-1;2649:11:33;;2679:10;;2663:33;;:41;;;;;2597;;2663;;;;;;;2679:10;2663:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2663:41:33;2733:35;;;-1:-1:-1;;;2733:35:33;;;;2663:41;;-1:-1:-1;2715:15:33;;-1:-1:-1;;;;;2733:33:33;;;;;:35;;;;;2663:41;;2733:35;;;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2733:35:33;2797;;;-1:-1:-1;;;2797:35:33;;;;2733;;-1:-1:-1;2779:15:33;;-1:-1:-1;;;;;2797:33:33;;;;;:35;;;;;2733;;2797;;;;;;;:33;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2797:35:33;;-1:-1:-1;2859:2:33;2847:14;;;;2843:66;;;2869:40;:3;2889:18;;;2884:2;:23;2877:2;:31;2869:7;:40::i;:::-;2863:46;;2843:66;2936:2;2924:9;:14;;;2920:66;;;2946:40;:3;-1:-1:-1;;2961:18:33;;;:23;2954:2;:31;2946:7;:40::i;:::-;2940:46;;2920:66;3013:2;3001:9;:14;;;2997:66;;;3023:40;:3;3043:18;;;3038:2;:23;3031:2;:31;3023:7;:40::i;:::-;3017:46;;2997:66;3090:2;3078:9;:14;;;3074:66;;;3100:40;:3;-1:-1:-1;;3115:18:33;;;:23;3108:2;:31;3100:7;:40::i;:::-;3094:46;;3074:66;3152:16;3170;3190:236;3224:4;-1:-1:-1;;;;;3224:15:33;;3240:6;3224:23;;;;;;;;;;;;;-1:-1:-1;;;;;3224:23:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3224:23:33;3262;;;-1:-1:-1;;;3262:23:33;;-1:-1:-1;;;;;3262:23:33;;;;;;;;;:15;;;;;;:23;;;;;3224;;3262;;;;;;;;:15;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3262:23:33;3300:32;;;-1:-1:-1;;;3300:32:33;;-1:-1:-1;;;;;3300:32:33;;;;;;;;;:24;;;;;;:32;;;;;3262:23;;3300:32;;;;;;;;:24;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3347:4;-1:-1:-1;;;;;3347:24:33;;3372:6;3347:32;;;;;;;;;;;;;-1:-1:-1;;;;;3347:32:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3347:32:33;3394:3;3412;3190:19;:236::i;:::-;3151:275;;;;3589:64;3634:4;-1:-1:-1;;;;;3634:16:33;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3634:18:33;3589:40;3611:17;:8;3624:3;3611:12;:17::i;:::-;3589;:8;3602:3;3589:12;:17::i;:::-;:21;;:40::i;:64::-;3582:71;2221:1440;-1:-1:-1;;;;;;;;;;;;2221:1440:33:o;2199:459:47:-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:47;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3120:130;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;:3;:39::i;4172:1254:33:-;4302:16;4320;4890:10;4903:16;4908:4;4914;4903;:16::i;:::-;4890:29;;4930:10;4943:34;4948:13;4953:2;4957:3;4948:4;:13::i;:::-;4963;4968:2;4972:3;4963:4;:13::i;:::-;4943:4;:34::i;:::-;4930:47;;5087:2;5082;:7;5078:341;;;5106:13;5122:12;5127:2;5131;5122:4;:12::i;:::-;5106:28;;5160:27;5165:4;5171:15;5176:5;5183:2;5171:4;:15::i;:::-;5160:4;:27::i;:::-;5149:38;;5213:27;5218:4;5224:15;5229:5;5236:2;5224:4;:15::i;5213:27::-;5202:38;;5078:341;;;;5273:13;5289:12;5294:2;5298;5289:4;:12::i;:::-;5273:28;;5327:27;5332:4;5338:15;5343:5;5350:2;5338:4;:15::i;5327:27::-;5316:38;;5380:27;5385:4;5391:15;5396:5;5403:2;5391:4;:15::i;5380:27::-;5369:38;;5078:341;;4172:1254;;;;;;;;;;;:::o;893:176:47:-;951:7;982:5;;;1005:6;;;;997:46;;;;;-1:-1:-1;;;997:46:47;;;;;;;;;;;;;;;;;;;;;;;;;;;3732:272;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:47:o;1321:387:8:-;1392:4;1422:6;1414:31;;;;;-1:-1:-1;;;1414:31:8;;;;;;;;;;;;-1:-1:-1;;;1414:31:8;;;;;;;;;;;;;;;137:6:7;1466:8:8;;1493:6;;;:24;;;137:6:7;1508:1:8;1503:2;:6;;;;;;:14;1493:24;1485:53;;;;;-1:-1:-1;;;1485:53:8;;;;;;;;;;;;-1:-1:-1;;;1485:53:8;;;;;;;;;;;;;;;1586:1;1582:5;;1576:12;;1607:8;;;;1599:37;;;;;-1:-1:-1;;;1599:37:8;;;;;;;;;;;;-1:-1:-1;;;1599:37:8;;;;;;;;;;;;;;;1664:7;1679:1;1674:2;:6;;;;;;;1321:387;-1:-1:-1;;;;;;1321:387:8:o;1002:311::-;1073:4;1105:5;;;1129:6;;;:21;;;1149:1;1144;1139:2;:6;;;;;;:11;1129:21;1121:50;;;;;-1:-1:-1;;;1121:50:8;;;;;;;;;;;;-1:-1:-1;;;1121:50:8;;;;;;;;;;;;;;;1198:8;1192:15;;1226:8;;;;1218:37;;;;;-1:-1:-1;;;1218:37:8;;;;;;;;;;;;-1:-1:-1;;;1218:37:8;;;;;;;;;;;;;;;1266:7;137:6:7;1276:2:8;:9;;2211:555;2287:4;750:5:7;2317:4:8;:21;;2309:55;;;;;-1:-1:-1;;;2309:55:8;;;;;;;;;;;;-1:-1:-1;;;2309:55:8;;;;;;;;;;;;;;;803:18:7;2383:21:8;;;2375:56;;;;;-1:-1:-1;;;2375:56:8;;;;;;;;;;;;-1:-1:-1;;;2375:56:8;;;;;;;;;;;;;;;2444:10;2458:11;2465:3;2458:6;:11::i;:::-;2444:25;;2483:11;2497:16;2502:3;2507:5;2497:4;:16::i;:::-;2483:30;;2526:13;2542:24;2548:4;2554:11;2559:5;2554:4;:11::i;:::-;2542:5;:24::i;:::-;2526:40;-1:-1:-1;2583:11:8;2579:59;;2618:8;-1:-1:-1;2611:15:8;;-1:-1:-1;;2611:15:8;2579:59;2650:18;2671:40;2682:4;2688:6;869:13:7;2671:10:8;:40::i;:::-;2650:61;;2729:29;2734:8;2744:13;2729:4;:29::i;:::-;2722:36;2211:555;-1:-1:-1;;;;;;;2211:555:8:o;249:116::-;314:4;137:6:7;343:7:8;348:1;343:4;:7::i;:::-;:14;;249:116;-1:-1:-1;;249:116:8:o;561:202::-;632:4;655:6;663:9;676:14;685:1;688;676:8;:14::i;:::-;654:36;;;;710:4;709:5;701:35;;;;;-1:-1:-1;;;701:35:8;;;;;;;;;;;;-1:-1:-1;;;701:35:8;;;;;;;;;;;;;;;-1:-1:-1;754:1:8;561:202;-1:-1:-1;;;561:202:8:o;132:109::-;137:6:7;225:8:8;;;132:109::o;1736:314::-;1808:4;;1843:1;1839;:5;:21;;137:6:7;1839:21:8;;;1852:1;1839:21;1830:30;-1:-1:-1;1883:1:8;1878:6;;;;1873:151;1886:6;;1873:151;;1921:10;1926:1;1929;1921:4;:10::i;:::-;1917:14;-1:-1:-1;1956:1:8;1952;:5;:10;1948:65;;1987:10;1992:1;1995;1987:4;:10::i;:::-;1983:14;;1948:65;1899:1;1894:6;;;;1873:151;;2774:1080;2872:4;2927:3;2872:4;;2964:20;2973:4;137:6:7;2964:8:8;:20::i;:::-;2941:43;;-1:-1:-1;2941:43:8;-1:-1:-1;137:6:7;;2995:9:8;3329:1;3315:509;3340:9;3332:4;:17;3315:509;;3371:9;137:6:7;3383:1:8;:8;3371:20;;3407:6;3415:9;3428:29;3437:1;3440:16;3445:4;137:6:7;3440:4:8;:16::i;:::-;3428:8;:29::i;:::-;3406:51;;;;3479:22;3484:4;3490:10;3495:1;3498;3490:4;:10::i;3479:22::-;3472:29;;3523:16;3528:4;3534;3523;:16::i;:::-;3516:23;-1:-1:-1;3558:9:8;3554:20;;3569:5;;;;;3554:20;3595:4;3591:30;;;3612:9;;;3591:30;3640:4;3636:30;;;3657:9;;;3636:30;3685:8;3681:132;;;3720:15;3725:3;3730:4;3720;:15::i;:::-;3714:21;;3681:132;;;3782:15;3787:3;3792:4;3782;:15::i;:::-;3776:21;;3681:132;-1:-1:-1;;;3351:3:8;;3315:509;;;-1:-1:-1;3843:3:8;;2774:1080;-1:-1:-1;;;;;;;;;2774:1080:8:o;771:223::-;846:4;852;883:1;878;:6;874:113;;-1:-1:-1;;909:5:8;;;916;901:21;;874:113;-1:-1:-1;;963:5:8;;;970:4;874:113;771:223;;;;;:::o;373:180::-;444:4;475:5;;;499:6;;;;491:35;;;;;-1:-1:-1;;;491:35:8;;;;;;;;;;;;-1:-1:-1;;;491:35:8;;;;;;;;;;;;;\",\n  \"source\": \"pragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CToken.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"../external/balancer/IBalancerPool.sol\\\";\\r\\nimport \\\"../external/balancer/BNum.sol\\\";\\r\\n\\r\\nimport \\\"./BasePriceOracle.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title BalancerLpTokenPriceOracle\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n * @notice BalancerLpTokenPriceOracle is a price oracle for Balancer LP tokens.\\r\\n * @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\\r\\n */\\r\\ncontract BalancerLpTokenPriceOracle is PriceOracle, BNum {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @notice Get the LP token price price for an underlying token address.\\r\\n     * @param underlying The underlying token address for which to get the price (set to zero address for ETH).\\r\\n     * @return Price denominated in ETH (scaled by 1e18).\\r\\n     */\\r\\n    function price(address underlying) external view returns (uint) {\\r\\n        return _price(underlying);\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @notice Get the underlying price of a cToken.\\r\\n     * @dev Implements the PriceOracle interface for Fuse pools (and Compound v2).\\r\\n     * @param cToken The cToken address for price retrieval.\\r\\n     * @return Price denominated in ETH, with 18 decimals, for the given cToken address.\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        address underlying = CErc20(address(cToken)).underlying();\\r\\n        // Comptroller needs prices to be scaled by 1e(36 - decimals)\\r\\n        // Since `_price` returns prices scaled by 18 decimals, we must scale them by 1e(36 - 18 - decimals)\\r\\n        return _price(underlying).mul(1e18).div(10 ** uint256(ERC20Upgradeable(underlying).decimals()));\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Fetches the fair LP token/ETH price from Balancer, with 18 decimals of precision.\\r\\n     * Source: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BalancerPairOracle.sol\\r\\n     */\\r\\n    function _price(address underlying) internal view virtual returns (uint) {\\r\\n        IBalancerPool pool = IBalancerPool(underlying);\\r\\n        require(pool.getNumTokens() == 2, \\\"Balancer pool must have exactly 2 tokens.\\\");\\r\\n        address[] memory tokens = pool.getFinalTokens();\\r\\n        address tokenA = tokens[0];\\r\\n        address tokenB = tokens[1];\\r\\n        uint256 pxA = BasePriceOracle(msg.sender).price(tokenA);\\r\\n        uint256 pxB = BasePriceOracle(msg.sender).price(tokenB);\\r\\n        uint8 decimalsA = ERC20Upgradeable(tokenA).decimals();\\r\\n        uint8 decimalsB = ERC20Upgradeable(tokenB).decimals();\\r\\n        if (decimalsA < 18) pxA = pxA.mul(10 ** (18 - uint256(decimalsA)));\\r\\n        if (decimalsA > 18) pxA = pxA.div(10 ** (uint256(decimalsA) - 18));\\r\\n        if (decimalsB < 18) pxB = pxB.mul(10 ** (18 - uint256(decimalsB)));\\r\\n        if (decimalsB > 18) pxB = pxB.div(10 ** (uint256(decimalsB) - 18));\\r\\n        (uint256 fairResA, uint256 fairResB) = computeFairReserves(\\r\\n            pool.getBalance(tokenA),\\r\\n            pool.getBalance(tokenB),\\r\\n            pool.getNormalizedWeight(tokenA),\\r\\n            pool.getNormalizedWeight(tokenB),\\r\\n            pxA,\\r\\n            pxB\\r\\n        );\\r\\n        // use fairReserveA and fairReserveB to compute LP token price\\r\\n        // LP price = (fairResA * pxA + fairResB * pxB) / totalLPSupply\\r\\n        return fairResA.mul(pxA).add(fairResB.mul(pxB)).div(pool.totalSupply());\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Returns fair reserve amounts given spot reserves, weights, and fair prices.\\r\\n     * Source: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BalancerPairOracle.sol\\r\\n     * @param resA Reserve of the first asset\\r\\n     * @param resB Reserev of the second asset\\r\\n     * @param wA Weight of the first asset\\r\\n     * @param wB Weight of the second asset\\r\\n     * @param pxA Fair price of the first asset\\r\\n     * @param pxB Fair price of the second asset\\r\\n     */\\r\\n    function computeFairReserves(uint256 resA, uint256 resB, uint256 wA, uint256 wB, uint256 pxA, uint256 pxB) internal pure returns (uint256 fairResA, uint256 fairResB) {\\r\\n        // NOTE: wA + wB = 1 (normalize weights)\\r\\n        // constant product = resA^wA * resB^wB\\r\\n        // constraints:\\r\\n        // - fairResA^wA * fairResB^wB = constant product\\r\\n        // - fairResA * pxA / wA = fairResB * pxB / wB\\r\\n        // Solving equations:\\r\\n        // --> fairResA^wA * (fairResA * (pxA * wB) / (wA * pxB))^wB = constant product\\r\\n        // --> fairResA / r1^wB = constant product\\r\\n        // --> fairResA = resA^wA * resB^wB * r1^wB\\r\\n        // --> fairResA = resA * (resB/resA)^wB * r1^wB = resA * (r1/r0)^wB\\r\\n        uint256 r0 = bdiv(resA, resB);\\r\\n        uint256 r1 = bdiv(bmul(wA, pxB), bmul(wB, pxA));\\r\\n        // fairResA = resA * (r1 / r0) ^ wB\\r\\n        // fairResB = resB * (r0 / r1) ^ wA\\r\\n        if (r0 > r1) {\\r\\n            uint256 ratio = bdiv(r1, r0);\\r\\n            fairResA = bmul(resA, bpow(ratio, wB));\\r\\n            fairResB = bdiv(resB, bpow(ratio, wA));\\r\\n        } else {\\r\\n            uint256 ratio = bdiv(r0, r1);\\r\\n            fairResA = bdiv(resA, bpow(ratio, wB));\\r\\n            fairResB = bmul(resB, bpow(ratio, wA));\\r\\n        }\\r\\n    }\\r\\n}\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BalancerLpTokenPriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BalancerLpTokenPriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"BalancerLpTokenPriceOracle\": [7723]\n    },\n    \"id\": 7724,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 7354,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:33\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 7355,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7724,\n        \"sourceUnit\": 10933,\n        \"src\": \"27:74:33\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"id\": 7356,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7724,\n        \"sourceUnit\": 11534,\n        \"src\": \"103:78:33\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 7357,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7724,\n        \"sourceUnit\": 6024,\n        \"src\": \"185:46:33\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 7358,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7724,\n        \"sourceUnit\": 5867,\n        \"src\": \"233:41:33\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 7359,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7724,\n        \"sourceUnit\": 5724,\n        \"src\": \"276:41:33\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/balancer/IBalancerPool.sol\",\n        \"file\": \"../external/balancer/IBalancerPool.sol\",\n        \"id\": 7360,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7724,\n        \"sourceUnit\": 5655,\n        \"src\": \"321:48:33\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/balancer/BNum.sol\",\n        \"file\": \"../external/balancer/BNum.sol\",\n        \"id\": 7361,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7724,\n        \"sourceUnit\": 5562,\n        \"src\": \"371:39:33\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n        \"file\": \"./BasePriceOracle.sol\",\n        \"id\": 7362,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 7724,\n        \"sourceUnit\": 7739,\n        \"src\": \"414:31:33\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 7364,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"780:11:33\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 7365,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"780:11:33\"\n          },\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 7366,\n              \"name\": \"BNum\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 5561,\n              \"src\": \"793:4:33\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_BNum_$5561\",\n                \"typeString\": \"contract BNum\"\n              }\n            },\n            \"id\": 7367,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"793:4:33\"\n          }\n        ],\n        \"contractDependencies\": [5088, 5561, 6023],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 7363,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"449:290:33\",\n          \"text\": \" @title BalancerLpTokenPriceOracle\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\n @notice BalancerLpTokenPriceOracle is a price oracle for Balancer LP tokens.\\n @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 7723,\n        \"linearizedBaseContracts\": [7723, 5561, 5088, 6023],\n        \"name\": \"BalancerLpTokenPriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 7370,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 7368,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 10932,\n              \"src\": \"811:19:33\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$10932\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"805:38:33\",\n            \"typeName\": {\n              \"id\": 7369,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"835:7:33\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"body\": {\n              \"id\": 7382,\n              \"nodeType\": \"Block\",\n              \"src\": \"1183:44:33\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 7379,\n                        \"name\": \"underlying\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7373,\n                        \"src\": \"1208:10:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 7378,\n                      \"name\": \"_price\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7621,\n                      \"src\": \"1201:6:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 7380,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1201:18:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 7377,\n                  \"id\": 7381,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1194:25:33\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 7371,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"851:262:33\",\n              \"text\": \" @notice Get the LP token price price for an underlying token address.\\n @param underlying The underlying token address for which to get the price (set to zero address for ETH).\\n @return Price denominated in ETH (scaled by 1e18).\"\n            },\n            \"functionSelector\": \"aea91078\",\n            \"id\": 7383,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 7374,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7373,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7383,\n                  \"src\": \"1134:18:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7372,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1134:7:33\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1133:20:33\"\n            },\n            \"returnParameters\": {\n              \"id\": 7377,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7376,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7383,\n                  \"src\": \"1177:4:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7375,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1177:4:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1176:6:33\"\n            },\n            \"scope\": 7723,\n            \"src\": \"1119:108:33\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 7422,\n              \"nodeType\": \"Block\",\n              \"src\": \"1624:363:33\",\n              \"statements\": [\n                {\n                  \"assignments\": [7393],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7393,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7422,\n                      \"src\": \"1635:18:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7392,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1635:7:33\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7402,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 7397,\n                                \"name\": \"cToken\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7386,\n                                \"src\": \"1671:6:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              ],\n                              \"id\": 7396,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"ElementaryTypeNameExpression\",\n                              \"src\": \"1663:7:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_address_$\",\n                                \"typeString\": \"type(address)\"\n                              },\n                              \"typeName\": {\n                                \"id\": 7395,\n                                \"name\": \"address\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"1663:7:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": null,\n                                  \"typeString\": null\n                                }\n                              }\n                            },\n                            \"id\": 7398,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1663:15:33\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 7394,\n                          \"name\": \"CErc20\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 5723,\n                          \"src\": \"1656:6:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                            \"typeString\": \"type(contract CErc20)\"\n                          }\n                        },\n                        \"id\": 7399,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1656:23:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                          \"typeString\": \"contract CErc20\"\n                        }\n                      },\n                      \"id\": 7400,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"underlying\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5711,\n                      \"src\": \"1656:34:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 7401,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1656:36:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1635:57:33\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 7419,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"3130\",\n                          \"id\": 7410,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1924:2:33\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_10_by_1\",\n                            \"typeString\": \"int_const 10\"\n                          },\n                          \"value\": \"10\"\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"**\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [],\n                              \"expression\": {\n                                \"argumentTypes\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"id\": 7414,\n                                      \"name\": \"underlying\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 7393,\n                                      \"src\": \"1955:10:33\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                      }\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                      }\n                                    ],\n                                    \"id\": 7413,\n                                    \"name\": \"ERC20Upgradeable\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 11533,\n                                    \"src\": \"1938:16:33\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11533_$\",\n                                      \"typeString\": \"type(contract ERC20Upgradeable)\"\n                                    }\n                                  },\n                                  \"id\": 7415,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"1938:28:33\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11533\",\n                                    \"typeString\": \"contract ERC20Upgradeable\"\n                                  }\n                                },\n                                \"id\": 7416,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"decimals\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 11105,\n                                \"src\": \"1938:37:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                                  \"typeString\": \"function () view external returns (uint8)\"\n                                }\n                              },\n                              \"id\": 7417,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"1938:39:33\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint8\",\n                                \"typeString\": \"uint8\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_uint8\",\n                                \"typeString\": \"uint8\"\n                              }\n                            ],\n                            \"id\": 7412,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1930:7:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                              \"typeString\": \"type(uint256)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 7411,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1930:7:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 7418,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1930:48:33\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1924:54:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"31653138\",\n                            \"id\": 7407,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1914:4:33\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            },\n                            \"value\": \"1e18\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 7404,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7393,\n                                \"src\": \"1898:10:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 7403,\n                              \"name\": \"_price\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7621,\n                              \"src\": \"1891:6:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (address) view returns (uint256)\"\n                              }\n                            },\n                            \"id\": 7405,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1891:18:33\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 7406,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"1891:22:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7408,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1891:28:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 7409,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"1891:32:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 7420,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1891:88:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 7391,\n                  \"id\": 7421,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1884:95:33\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 7384,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1235:302:33\",\n              \"text\": \" @notice Get the underlying price of a cToken.\\n @dev Implements the PriceOracle interface for Fuse pools (and Compound v2).\\n @param cToken The cToken address for price retrieval.\\n @return Price denominated in ETH, with 18 decimals, for the given cToken address.\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 7423,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 7388,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"1595:8:33\"\n            },\n            \"parameters\": {\n              \"id\": 7387,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7386,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7423,\n                  \"src\": \"1571:13:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 7385,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"1571:6:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1570:15:33\"\n            },\n            \"returnParameters\": {\n              \"id\": 7391,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7390,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7423,\n                  \"src\": \"1618:4:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7389,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1618:4:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1617:6:33\"\n            },\n            \"scope\": 7723,\n            \"src\": \"1543:444:33\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 7620,\n              \"nodeType\": \"Block\",\n              \"src\": \"2294:1367:33\",\n              \"statements\": [\n                {\n                  \"assignments\": [7432],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7432,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pool\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"2305:18:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                        \"typeString\": \"contract IBalancerPool\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 7431,\n                        \"name\": \"IBalancerPool\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 5654,\n                        \"src\": \"2305:13:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                          \"typeString\": \"contract IBalancerPool\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7436,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 7434,\n                        \"name\": \"underlying\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7426,\n                        \"src\": \"2340:10:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 7433,\n                      \"name\": \"IBalancerPool\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 5654,\n                      \"src\": \"2326:13:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_IBalancerPool_$5654_$\",\n                        \"typeString\": \"type(contract IBalancerPool)\"\n                      }\n                    },\n                    \"id\": 7435,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2326:25:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                      \"typeString\": \"contract IBalancerPool\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2305:46:33\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 7442,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 7438,\n                              \"name\": \"pool\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7432,\n                              \"src\": \"2370:4:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                                \"typeString\": \"contract IBalancerPool\"\n                              }\n                            },\n                            \"id\": 7439,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"getNumTokens\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 5586,\n                            \"src\": \"2370:17:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                              \"typeString\": \"function () view external returns (uint256)\"\n                            }\n                          },\n                          \"id\": 7440,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2370:19:33\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"32\",\n                          \"id\": 7441,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2393:1:33\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_2_by_1\",\n                            \"typeString\": \"int_const 2\"\n                          },\n                          \"value\": \"2\"\n                        },\n                        \"src\": \"2370:24:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"42616c616e63657220706f6f6c206d75737420686176652065786163746c79203220746f6b656e732e\",\n                        \"id\": 7443,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2396:43:33\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_89d97c93ae08e67c9394bc95331d06e4c60ff5393da7ca2984f59705af7fde4e\",\n                          \"typeString\": \"literal_string \\\"Balancer pool must have exactly 2 tokens.\\\"\"\n                        },\n                        \"value\": \"Balancer pool must have exactly 2 tokens.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_89d97c93ae08e67c9394bc95331d06e4c60ff5393da7ca2984f59705af7fde4e\",\n                          \"typeString\": \"literal_string \\\"Balancer pool must have exactly 2 tokens.\\\"\"\n                        }\n                      ],\n                      \"id\": 7437,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"2362:7:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 7444,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2362:78:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 7445,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2362:78:33\"\n                },\n                {\n                  \"assignments\": [7450],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7450,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"tokens\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"2451:23:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                        \"typeString\": \"address[]\"\n                      },\n                      \"typeName\": {\n                        \"baseType\": {\n                          \"id\": 7448,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2451:7:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"id\": 7449,\n                        \"length\": null,\n                        \"nodeType\": \"ArrayTypeName\",\n                        \"src\": \"2451:9:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_address_$dyn_storage_ptr\",\n                          \"typeString\": \"address[]\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7454,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7451,\n                        \"name\": \"pool\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7432,\n                        \"src\": \"2477:4:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                          \"typeString\": \"contract IBalancerPool\"\n                        }\n                      },\n                      \"id\": 7452,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"getFinalTokens\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5569,\n                      \"src\": \"2477:19:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$\",\n                        \"typeString\": \"function () view external returns (address[] memory)\"\n                      }\n                    },\n                    \"id\": 7453,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2477:21:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                      \"typeString\": \"address[] memory\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2451:47:33\"\n                },\n                {\n                  \"assignments\": [7456],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7456,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"tokenA\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"2509:14:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7455,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2509:7:33\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7460,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"baseExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7457,\n                      \"name\": \"tokens\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7450,\n                      \"src\": \"2526:6:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                        \"typeString\": \"address[] memory\"\n                      }\n                    },\n                    \"id\": 7459,\n                    \"indexExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 7458,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2533:1:33\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"IndexAccess\",\n                    \"src\": \"2526:9:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2509:26:33\"\n                },\n                {\n                  \"assignments\": [7462],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7462,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"tokenB\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"2546:14:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7461,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2546:7:33\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7466,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"baseExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7463,\n                      \"name\": \"tokens\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7450,\n                      \"src\": \"2563:6:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                        \"typeString\": \"address[] memory\"\n                      }\n                    },\n                    \"id\": 7465,\n                    \"indexExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31\",\n                      \"id\": 7464,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2570:1:33\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1_by_1\",\n                        \"typeString\": \"int_const 1\"\n                      },\n                      \"value\": \"1\"\n                    },\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"IndexAccess\",\n                    \"src\": \"2563:9:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2546:26:33\"\n                },\n                {\n                  \"assignments\": [7468],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7468,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pxA\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"2583:11:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7467,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2583:7:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7476,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 7474,\n                        \"name\": \"tokenA\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7456,\n                        \"src\": \"2631:6:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 7470,\n                              \"name\": \"msg\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": -15,\n                              \"src\": \"2613:3:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_magic_message\",\n                                \"typeString\": \"msg\"\n                              }\n                            },\n                            \"id\": 7471,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"sender\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": null,\n                            \"src\": \"2613:10:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address_payable\",\n                              \"typeString\": \"address payable\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address_payable\",\n                              \"typeString\": \"address payable\"\n                            }\n                          ],\n                          \"id\": 7469,\n                          \"name\": \"BasePriceOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 7738,\n                          \"src\": \"2597:15:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$7738_$\",\n                            \"typeString\": \"type(contract BasePriceOracle)\"\n                          }\n                        },\n                        \"id\": 7472,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2597:27:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_BasePriceOracle_$7738\",\n                          \"typeString\": \"contract BasePriceOracle\"\n                        }\n                      },\n                      \"id\": 7473,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"price\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 7737,\n                      \"src\": \"2597:33:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view external returns (uint256)\"\n                      }\n                    },\n                    \"id\": 7475,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2597:41:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2583:55:33\"\n                },\n                {\n                  \"assignments\": [7478],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7478,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pxB\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"2649:11:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7477,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2649:7:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7486,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 7484,\n                        \"name\": \"tokenB\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7462,\n                        \"src\": \"2697:6:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 7480,\n                              \"name\": \"msg\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": -15,\n                              \"src\": \"2679:3:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_magic_message\",\n                                \"typeString\": \"msg\"\n                              }\n                            },\n                            \"id\": 7481,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"sender\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": null,\n                            \"src\": \"2679:10:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address_payable\",\n                              \"typeString\": \"address payable\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address_payable\",\n                              \"typeString\": \"address payable\"\n                            }\n                          ],\n                          \"id\": 7479,\n                          \"name\": \"BasePriceOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 7738,\n                          \"src\": \"2663:15:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$7738_$\",\n                            \"typeString\": \"type(contract BasePriceOracle)\"\n                          }\n                        },\n                        \"id\": 7482,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2663:27:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_BasePriceOracle_$7738\",\n                          \"typeString\": \"contract BasePriceOracle\"\n                        }\n                      },\n                      \"id\": 7483,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"price\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 7737,\n                      \"src\": \"2663:33:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view external returns (uint256)\"\n                      }\n                    },\n                    \"id\": 7485,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2663:41:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2649:55:33\"\n                },\n                {\n                  \"assignments\": [7488],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7488,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"decimalsA\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"2715:15:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint8\",\n                        \"typeString\": \"uint8\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7487,\n                        \"name\": \"uint8\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2715:5:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint8\",\n                          \"typeString\": \"uint8\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7494,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7490,\n                            \"name\": \"tokenA\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7456,\n                            \"src\": \"2750:6:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 7489,\n                          \"name\": \"ERC20Upgradeable\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 11533,\n                          \"src\": \"2733:16:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11533_$\",\n                            \"typeString\": \"type(contract ERC20Upgradeable)\"\n                          }\n                        },\n                        \"id\": 7491,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2733:24:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11533\",\n                          \"typeString\": \"contract ERC20Upgradeable\"\n                        }\n                      },\n                      \"id\": 7492,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"decimals\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 11105,\n                      \"src\": \"2733:33:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                        \"typeString\": \"function () view external returns (uint8)\"\n                      }\n                    },\n                    \"id\": 7493,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2733:35:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint8\",\n                      \"typeString\": \"uint8\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2715:53:33\"\n                },\n                {\n                  \"assignments\": [7496],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7496,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"decimalsB\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"2779:15:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint8\",\n                        \"typeString\": \"uint8\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7495,\n                        \"name\": \"uint8\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2779:5:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint8\",\n                          \"typeString\": \"uint8\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7502,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7498,\n                            \"name\": \"tokenB\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7462,\n                            \"src\": \"2814:6:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 7497,\n                          \"name\": \"ERC20Upgradeable\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 11533,\n                          \"src\": \"2797:16:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11533_$\",\n                            \"typeString\": \"type(contract ERC20Upgradeable)\"\n                          }\n                        },\n                        \"id\": 7499,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2797:24:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11533\",\n                          \"typeString\": \"contract ERC20Upgradeable\"\n                        }\n                      },\n                      \"id\": 7500,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"decimals\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 11105,\n                      \"src\": \"2797:33:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                        \"typeString\": \"function () view external returns (uint8)\"\n                      }\n                    },\n                    \"id\": 7501,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2797:35:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint8\",\n                      \"typeString\": \"uint8\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2779:53:33\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint8\",\n                      \"typeString\": \"uint8\"\n                    },\n                    \"id\": 7505,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7503,\n                      \"name\": \"decimalsA\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7488,\n                      \"src\": \"2847:9:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint8\",\n                        \"typeString\": \"uint8\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3138\",\n                      \"id\": 7504,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2859:2:33\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_18_by_1\",\n                        \"typeString\": \"int_const 18\"\n                      },\n                      \"value\": \"18\"\n                    },\n                    \"src\": \"2847:14:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 7521,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2843:66:33\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7519,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftHandSide\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7506,\n                        \"name\": \"pxA\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7468,\n                        \"src\": \"2863:3:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"Assignment\",\n                      \"operator\": \"=\",\n                      \"rightHandSide\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 7517,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"3130\",\n                              \"id\": 7509,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2877:2:33\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_10_by_1\",\n                                \"typeString\": \"int_const 10\"\n                              },\n                              \"value\": \"10\"\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"**\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"components\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"id\": 7515,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"leftExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"hexValue\": \"3138\",\n                                    \"id\": 7510,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"kind\": \"number\",\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"Literal\",\n                                    \"src\": \"2884:2:33\",\n                                    \"subdenomination\": null,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_rational_18_by_1\",\n                                      \"typeString\": \"int_const 18\"\n                                    },\n                                    \"value\": \"18\"\n                                  },\n                                  \"nodeType\": \"BinaryOperation\",\n                                  \"operator\": \"-\",\n                                  \"rightExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"id\": 7513,\n                                        \"name\": \"decimalsA\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 7488,\n                                        \"src\": \"2897:9:33\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      ],\n                                      \"id\": 7512,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                                      \"src\": \"2889:7:33\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                        \"typeString\": \"type(uint256)\"\n                                      },\n                                      \"typeName\": {\n                                        \"id\": 7511,\n                                        \"name\": \"uint256\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"2889:7:33\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": null,\n                                          \"typeString\": null\n                                        }\n                                      }\n                                    },\n                                    \"id\": 7514,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"typeConversion\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"2889:18:33\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"src\": \"2884:23:33\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                }\n                              ],\n                              \"id\": 7516,\n                              \"isConstant\": false,\n                              \"isInlineArray\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"TupleExpression\",\n                              \"src\": \"2883:25:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"2877:31:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7507,\n                            \"name\": \"pxA\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7468,\n                            \"src\": \"2869:3:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 7508,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"2869:7:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7518,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2869:40:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"src\": \"2863:46:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 7520,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"2863:46:33\"\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint8\",\n                      \"typeString\": \"uint8\"\n                    },\n                    \"id\": 7524,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7522,\n                      \"name\": \"decimalsA\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7488,\n                      \"src\": \"2924:9:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint8\",\n                        \"typeString\": \"uint8\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3138\",\n                      \"id\": 7523,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2936:2:33\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_18_by_1\",\n                        \"typeString\": \"int_const 18\"\n                      },\n                      \"value\": \"18\"\n                    },\n                    \"src\": \"2924:14:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 7540,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2920:66:33\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7538,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftHandSide\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7525,\n                        \"name\": \"pxA\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7468,\n                        \"src\": \"2940:3:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"Assignment\",\n                      \"operator\": \"=\",\n                      \"rightHandSide\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 7536,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"3130\",\n                              \"id\": 7528,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2954:2:33\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_10_by_1\",\n                                \"typeString\": \"int_const 10\"\n                              },\n                              \"value\": \"10\"\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"**\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"components\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"id\": 7534,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"leftExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"id\": 7531,\n                                        \"name\": \"decimalsA\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 7488,\n                                        \"src\": \"2969:9:33\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      ],\n                                      \"id\": 7530,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                                      \"src\": \"2961:7:33\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                        \"typeString\": \"type(uint256)\"\n                                      },\n                                      \"typeName\": {\n                                        \"id\": 7529,\n                                        \"name\": \"uint256\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"2961:7:33\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": null,\n                                          \"typeString\": null\n                                        }\n                                      }\n                                    },\n                                    \"id\": 7532,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"typeConversion\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"2961:18:33\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"nodeType\": \"BinaryOperation\",\n                                  \"operator\": \"-\",\n                                  \"rightExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"hexValue\": \"3138\",\n                                    \"id\": 7533,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"kind\": \"number\",\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"Literal\",\n                                    \"src\": \"2982:2:33\",\n                                    \"subdenomination\": null,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_rational_18_by_1\",\n                                      \"typeString\": \"int_const 18\"\n                                    },\n                                    \"value\": \"18\"\n                                  },\n                                  \"src\": \"2961:23:33\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                }\n                              ],\n                              \"id\": 7535,\n                              \"isConstant\": false,\n                              \"isInlineArray\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"TupleExpression\",\n                              \"src\": \"2960:25:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"2954:31:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7526,\n                            \"name\": \"pxA\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7468,\n                            \"src\": \"2946:3:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 7527,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"div\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10862,\n                          \"src\": \"2946:7:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7537,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2946:40:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"src\": \"2940:46:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 7539,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"2940:46:33\"\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint8\",\n                      \"typeString\": \"uint8\"\n                    },\n                    \"id\": 7543,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7541,\n                      \"name\": \"decimalsB\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7496,\n                      \"src\": \"3001:9:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint8\",\n                        \"typeString\": \"uint8\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3138\",\n                      \"id\": 7542,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"3013:2:33\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_18_by_1\",\n                        \"typeString\": \"int_const 18\"\n                      },\n                      \"value\": \"18\"\n                    },\n                    \"src\": \"3001:14:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 7559,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2997:66:33\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7557,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftHandSide\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7544,\n                        \"name\": \"pxB\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7478,\n                        \"src\": \"3017:3:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"Assignment\",\n                      \"operator\": \"=\",\n                      \"rightHandSide\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 7555,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"3130\",\n                              \"id\": 7547,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"3031:2:33\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_10_by_1\",\n                                \"typeString\": \"int_const 10\"\n                              },\n                              \"value\": \"10\"\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"**\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"components\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"id\": 7553,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"leftExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"hexValue\": \"3138\",\n                                    \"id\": 7548,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"kind\": \"number\",\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"Literal\",\n                                    \"src\": \"3038:2:33\",\n                                    \"subdenomination\": null,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_rational_18_by_1\",\n                                      \"typeString\": \"int_const 18\"\n                                    },\n                                    \"value\": \"18\"\n                                  },\n                                  \"nodeType\": \"BinaryOperation\",\n                                  \"operator\": \"-\",\n                                  \"rightExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"id\": 7551,\n                                        \"name\": \"decimalsB\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 7496,\n                                        \"src\": \"3051:9:33\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      ],\n                                      \"id\": 7550,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                                      \"src\": \"3043:7:33\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                        \"typeString\": \"type(uint256)\"\n                                      },\n                                      \"typeName\": {\n                                        \"id\": 7549,\n                                        \"name\": \"uint256\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"3043:7:33\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": null,\n                                          \"typeString\": null\n                                        }\n                                      }\n                                    },\n                                    \"id\": 7552,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"typeConversion\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"3043:18:33\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"src\": \"3038:23:33\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                }\n                              ],\n                              \"id\": 7554,\n                              \"isConstant\": false,\n                              \"isInlineArray\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"TupleExpression\",\n                              \"src\": \"3037:25:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"3031:31:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7545,\n                            \"name\": \"pxB\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7478,\n                            \"src\": \"3023:3:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 7546,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"3023:7:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7556,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3023:40:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"src\": \"3017:46:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 7558,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"3017:46:33\"\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint8\",\n                      \"typeString\": \"uint8\"\n                    },\n                    \"id\": 7562,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7560,\n                      \"name\": \"decimalsB\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7496,\n                      \"src\": \"3078:9:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint8\",\n                        \"typeString\": \"uint8\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3138\",\n                      \"id\": 7561,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"3090:2:33\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_18_by_1\",\n                        \"typeString\": \"int_const 18\"\n                      },\n                      \"value\": \"18\"\n                    },\n                    \"src\": \"3078:14:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 7578,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"3074:66:33\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7576,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftHandSide\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7563,\n                        \"name\": \"pxB\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7478,\n                        \"src\": \"3094:3:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"Assignment\",\n                      \"operator\": \"=\",\n                      \"rightHandSide\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 7574,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"3130\",\n                              \"id\": 7566,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"3108:2:33\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_10_by_1\",\n                                \"typeString\": \"int_const 10\"\n                              },\n                              \"value\": \"10\"\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"**\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"components\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"id\": 7572,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"leftExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"id\": 7569,\n                                        \"name\": \"decimalsB\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 7496,\n                                        \"src\": \"3123:9:33\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      ],\n                                      \"id\": 7568,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                                      \"src\": \"3115:7:33\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                        \"typeString\": \"type(uint256)\"\n                                      },\n                                      \"typeName\": {\n                                        \"id\": 7567,\n                                        \"name\": \"uint256\",\n                                        \"nodeType\": \"ElementaryTypeName\",\n                                        \"src\": \"3115:7:33\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": null,\n                                          \"typeString\": null\n                                        }\n                                      }\n                                    },\n                                    \"id\": 7570,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"typeConversion\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"3115:18:33\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"nodeType\": \"BinaryOperation\",\n                                  \"operator\": \"-\",\n                                  \"rightExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"hexValue\": \"3138\",\n                                    \"id\": 7571,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"kind\": \"number\",\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"Literal\",\n                                    \"src\": \"3136:2:33\",\n                                    \"subdenomination\": null,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_rational_18_by_1\",\n                                      \"typeString\": \"int_const 18\"\n                                    },\n                                    \"value\": \"18\"\n                                  },\n                                  \"src\": \"3115:23:33\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                }\n                              ],\n                              \"id\": 7573,\n                              \"isConstant\": false,\n                              \"isInlineArray\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"TupleExpression\",\n                              \"src\": \"3114:25:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"3108:31:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7564,\n                            \"name\": \"pxB\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7478,\n                            \"src\": \"3100:3:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 7565,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"div\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10862,\n                          \"src\": \"3100:7:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7575,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3100:40:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"src\": \"3094:46:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 7577,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"3094:46:33\"\n                  }\n                },\n                {\n                  \"assignments\": [7580, 7582],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7580,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"fairResA\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"3152:16:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7579,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3152:7:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    {\n                      \"constant\": false,\n                      \"id\": 7582,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"fairResB\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7620,\n                      \"src\": \"3170:16:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7581,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3170:7:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7603,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7586,\n                            \"name\": \"tokenA\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7456,\n                            \"src\": \"3240:6:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7584,\n                            \"name\": \"pool\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7432,\n                            \"src\": \"3224:4:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                              \"typeString\": \"contract IBalancerPool\"\n                            }\n                          },\n                          \"id\": 7585,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"getBalance\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5593,\n                          \"src\": \"3224:15:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                            \"typeString\": \"function (address) view external returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7587,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3224:23:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7590,\n                            \"name\": \"tokenB\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7462,\n                            \"src\": \"3278:6:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7588,\n                            \"name\": \"pool\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7432,\n                            \"src\": \"3262:4:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                              \"typeString\": \"contract IBalancerPool\"\n                            }\n                          },\n                          \"id\": 7589,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"getBalance\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5593,\n                          \"src\": \"3262:15:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                            \"typeString\": \"function (address) view external returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7591,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3262:23:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7594,\n                            \"name\": \"tokenA\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7456,\n                            \"src\": \"3325:6:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7592,\n                            \"name\": \"pool\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7432,\n                            \"src\": \"3300:4:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                              \"typeString\": \"contract IBalancerPool\"\n                            }\n                          },\n                          \"id\": 7593,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"getNormalizedWeight\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5576,\n                          \"src\": \"3300:24:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                            \"typeString\": \"function (address) view external returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7595,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3300:32:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7598,\n                            \"name\": \"tokenB\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7462,\n                            \"src\": \"3372:6:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7596,\n                            \"name\": \"pool\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7432,\n                            \"src\": \"3347:4:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                              \"typeString\": \"contract IBalancerPool\"\n                            }\n                          },\n                          \"id\": 7597,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"getNormalizedWeight\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5576,\n                          \"src\": \"3347:24:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                            \"typeString\": \"function (address) view external returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7599,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3347:32:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 7600,\n                        \"name\": \"pxA\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7468,\n                        \"src\": \"3394:3:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 7601,\n                        \"name\": \"pxB\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7478,\n                        \"src\": \"3412:3:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 7583,\n                      \"name\": \"computeFairReserves\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7722,\n                      \"src\": \"3190:19:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256)\"\n                      }\n                    },\n                    \"id\": 7602,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3190:236:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_uint256_$_t_uint256_$\",\n                      \"typeString\": \"tuple(uint256,uint256)\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3151:275:33\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7615,\n                            \"name\": \"pool\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7432,\n                            \"src\": \"3634:4:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_IBalancerPool_$5654\",\n                              \"typeString\": \"contract IBalancerPool\"\n                            }\n                          },\n                          \"id\": 7616,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"totalSupply\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5598,\n                          \"src\": \"3634:16:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                            \"typeString\": \"function () view external returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7617,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3634:18:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 7611,\n                                \"name\": \"pxB\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7478,\n                                \"src\": \"3624:3:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 7609,\n                                \"name\": \"fairResB\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7582,\n                                \"src\": \"3611:8:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"id\": 7610,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"mul\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 10845,\n                              \"src\": \"3611:12:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 7612,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3611:17:33\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 7606,\n                                \"name\": \"pxA\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7468,\n                                \"src\": \"3602:3:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 7604,\n                                \"name\": \"fairResA\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7580,\n                                \"src\": \"3589:8:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"id\": 7605,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"mul\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 10845,\n                              \"src\": \"3589:12:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 7607,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3589:17:33\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 7608,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"add\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10765,\n                          \"src\": \"3589:21:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7613,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3589:40:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 7614,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"3589:44:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 7618,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3589:64:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 7430,\n                  \"id\": 7619,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"3582:71:33\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 7424,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1995:220:33\",\n              \"text\": \" @dev Fetches the fair LP token/ETH price from Balancer, with 18 decimals of precision.\\n Source: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BalancerPairOracle.sol\"\n            },\n            \"id\": 7621,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 7427,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7426,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7621,\n                  \"src\": \"2237:18:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7425,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2237:7:33\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2236:20:33\"\n            },\n            \"returnParameters\": {\n              \"id\": 7430,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7429,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7621,\n                  \"src\": \"2288:4:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7428,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2288:4:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2287:6:33\"\n            },\n            \"scope\": 7723,\n            \"src\": \"2221:1440:33\",\n            \"stateMutability\": \"view\",\n            \"virtual\": true,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 7721,\n              \"nodeType\": \"Block\",\n              \"src\": \"4338:1088:33\",\n              \"statements\": [\n                {\n                  \"assignments\": [7642],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7642,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"r0\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7721,\n                      \"src\": \"4890:10:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7641,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4890:7:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7647,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 7644,\n                        \"name\": \"resA\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7624,\n                        \"src\": \"4908:4:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 7645,\n                        \"name\": \"resB\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7626,\n                        \"src\": \"4914:4:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 7643,\n                      \"name\": \"bdiv\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 5314,\n                      \"src\": \"4903:4:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 7646,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4903:16:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4890:29:33\"\n                },\n                {\n                  \"assignments\": [7649],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 7649,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"r1\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 7721,\n                      \"src\": \"4930:10:33\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 7648,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4930:7:33\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 7660,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7652,\n                            \"name\": \"wA\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7628,\n                            \"src\": \"4953:2:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7653,\n                            \"name\": \"pxB\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7634,\n                            \"src\": \"4957:3:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"id\": 7651,\n                          \"name\": \"bmul\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 5254,\n                          \"src\": \"4948:4:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7654,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"4948:13:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7656,\n                            \"name\": \"wB\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7630,\n                            \"src\": \"4968:2:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 7657,\n                            \"name\": \"pxA\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7632,\n                            \"src\": \"4972:3:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"id\": 7655,\n                          \"name\": \"bmul\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 5254,\n                          \"src\": \"4963:4:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 7658,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"4963:13:33\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 7650,\n                      \"name\": \"bdiv\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 5314,\n                      \"src\": \"4943:4:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 7659,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4943:34:33\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4930:47:33\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 7663,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7661,\n                      \"name\": \"r0\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7642,\n                      \"src\": \"5082:2:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7662,\n                      \"name\": \"r1\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7649,\n                      \"src\": \"5087:2:33\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"5082:7:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": {\n                    \"id\": 7719,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"5258:161:33\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [7693],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 7693,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"ratio\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 7719,\n                            \"src\": \"5273:13:33\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"typeName\": {\n                              \"id\": 7692,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"5273:7:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 7698,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 7695,\n                              \"name\": \"r0\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7642,\n                              \"src\": \"5294:2:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 7696,\n                              \"name\": \"r1\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7649,\n                              \"src\": \"5298:2:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            ],\n                            \"id\": 7694,\n                            \"name\": \"bdiv\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 5314,\n                            \"src\": \"5289:4:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                              \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                            }\n                          },\n                          \"id\": 7697,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"5289:12:33\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"5273:28:33\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 7707,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7699,\n                            \"name\": \"fairResA\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7637,\n                            \"src\": \"5316:8:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 7701,\n                                \"name\": \"resA\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7624,\n                                \"src\": \"5332:4:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 7703,\n                                    \"name\": \"ratio\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7693,\n                                    \"src\": \"5343:5:33\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 7704,\n                                    \"name\": \"wB\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7630,\n                                    \"src\": \"5350:2:33\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"id\": 7702,\n                                  \"name\": \"bpow\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 5437,\n                                  \"src\": \"5338:4:33\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                                    \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                  }\n                                },\n                                \"id\": 7705,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"5338:15:33\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"id\": 7700,\n                              \"name\": \"bdiv\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 5314,\n                              \"src\": \"5327:4:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 7706,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"5327:27:33\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"5316:38:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 7708,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"5316:38:33\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 7717,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7709,\n                            \"name\": \"fairResB\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7639,\n                            \"src\": \"5369:8:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 7711,\n                                \"name\": \"resB\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7626,\n                                \"src\": \"5385:4:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 7713,\n                                    \"name\": \"ratio\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7693,\n                                    \"src\": \"5396:5:33\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 7714,\n                                    \"name\": \"wA\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7628,\n                                    \"src\": \"5403:2:33\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"id\": 7712,\n                                  \"name\": \"bpow\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 5437,\n                                  \"src\": \"5391:4:33\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                                    \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                  }\n                                },\n                                \"id\": 7715,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"5391:15:33\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"id\": 7710,\n                              \"name\": \"bmul\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 5254,\n                              \"src\": \"5380:4:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 7716,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"5380:27:33\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"5369:38:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 7718,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"5369:38:33\"\n                      }\n                    ]\n                  },\n                  \"id\": 7720,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"5078:341:33\",\n                  \"trueBody\": {\n                    \"id\": 7691,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"5091:161:33\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [7665],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 7665,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"ratio\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 7691,\n                            \"src\": \"5106:13:33\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"typeName\": {\n                              \"id\": 7664,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"5106:7:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 7670,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 7667,\n                              \"name\": \"r1\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7649,\n                              \"src\": \"5127:2:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 7668,\n                              \"name\": \"r0\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7642,\n                              \"src\": \"5131:2:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            ],\n                            \"id\": 7666,\n                            \"name\": \"bdiv\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 5314,\n                            \"src\": \"5122:4:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                              \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                            }\n                          },\n                          \"id\": 7669,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"5122:12:33\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"5106:28:33\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 7679,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7671,\n                            \"name\": \"fairResA\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7637,\n                            \"src\": \"5149:8:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 7673,\n                                \"name\": \"resA\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7624,\n                                \"src\": \"5165:4:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 7675,\n                                    \"name\": \"ratio\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7665,\n                                    \"src\": \"5176:5:33\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 7676,\n                                    \"name\": \"wB\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7630,\n                                    \"src\": \"5183:2:33\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"id\": 7674,\n                                  \"name\": \"bpow\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 5437,\n                                  \"src\": \"5171:4:33\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                                    \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                  }\n                                },\n                                \"id\": 7677,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"5171:15:33\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"id\": 7672,\n                              \"name\": \"bmul\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 5254,\n                              \"src\": \"5160:4:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 7678,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"5160:27:33\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"5149:38:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 7680,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"5149:38:33\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 7689,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 7681,\n                            \"name\": \"fairResB\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7639,\n                            \"src\": \"5202:8:33\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 7683,\n                                \"name\": \"resB\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7626,\n                                \"src\": \"5218:4:33\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 7685,\n                                    \"name\": \"ratio\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7665,\n                                    \"src\": \"5229:5:33\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 7686,\n                                    \"name\": \"wA\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7628,\n                                    \"src\": \"5236:2:33\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"id\": 7684,\n                                  \"name\": \"bpow\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 5437,\n                                  \"src\": \"5224:4:33\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                                    \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                  }\n                                },\n                                \"id\": 7687,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"5224:15:33\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"id\": 7682,\n                              \"name\": \"bdiv\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 5314,\n                              \"src\": \"5213:4:33\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 7688,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"5213:27:33\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"5202:38:33\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 7690,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"5202:38:33\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 7622,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"3669:497:33\",\n              \"text\": \" @dev Returns fair reserve amounts given spot reserves, weights, and fair prices.\\n Source: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BalancerPairOracle.sol\\n @param resA Reserve of the first asset\\n @param resB Reserev of the second asset\\n @param wA Weight of the first asset\\n @param wB Weight of the second asset\\n @param pxA Fair price of the first asset\\n @param pxB Fair price of the second asset\"\n            },\n            \"id\": 7722,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"computeFairReserves\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 7635,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7624,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"resA\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7722,\n                  \"src\": \"4201:12:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7623,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4201:7:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 7626,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"resB\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7722,\n                  \"src\": \"4215:12:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7625,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4215:7:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 7628,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"wA\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7722,\n                  \"src\": \"4229:10:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7627,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4229:7:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 7630,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"wB\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7722,\n                  \"src\": \"4241:10:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7629,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4241:7:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 7632,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"pxA\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7722,\n                  \"src\": \"4253:11:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7631,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4253:7:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 7634,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"pxB\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7722,\n                  \"src\": \"4266:11:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7633,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4266:7:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4200:78:33\"\n            },\n            \"returnParameters\": {\n              \"id\": 7640,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7637,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"fairResA\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7722,\n                  \"src\": \"4302:16:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7636,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4302:7:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 7639,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"fairResB\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 7722,\n                  \"src\": \"4320:16:33\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7638,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4320:7:33\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4301:36:33\"\n            },\n            \"scope\": 7723,\n            \"src\": \"4172:1254:33\",\n            \"stateMutability\": \"pure\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 7724,\n        \"src\": \"741:4688:33\"\n      }\n    ],\n    \"src\": \"0:5429:33\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BalancerLpTokenPriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"BalancerLpTokenPriceOracle\": [7723]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 7354,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"0:23:33\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 10933,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 7724,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7355,\n        \"name\": \"ImportDirective\",\n        \"src\": \"27:74:33\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 11534,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"scope\": 7724,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7356,\n        \"name\": \"ImportDirective\",\n        \"src\": \"103:78:33\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 7724,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7357,\n        \"name\": \"ImportDirective\",\n        \"src\": \"185:46:33\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5867,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n          \"file\": \"../external/compound/CToken.sol\",\n          \"scope\": 7724,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7358,\n        \"name\": \"ImportDirective\",\n        \"src\": \"233:41:33\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 7724,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7359,\n        \"name\": \"ImportDirective\",\n        \"src\": \"276:41:33\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5655,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/balancer/IBalancerPool.sol\",\n          \"file\": \"../external/balancer/IBalancerPool.sol\",\n          \"scope\": 7724,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7360,\n        \"name\": \"ImportDirective\",\n        \"src\": \"321:48:33\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5562,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/balancer/BNum.sol\",\n          \"file\": \"../external/balancer/BNum.sol\",\n          \"scope\": 7724,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7361,\n        \"name\": \"ImportDirective\",\n        \"src\": \"371:39:33\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 7739,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n          \"file\": \"./BasePriceOracle.sol\",\n          \"scope\": 7724,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7362,\n        \"name\": \"ImportDirective\",\n        \"src\": \"414:31:33\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [5088, 5561, 6023],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [7723, 5561, 5088, 6023],\n          \"name\": \"BalancerLpTokenPriceOracle\",\n          \"scope\": 7724\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title BalancerLpTokenPriceOracle\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\n @notice BalancerLpTokenPriceOracle is a price oracle for Balancer LP tokens.\\n @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\"\n            },\n            \"id\": 7363,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"449:290:33\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 7364,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"780:11:33\"\n              }\n            ],\n            \"id\": 7365,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"780:11:33\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"BNum\",\n                  \"referencedDeclaration\": 5561,\n                  \"type\": \"contract BNum\"\n                },\n                \"id\": 7366,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"793:4:33\"\n              }\n            ],\n            \"id\": 7367,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"793:4:33\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 10932,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 7368,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"811:19:33\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 7369,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"835:7:33\"\n              }\n            ],\n            \"id\": 7370,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"805:38:33\"\n          },\n          {\n            \"attributes\": {\n              \"functionSelector\": \"aea91078\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"price\",\n              \"overrides\": null,\n              \"scope\": 7723,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Get the LP token price price for an underlying token address.\\n @param underlying The underlying token address for which to get the price (set to zero address for ETH).\\n @return Price denominated in ETH (scaled by 1e18).\"\n                },\n                \"id\": 7371,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"851:262:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"overrides\": null,\n                      \"scope\": 7383,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 7372,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1134:7:33\"\n                      }\n                    ],\n                    \"id\": 7373,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1134:18:33\"\n                  }\n                ],\n                \"id\": 7374,\n                \"name\": \"ParameterList\",\n                \"src\": \"1133:20:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 7383,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7375,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1177:4:33\"\n                      }\n                    ],\n                    \"id\": 7376,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1177:4:33\"\n                  }\n                ],\n                \"id\": 7377,\n                \"name\": \"ParameterList\",\n                \"src\": \"1176:6:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 7377\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7621,\n                              \"type\": \"function (address) view returns (uint256)\",\n                              \"value\": \"_price\"\n                            },\n                            \"id\": 7378,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1201:6:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7373,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 7379,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1208:10:33\"\n                          }\n                        ],\n                        \"id\": 7380,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1201:18:33\"\n                      }\n                    ],\n                    \"id\": 7381,\n                    \"name\": \"Return\",\n                    \"src\": \"1194:25:33\"\n                  }\n                ],\n                \"id\": 7382,\n                \"name\": \"Block\",\n                \"src\": \"1183:44:33\"\n              }\n            ],\n            \"id\": 7383,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1119:108:33\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 7723,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Get the underlying price of a cToken.\\n @dev Implements the PriceOracle interface for Fuse pools (and Compound v2).\\n @param cToken The cToken address for price retrieval.\\n @return Price denominated in ETH, with 18 decimals, for the given cToken address.\"\n                },\n                \"id\": 7384,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1235:302:33\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 7388,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"1595:8:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 7423,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 7385,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"1571:6:33\"\n                      }\n                    ],\n                    \"id\": 7386,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1571:13:33\"\n                  }\n                ],\n                \"id\": 7387,\n                \"name\": \"ParameterList\",\n                \"src\": \"1570:15:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 7423,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7389,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1618:4:33\"\n                      }\n                    ],\n                    \"id\": 7390,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1618:4:33\"\n                  }\n                ],\n                \"id\": 7391,\n                \"name\": \"ParameterList\",\n                \"src\": \"1617:6:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7393]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlying\",\n                          \"overrides\": null,\n                          \"scope\": 7422,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 7392,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1635:7:33\"\n                          }\n                        ],\n                        \"id\": 7393,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1635:18:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"underlying\",\n                              \"referencedDeclaration\": 5711,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract CErc20\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 5723,\n                                      \"type\": \"type(contract CErc20)\",\n                                      \"value\": \"CErc20\"\n                                    },\n                                    \"id\": 7394,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"1656:6:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                              \"typeString\": \"contract CToken\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 7395,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"1663:7:33\"\n                                          }\n                                        ],\n                                        \"id\": 7396,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"1663:7:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7386,\n                                          \"type\": \"contract CToken\",\n                                          \"value\": \"cToken\"\n                                        },\n                                        \"id\": 7397,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1671:6:33\"\n                                      }\n                                    ],\n                                    \"id\": 7398,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1663:15:33\"\n                                  }\n                                ],\n                                \"id\": 7399,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1656:23:33\"\n                              }\n                            ],\n                            \"id\": 7400,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1656:34:33\"\n                          }\n                        ],\n                        \"id\": 7401,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1656:36:33\"\n                      }\n                    ],\n                    \"id\": 7402,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1635:57:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 7391\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                          \"typeString\": \"int_const 1000000000000000000\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_address\",\n                                                  \"typeString\": \"address\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7621,\n                                              \"type\": \"function (address) view returns (uint256)\",\n                                              \"value\": \"_price\"\n                                            },\n                                            \"id\": 7403,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1891:6:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7393,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 7404,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1898:10:33\"\n                                          }\n                                        ],\n                                        \"id\": 7405,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1891:18:33\"\n                                      }\n                                    ],\n                                    \"id\": 7406,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1891:22:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"31653138\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 1000000000000000000\",\n                                      \"value\": \"1e18\"\n                                    },\n                                    \"id\": 7407,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"1914:4:33\"\n                                  }\n                                ],\n                                \"id\": 7408,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1891:28:33\"\n                              }\n                            ],\n                            \"id\": 7409,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1891:32:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"**\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"3130\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 10\",\n                                  \"value\": \"10\"\n                                },\n                                \"id\": 7410,\n                                \"name\": \"Literal\",\n                                \"src\": \"1924:2:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"uint256\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 7411,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"1930:7:33\"\n                                      }\n                                    ],\n                                    \"id\": 7412,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"1930:7:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint8\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"decimals\",\n                                          \"referencedDeclaration\": 11105,\n                                          \"type\": \"function () view external returns (uint8)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"contract ERC20Upgradeable\",\n                                              \"type_conversion\": true\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_address\",\n                                                      \"typeString\": \"address\"\n                                                    }\n                                                  ],\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 11533,\n                                                  \"type\": \"type(contract ERC20Upgradeable)\",\n                                                  \"value\": \"ERC20Upgradeable\"\n                                                },\n                                                \"id\": 7413,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1938:16:33\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 7393,\n                                                  \"type\": \"address\",\n                                                  \"value\": \"underlying\"\n                                                },\n                                                \"id\": 7414,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1955:10:33\"\n                                              }\n                                            ],\n                                            \"id\": 7415,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"1938:28:33\"\n                                          }\n                                        ],\n                                        \"id\": 7416,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"1938:37:33\"\n                                      }\n                                    ],\n                                    \"id\": 7417,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1938:39:33\"\n                                  }\n                                ],\n                                \"id\": 7418,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1930:48:33\"\n                              }\n                            ],\n                            \"id\": 7419,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"1924:54:33\"\n                          }\n                        ],\n                        \"id\": 7420,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1891:88:33\"\n                      }\n                    ],\n                    \"id\": 7421,\n                    \"name\": \"Return\",\n                    \"src\": \"1884:95:33\"\n                  }\n                ],\n                \"id\": 7422,\n                \"name\": \"Block\",\n                \"src\": \"1624:363:33\"\n              }\n            ],\n            \"id\": 7423,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1543:444:33\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"_price\",\n              \"overrides\": null,\n              \"scope\": 7723,\n              \"stateMutability\": \"view\",\n              \"virtual\": true,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Fetches the fair LP token/ETH price from Balancer, with 18 decimals of precision.\\n Source: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BalancerPairOracle.sol\"\n                },\n                \"id\": 7424,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1995:220:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"overrides\": null,\n                      \"scope\": 7621,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 7425,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2237:7:33\"\n                      }\n                    ],\n                    \"id\": 7426,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2237:18:33\"\n                  }\n                ],\n                \"id\": 7427,\n                \"name\": \"ParameterList\",\n                \"src\": \"2236:20:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 7621,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7428,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2288:4:33\"\n                      }\n                    ],\n                    \"id\": 7429,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2288:4:33\"\n                  }\n                ],\n                \"id\": 7430,\n                \"name\": \"ParameterList\",\n                \"src\": \"2287:6:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7432]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"pool\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"contract IBalancerPool\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"contractScope\": null,\n                              \"name\": \"IBalancerPool\",\n                              \"referencedDeclaration\": 5654,\n                              \"type\": \"contract IBalancerPool\"\n                            },\n                            \"id\": 7431,\n                            \"name\": \"UserDefinedTypeName\",\n                            \"src\": \"2305:13:33\"\n                          }\n                        ],\n                        \"id\": 7432,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2305:18:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"contract IBalancerPool\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 5654,\n                              \"type\": \"type(contract IBalancerPool)\",\n                              \"value\": \"IBalancerPool\"\n                            },\n                            \"id\": 7433,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2326:13:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7426,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 7434,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2340:10:33\"\n                          }\n                        ],\n                        \"id\": 7435,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2326:25:33\"\n                      }\n                    ],\n                    \"id\": 7436,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2305:46:33\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_89d97c93ae08e67c9394bc95331d06e4c60ff5393da7ca2984f59705af7fde4e\",\n                                  \"typeString\": \"literal_string \\\"Balancer pool must have exactly 2 tokens.\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 7437,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2362:7:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"==\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"getNumTokens\",\n                                      \"referencedDeclaration\": 5586,\n                                      \"type\": \"function () view external returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7432,\n                                          \"type\": \"contract IBalancerPool\",\n                                          \"value\": \"pool\"\n                                        },\n                                        \"id\": 7438,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2370:4:33\"\n                                      }\n                                    ],\n                                    \"id\": 7439,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2370:17:33\"\n                                  }\n                                ],\n                                \"id\": 7440,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2370:19:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"32\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 2\",\n                                  \"value\": \"2\"\n                                },\n                                \"id\": 7441,\n                                \"name\": \"Literal\",\n                                \"src\": \"2393:1:33\"\n                              }\n                            ],\n                            \"id\": 7442,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"2370:24:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"42616c616e63657220706f6f6c206d75737420686176652065786163746c79203220746f6b656e732e\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"Balancer pool must have exactly 2 tokens.\\\"\",\n                              \"value\": \"Balancer pool must have exactly 2 tokens.\"\n                            },\n                            \"id\": 7443,\n                            \"name\": \"Literal\",\n                            \"src\": \"2396:43:33\"\n                          }\n                        ],\n                        \"id\": 7444,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2362:78:33\"\n                      }\n                    ],\n                    \"id\": 7445,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2362:78:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7450]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"tokens\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"memory\",\n                          \"type\": \"address[]\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"length\": null,\n                              \"type\": \"address[]\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"address\",\n                                  \"type\": \"address\"\n                                },\n                                \"id\": 7448,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"2451:7:33\"\n                              }\n                            ],\n                            \"id\": 7449,\n                            \"name\": \"ArrayTypeName\",\n                            \"src\": \"2451:9:33\"\n                          }\n                        ],\n                        \"id\": 7450,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2451:23:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address[] memory\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"getFinalTokens\",\n                              \"referencedDeclaration\": 5569,\n                              \"type\": \"function () view external returns (address[] memory)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7432,\n                                  \"type\": \"contract IBalancerPool\",\n                                  \"value\": \"pool\"\n                                },\n                                \"id\": 7451,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2477:4:33\"\n                              }\n                            ],\n                            \"id\": 7452,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2477:19:33\"\n                          }\n                        ],\n                        \"id\": 7453,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2477:21:33\"\n                      }\n                    ],\n                    \"id\": 7454,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2451:47:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7456]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"tokenA\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 7455,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2509:7:33\"\n                          }\n                        ],\n                        \"id\": 7456,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2509:14:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"address\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7450,\n                              \"type\": \"address[] memory\",\n                              \"value\": \"tokens\"\n                            },\n                            \"id\": 7457,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2526:6:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 0\",\n                              \"value\": \"0\"\n                            },\n                            \"id\": 7458,\n                            \"name\": \"Literal\",\n                            \"src\": \"2533:1:33\"\n                          }\n                        ],\n                        \"id\": 7459,\n                        \"name\": \"IndexAccess\",\n                        \"src\": \"2526:9:33\"\n                      }\n                    ],\n                    \"id\": 7460,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2509:26:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7462]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"tokenB\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 7461,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2546:7:33\"\n                          }\n                        ],\n                        \"id\": 7462,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2546:14:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"address\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7450,\n                              \"type\": \"address[] memory\",\n                              \"value\": \"tokens\"\n                            },\n                            \"id\": 7463,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2563:6:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1\",\n                              \"value\": \"1\"\n                            },\n                            \"id\": 7464,\n                            \"name\": \"Literal\",\n                            \"src\": \"2570:1:33\"\n                          }\n                        ],\n                        \"id\": 7465,\n                        \"name\": \"IndexAccess\",\n                        \"src\": \"2563:9:33\"\n                      }\n                    ],\n                    \"id\": 7466,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2546:26:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7468]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"pxA\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 7467,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2583:7:33\"\n                          }\n                        ],\n                        \"id\": 7468,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2583:11:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"price\",\n                              \"referencedDeclaration\": 7737,\n                              \"type\": \"function (address) view external returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract BasePriceOracle\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address_payable\",\n                                          \"typeString\": \"address payable\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7738,\n                                      \"type\": \"type(contract BasePriceOracle)\",\n                                      \"value\": \"BasePriceOracle\"\n                                    },\n                                    \"id\": 7469,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2597:15:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"sender\",\n                                      \"referencedDeclaration\": null,\n                                      \"type\": \"address payable\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": -15,\n                                          \"type\": \"msg\",\n                                          \"value\": \"msg\"\n                                        },\n                                        \"id\": 7470,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2613:3:33\"\n                                      }\n                                    ],\n                                    \"id\": 7471,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2613:10:33\"\n                                  }\n                                ],\n                                \"id\": 7472,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2597:27:33\"\n                              }\n                            ],\n                            \"id\": 7473,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2597:33:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7456,\n                              \"type\": \"address\",\n                              \"value\": \"tokenA\"\n                            },\n                            \"id\": 7474,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2631:6:33\"\n                          }\n                        ],\n                        \"id\": 7475,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2597:41:33\"\n                      }\n                    ],\n                    \"id\": 7476,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2583:55:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7478]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"pxB\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 7477,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2649:7:33\"\n                          }\n                        ],\n                        \"id\": 7478,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2649:11:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"price\",\n                              \"referencedDeclaration\": 7737,\n                              \"type\": \"function (address) view external returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract BasePriceOracle\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address_payable\",\n                                          \"typeString\": \"address payable\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7738,\n                                      \"type\": \"type(contract BasePriceOracle)\",\n                                      \"value\": \"BasePriceOracle\"\n                                    },\n                                    \"id\": 7479,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2663:15:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"sender\",\n                                      \"referencedDeclaration\": null,\n                                      \"type\": \"address payable\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": -15,\n                                          \"type\": \"msg\",\n                                          \"value\": \"msg\"\n                                        },\n                                        \"id\": 7480,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2679:3:33\"\n                                      }\n                                    ],\n                                    \"id\": 7481,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2679:10:33\"\n                                  }\n                                ],\n                                \"id\": 7482,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2663:27:33\"\n                              }\n                            ],\n                            \"id\": 7483,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2663:33:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7462,\n                              \"type\": \"address\",\n                              \"value\": \"tokenB\"\n                            },\n                            \"id\": 7484,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2697:6:33\"\n                          }\n                        ],\n                        \"id\": 7485,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2663:41:33\"\n                      }\n                    ],\n                    \"id\": 7486,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2649:55:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7488]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"decimalsA\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint8\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint8\",\n                              \"type\": \"uint8\"\n                            },\n                            \"id\": 7487,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2715:5:33\"\n                          }\n                        ],\n                        \"id\": 7488,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2715:15:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint8\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"decimals\",\n                              \"referencedDeclaration\": 11105,\n                              \"type\": \"function () view external returns (uint8)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract ERC20Upgradeable\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 11533,\n                                      \"type\": \"type(contract ERC20Upgradeable)\",\n                                      \"value\": \"ERC20Upgradeable\"\n                                    },\n                                    \"id\": 7489,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2733:16:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7456,\n                                      \"type\": \"address\",\n                                      \"value\": \"tokenA\"\n                                    },\n                                    \"id\": 7490,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2750:6:33\"\n                                  }\n                                ],\n                                \"id\": 7491,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2733:24:33\"\n                              }\n                            ],\n                            \"id\": 7492,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2733:33:33\"\n                          }\n                        ],\n                        \"id\": 7493,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2733:35:33\"\n                      }\n                    ],\n                    \"id\": 7494,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2715:53:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7496]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"decimalsB\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint8\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint8\",\n                              \"type\": \"uint8\"\n                            },\n                            \"id\": 7495,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2779:5:33\"\n                          }\n                        ],\n                        \"id\": 7496,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2779:15:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint8\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"decimals\",\n                              \"referencedDeclaration\": 11105,\n                              \"type\": \"function () view external returns (uint8)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract ERC20Upgradeable\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 11533,\n                                      \"type\": \"type(contract ERC20Upgradeable)\",\n                                      \"value\": \"ERC20Upgradeable\"\n                                    },\n                                    \"id\": 7497,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2797:16:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7462,\n                                      \"type\": \"address\",\n                                      \"value\": \"tokenB\"\n                                    },\n                                    \"id\": 7498,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2814:6:33\"\n                                  }\n                                ],\n                                \"id\": 7499,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2797:24:33\"\n                              }\n                            ],\n                            \"id\": 7500,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2797:33:33\"\n                          }\n                        ],\n                        \"id\": 7501,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2797:35:33\"\n                      }\n                    ],\n                    \"id\": 7502,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2779:53:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"<\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7488,\n                              \"type\": \"uint8\",\n                              \"value\": \"decimalsA\"\n                            },\n                            \"id\": 7503,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2847:9:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 18\",\n                              \"value\": \"18\"\n                            },\n                            \"id\": 7504,\n                            \"name\": \"Literal\",\n                            \"src\": \"2859:2:33\"\n                          }\n                        ],\n                        \"id\": 7505,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"2847:14:33\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"=\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7468,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"pxA\"\n                                },\n                                \"id\": 7506,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2863:3:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7468,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"pxA\"\n                                        },\n                                        \"id\": 7507,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2869:3:33\"\n                                      }\n                                    ],\n                                    \"id\": 7508,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2869:7:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"**\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"3130\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 10\",\n                                          \"value\": \"10\"\n                                        },\n                                        \"id\": 7509,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"2877:2:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isInlineArray\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"-\",\n                                              \"type\": \"uint256\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"3138\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 18\",\n                                                  \"value\": \"18\"\n                                                },\n                                                \"id\": 7510,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"2884:2:33\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"uint256\",\n                                                  \"type_conversion\": true\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [\n                                                        {\n                                                          \"typeIdentifier\": \"t_uint8\",\n                                                          \"typeString\": \"uint8\"\n                                                        }\n                                                      ],\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": true,\n                                                      \"lValueRequested\": false,\n                                                      \"type\": \"type(uint256)\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"name\": \"uint256\",\n                                                          \"type\": null\n                                                        },\n                                                        \"id\": 7511,\n                                                        \"name\": \"ElementaryTypeName\",\n                                                        \"src\": \"2889:7:33\"\n                                                      }\n                                                    ],\n                                                    \"id\": 7512,\n                                                    \"name\": \"ElementaryTypeNameExpression\",\n                                                    \"src\": \"2889:7:33\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 7488,\n                                                      \"type\": \"uint8\",\n                                                      \"value\": \"decimalsA\"\n                                                    },\n                                                    \"id\": 7513,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"2897:9:33\"\n                                                  }\n                                                ],\n                                                \"id\": 7514,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"2889:18:33\"\n                                              }\n                                            ],\n                                            \"id\": 7515,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"2884:23:33\"\n                                          }\n                                        ],\n                                        \"id\": 7516,\n                                        \"name\": \"TupleExpression\",\n                                        \"src\": \"2883:25:33\"\n                                      }\n                                    ],\n                                    \"id\": 7517,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"2877:31:33\"\n                                  }\n                                ],\n                                \"id\": 7518,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2869:40:33\"\n                              }\n                            ],\n                            \"id\": 7519,\n                            \"name\": \"Assignment\",\n                            \"src\": \"2863:46:33\"\n                          }\n                        ],\n                        \"id\": 7520,\n                        \"name\": \"ExpressionStatement\",\n                        \"src\": \"2863:46:33\"\n                      }\n                    ],\n                    \"id\": 7521,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"2843:66:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7488,\n                              \"type\": \"uint8\",\n                              \"value\": \"decimalsA\"\n                            },\n                            \"id\": 7522,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2924:9:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 18\",\n                              \"value\": \"18\"\n                            },\n                            \"id\": 7523,\n                            \"name\": \"Literal\",\n                            \"src\": \"2936:2:33\"\n                          }\n                        ],\n                        \"id\": 7524,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"2924:14:33\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"=\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7468,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"pxA\"\n                                },\n                                \"id\": 7525,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2940:3:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"div\",\n                                      \"referencedDeclaration\": 10862,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7468,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"pxA\"\n                                        },\n                                        \"id\": 7526,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2946:3:33\"\n                                      }\n                                    ],\n                                    \"id\": 7527,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2946:7:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"**\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"3130\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 10\",\n                                          \"value\": \"10\"\n                                        },\n                                        \"id\": 7528,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"2954:2:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isInlineArray\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"-\",\n                                              \"type\": \"uint256\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"uint256\",\n                                                  \"type_conversion\": true\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [\n                                                        {\n                                                          \"typeIdentifier\": \"t_uint8\",\n                                                          \"typeString\": \"uint8\"\n                                                        }\n                                                      ],\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": true,\n                                                      \"lValueRequested\": false,\n                                                      \"type\": \"type(uint256)\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"name\": \"uint256\",\n                                                          \"type\": null\n                                                        },\n                                                        \"id\": 7529,\n                                                        \"name\": \"ElementaryTypeName\",\n                                                        \"src\": \"2961:7:33\"\n                                                      }\n                                                    ],\n                                                    \"id\": 7530,\n                                                    \"name\": \"ElementaryTypeNameExpression\",\n                                                    \"src\": \"2961:7:33\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 7488,\n                                                      \"type\": \"uint8\",\n                                                      \"value\": \"decimalsA\"\n                                                    },\n                                                    \"id\": 7531,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"2969:9:33\"\n                                                  }\n                                                ],\n                                                \"id\": 7532,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"2961:18:33\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"3138\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 18\",\n                                                  \"value\": \"18\"\n                                                },\n                                                \"id\": 7533,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"2982:2:33\"\n                                              }\n                                            ],\n                                            \"id\": 7534,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"2961:23:33\"\n                                          }\n                                        ],\n                                        \"id\": 7535,\n                                        \"name\": \"TupleExpression\",\n                                        \"src\": \"2960:25:33\"\n                                      }\n                                    ],\n                                    \"id\": 7536,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"2954:31:33\"\n                                  }\n                                ],\n                                \"id\": 7537,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2946:40:33\"\n                              }\n                            ],\n                            \"id\": 7538,\n                            \"name\": \"Assignment\",\n                            \"src\": \"2940:46:33\"\n                          }\n                        ],\n                        \"id\": 7539,\n                        \"name\": \"ExpressionStatement\",\n                        \"src\": \"2940:46:33\"\n                      }\n                    ],\n                    \"id\": 7540,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"2920:66:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"<\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7496,\n                              \"type\": \"uint8\",\n                              \"value\": \"decimalsB\"\n                            },\n                            \"id\": 7541,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3001:9:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 18\",\n                              \"value\": \"18\"\n                            },\n                            \"id\": 7542,\n                            \"name\": \"Literal\",\n                            \"src\": \"3013:2:33\"\n                          }\n                        ],\n                        \"id\": 7543,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"3001:14:33\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"=\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7478,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"pxB\"\n                                },\n                                \"id\": 7544,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3017:3:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7478,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"pxB\"\n                                        },\n                                        \"id\": 7545,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3023:3:33\"\n                                      }\n                                    ],\n                                    \"id\": 7546,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"3023:7:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"**\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"3130\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 10\",\n                                          \"value\": \"10\"\n                                        },\n                                        \"id\": 7547,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"3031:2:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isInlineArray\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"-\",\n                                              \"type\": \"uint256\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"3138\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 18\",\n                                                  \"value\": \"18\"\n                                                },\n                                                \"id\": 7548,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"3038:2:33\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"uint256\",\n                                                  \"type_conversion\": true\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [\n                                                        {\n                                                          \"typeIdentifier\": \"t_uint8\",\n                                                          \"typeString\": \"uint8\"\n                                                        }\n                                                      ],\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": true,\n                                                      \"lValueRequested\": false,\n                                                      \"type\": \"type(uint256)\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"name\": \"uint256\",\n                                                          \"type\": null\n                                                        },\n                                                        \"id\": 7549,\n                                                        \"name\": \"ElementaryTypeName\",\n                                                        \"src\": \"3043:7:33\"\n                                                      }\n                                                    ],\n                                                    \"id\": 7550,\n                                                    \"name\": \"ElementaryTypeNameExpression\",\n                                                    \"src\": \"3043:7:33\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 7496,\n                                                      \"type\": \"uint8\",\n                                                      \"value\": \"decimalsB\"\n                                                    },\n                                                    \"id\": 7551,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"3051:9:33\"\n                                                  }\n                                                ],\n                                                \"id\": 7552,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"3043:18:33\"\n                                              }\n                                            ],\n                                            \"id\": 7553,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"3038:23:33\"\n                                          }\n                                        ],\n                                        \"id\": 7554,\n                                        \"name\": \"TupleExpression\",\n                                        \"src\": \"3037:25:33\"\n                                      }\n                                    ],\n                                    \"id\": 7555,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"3031:31:33\"\n                                  }\n                                ],\n                                \"id\": 7556,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3023:40:33\"\n                              }\n                            ],\n                            \"id\": 7557,\n                            \"name\": \"Assignment\",\n                            \"src\": \"3017:46:33\"\n                          }\n                        ],\n                        \"id\": 7558,\n                        \"name\": \"ExpressionStatement\",\n                        \"src\": \"3017:46:33\"\n                      }\n                    ],\n                    \"id\": 7559,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"2997:66:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7496,\n                              \"type\": \"uint8\",\n                              \"value\": \"decimalsB\"\n                            },\n                            \"id\": 7560,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3078:9:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 18\",\n                              \"value\": \"18\"\n                            },\n                            \"id\": 7561,\n                            \"name\": \"Literal\",\n                            \"src\": \"3090:2:33\"\n                          }\n                        ],\n                        \"id\": 7562,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"3078:14:33\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"=\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7478,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"pxB\"\n                                },\n                                \"id\": 7563,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3094:3:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"div\",\n                                      \"referencedDeclaration\": 10862,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7478,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"pxB\"\n                                        },\n                                        \"id\": 7564,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3100:3:33\"\n                                      }\n                                    ],\n                                    \"id\": 7565,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"3100:7:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"**\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"3130\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 10\",\n                                          \"value\": \"10\"\n                                        },\n                                        \"id\": 7566,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"3108:2:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isInlineArray\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"-\",\n                                              \"type\": \"uint256\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"uint256\",\n                                                  \"type_conversion\": true\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [\n                                                        {\n                                                          \"typeIdentifier\": \"t_uint8\",\n                                                          \"typeString\": \"uint8\"\n                                                        }\n                                                      ],\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": true,\n                                                      \"lValueRequested\": false,\n                                                      \"type\": \"type(uint256)\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"name\": \"uint256\",\n                                                          \"type\": null\n                                                        },\n                                                        \"id\": 7567,\n                                                        \"name\": \"ElementaryTypeName\",\n                                                        \"src\": \"3115:7:33\"\n                                                      }\n                                                    ],\n                                                    \"id\": 7568,\n                                                    \"name\": \"ElementaryTypeNameExpression\",\n                                                    \"src\": \"3115:7:33\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 7496,\n                                                      \"type\": \"uint8\",\n                                                      \"value\": \"decimalsB\"\n                                                    },\n                                                    \"id\": 7569,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"3123:9:33\"\n                                                  }\n                                                ],\n                                                \"id\": 7570,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"3115:18:33\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"3138\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 18\",\n                                                  \"value\": \"18\"\n                                                },\n                                                \"id\": 7571,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"3136:2:33\"\n                                              }\n                                            ],\n                                            \"id\": 7572,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"3115:23:33\"\n                                          }\n                                        ],\n                                        \"id\": 7573,\n                                        \"name\": \"TupleExpression\",\n                                        \"src\": \"3114:25:33\"\n                                      }\n                                    ],\n                                    \"id\": 7574,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"3108:31:33\"\n                                  }\n                                ],\n                                \"id\": 7575,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3100:40:33\"\n                              }\n                            ],\n                            \"id\": 7576,\n                            \"name\": \"Assignment\",\n                            \"src\": \"3094:46:33\"\n                          }\n                        ],\n                        \"id\": 7577,\n                        \"name\": \"ExpressionStatement\",\n                        \"src\": \"3094:46:33\"\n                      }\n                    ],\n                    \"id\": 7578,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"3074:66:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7580, 7582]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"fairResA\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 7579,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3152:7:33\"\n                          }\n                        ],\n                        \"id\": 7580,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3152:16:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"fairResB\",\n                          \"overrides\": null,\n                          \"scope\": 7620,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 7581,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3170:7:33\"\n                          }\n                        ],\n                        \"id\": 7582,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3170:16:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple(uint256,uint256)\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7722,\n                              \"type\": \"function (uint256,uint256,uint256,uint256,uint256,uint256) pure returns (uint256,uint256)\",\n                              \"value\": \"computeFairReserves\"\n                            },\n                            \"id\": 7583,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3190:19:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"getBalance\",\n                                  \"referencedDeclaration\": 5593,\n                                  \"type\": \"function (address) view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7432,\n                                      \"type\": \"contract IBalancerPool\",\n                                      \"value\": \"pool\"\n                                    },\n                                    \"id\": 7584,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3224:4:33\"\n                                  }\n                                ],\n                                \"id\": 7585,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"3224:15:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7456,\n                                  \"type\": \"address\",\n                                  \"value\": \"tokenA\"\n                                },\n                                \"id\": 7586,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3240:6:33\"\n                              }\n                            ],\n                            \"id\": 7587,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3224:23:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"getBalance\",\n                                  \"referencedDeclaration\": 5593,\n                                  \"type\": \"function (address) view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7432,\n                                      \"type\": \"contract IBalancerPool\",\n                                      \"value\": \"pool\"\n                                    },\n                                    \"id\": 7588,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3262:4:33\"\n                                  }\n                                ],\n                                \"id\": 7589,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"3262:15:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7462,\n                                  \"type\": \"address\",\n                                  \"value\": \"tokenB\"\n                                },\n                                \"id\": 7590,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3278:6:33\"\n                              }\n                            ],\n                            \"id\": 7591,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3262:23:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"getNormalizedWeight\",\n                                  \"referencedDeclaration\": 5576,\n                                  \"type\": \"function (address) view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7432,\n                                      \"type\": \"contract IBalancerPool\",\n                                      \"value\": \"pool\"\n                                    },\n                                    \"id\": 7592,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3300:4:33\"\n                                  }\n                                ],\n                                \"id\": 7593,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"3300:24:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7456,\n                                  \"type\": \"address\",\n                                  \"value\": \"tokenA\"\n                                },\n                                \"id\": 7594,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3325:6:33\"\n                              }\n                            ],\n                            \"id\": 7595,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3300:32:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"getNormalizedWeight\",\n                                  \"referencedDeclaration\": 5576,\n                                  \"type\": \"function (address) view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7432,\n                                      \"type\": \"contract IBalancerPool\",\n                                      \"value\": \"pool\"\n                                    },\n                                    \"id\": 7596,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3347:4:33\"\n                                  }\n                                ],\n                                \"id\": 7597,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"3347:24:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7462,\n                                  \"type\": \"address\",\n                                  \"value\": \"tokenB\"\n                                },\n                                \"id\": 7598,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3372:6:33\"\n                              }\n                            ],\n                            \"id\": 7599,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3347:32:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7468,\n                              \"type\": \"uint256\",\n                              \"value\": \"pxA\"\n                            },\n                            \"id\": 7600,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3394:3:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7478,\n                              \"type\": \"uint256\",\n                              \"value\": \"pxB\"\n                            },\n                            \"id\": 7601,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3412:3:33\"\n                          }\n                        ],\n                        \"id\": 7602,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3190:236:33\"\n                      }\n                    ],\n                    \"id\": 7603,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3151:275:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 7430\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"add\",\n                                      \"referencedDeclaration\": 10765,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"mul\",\n                                              \"referencedDeclaration\": 10845,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 7580,\n                                                  \"type\": \"uint256\",\n                                                  \"value\": \"fairResA\"\n                                                },\n                                                \"id\": 7604,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"3589:8:33\"\n                                              }\n                                            ],\n                                            \"id\": 7605,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"3589:12:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7468,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"pxA\"\n                                            },\n                                            \"id\": 7606,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"3602:3:33\"\n                                          }\n                                        ],\n                                        \"id\": 7607,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"3589:17:33\"\n                                      }\n                                    ],\n                                    \"id\": 7608,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"3589:21:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"mul\",\n                                          \"referencedDeclaration\": 10845,\n                                          \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7582,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"fairResB\"\n                                            },\n                                            \"id\": 7609,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"3611:8:33\"\n                                          }\n                                        ],\n                                        \"id\": 7610,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"3611:12:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7478,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"pxB\"\n                                        },\n                                        \"id\": 7611,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3624:3:33\"\n                                      }\n                                    ],\n                                    \"id\": 7612,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3611:17:33\"\n                                  }\n                                ],\n                                \"id\": 7613,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3589:40:33\"\n                              }\n                            ],\n                            \"id\": 7614,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"3589:44:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"totalSupply\",\n                                  \"referencedDeclaration\": 5598,\n                                  \"type\": \"function () view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7432,\n                                      \"type\": \"contract IBalancerPool\",\n                                      \"value\": \"pool\"\n                                    },\n                                    \"id\": 7615,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3634:4:33\"\n                                  }\n                                ],\n                                \"id\": 7616,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"3634:16:33\"\n                              }\n                            ],\n                            \"id\": 7617,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3634:18:33\"\n                          }\n                        ],\n                        \"id\": 7618,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3589:64:33\"\n                      }\n                    ],\n                    \"id\": 7619,\n                    \"name\": \"Return\",\n                    \"src\": \"3582:71:33\"\n                  }\n                ],\n                \"id\": 7620,\n                \"name\": \"Block\",\n                \"src\": \"2294:1367:33\"\n              }\n            ],\n            \"id\": 7621,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"2221:1440:33\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"computeFairReserves\",\n              \"overrides\": null,\n              \"scope\": 7723,\n              \"stateMutability\": \"pure\",\n              \"virtual\": false,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns fair reserve amounts given spot reserves, weights, and fair prices.\\n Source: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BalancerPairOracle.sol\\n @param resA Reserve of the first asset\\n @param resB Reserev of the second asset\\n @param wA Weight of the first asset\\n @param wB Weight of the second asset\\n @param pxA Fair price of the first asset\\n @param pxB Fair price of the second asset\"\n                },\n                \"id\": 7622,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"3669:497:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"resA\",\n                      \"overrides\": null,\n                      \"scope\": 7722,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7623,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4201:7:33\"\n                      }\n                    ],\n                    \"id\": 7624,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4201:12:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"resB\",\n                      \"overrides\": null,\n                      \"scope\": 7722,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7625,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4215:7:33\"\n                      }\n                    ],\n                    \"id\": 7626,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4215:12:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"wA\",\n                      \"overrides\": null,\n                      \"scope\": 7722,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7627,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4229:7:33\"\n                      }\n                    ],\n                    \"id\": 7628,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4229:10:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"wB\",\n                      \"overrides\": null,\n                      \"scope\": 7722,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7629,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4241:7:33\"\n                      }\n                    ],\n                    \"id\": 7630,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4241:10:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pxA\",\n                      \"overrides\": null,\n                      \"scope\": 7722,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7631,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4253:7:33\"\n                      }\n                    ],\n                    \"id\": 7632,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4253:11:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pxB\",\n                      \"overrides\": null,\n                      \"scope\": 7722,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7633,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4266:7:33\"\n                      }\n                    ],\n                    \"id\": 7634,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4266:11:33\"\n                  }\n                ],\n                \"id\": 7635,\n                \"name\": \"ParameterList\",\n                \"src\": \"4200:78:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"fairResA\",\n                      \"overrides\": null,\n                      \"scope\": 7722,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7636,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4302:7:33\"\n                      }\n                    ],\n                    \"id\": 7637,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4302:16:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"fairResB\",\n                      \"overrides\": null,\n                      \"scope\": 7722,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7638,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4320:7:33\"\n                      }\n                    ],\n                    \"id\": 7639,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4320:16:33\"\n                  }\n                ],\n                \"id\": 7640,\n                \"name\": \"ParameterList\",\n                \"src\": \"4301:36:33\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7642]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"r0\",\n                          \"overrides\": null,\n                          \"scope\": 7721,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 7641,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"4890:7:33\"\n                          }\n                        ],\n                        \"id\": 7642,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"4890:10:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 5314,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                              \"value\": \"bdiv\"\n                            },\n                            \"id\": 7643,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4903:4:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7624,\n                              \"type\": \"uint256\",\n                              \"value\": \"resA\"\n                            },\n                            \"id\": 7644,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4908:4:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7626,\n                              \"type\": \"uint256\",\n                              \"value\": \"resB\"\n                            },\n                            \"id\": 7645,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4914:4:33\"\n                          }\n                        ],\n                        \"id\": 7646,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"4903:16:33\"\n                      }\n                    ],\n                    \"id\": 7647,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"4890:29:33\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [7649]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"r1\",\n                          \"overrides\": null,\n                          \"scope\": 7721,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 7648,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"4930:7:33\"\n                          }\n                        ],\n                        \"id\": 7649,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"4930:10:33\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 5314,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                              \"value\": \"bdiv\"\n                            },\n                            \"id\": 7650,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4943:4:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5254,\n                                  \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                  \"value\": \"bmul\"\n                                },\n                                \"id\": 7651,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4948:4:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7628,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"wA\"\n                                },\n                                \"id\": 7652,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4953:2:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7634,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"pxB\"\n                                },\n                                \"id\": 7653,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4957:3:33\"\n                              }\n                            ],\n                            \"id\": 7654,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4948:13:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5254,\n                                  \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                  \"value\": \"bmul\"\n                                },\n                                \"id\": 7655,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4963:4:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7630,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"wB\"\n                                },\n                                \"id\": 7656,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4968:2:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7632,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"pxA\"\n                                },\n                                \"id\": 7657,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4972:3:33\"\n                              }\n                            ],\n                            \"id\": 7658,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4963:13:33\"\n                          }\n                        ],\n                        \"id\": 7659,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"4943:34:33\"\n                      }\n                    ],\n                    \"id\": 7660,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"4930:47:33\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7642,\n                              \"type\": \"uint256\",\n                              \"value\": \"r0\"\n                            },\n                            \"id\": 7661,\n                            \"name\": \"Identifier\",\n                            \"src\": \"5082:2:33\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7649,\n                              \"type\": \"uint256\",\n                              \"value\": \"r1\"\n                            },\n                            \"id\": 7662,\n                            \"name\": \"Identifier\",\n                            \"src\": \"5087:2:33\"\n                          }\n                        ],\n                        \"id\": 7663,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"5082:7:33\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"assignments\": [7665]\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"constant\": false,\n                                  \"mutability\": \"mutable\",\n                                  \"name\": \"ratio\",\n                                  \"overrides\": null,\n                                  \"scope\": 7691,\n                                  \"stateVariable\": false,\n                                  \"storageLocation\": \"default\",\n                                  \"type\": \"uint256\",\n                                  \"value\": null,\n                                  \"visibility\": \"internal\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint256\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"id\": 7664,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"5106:7:33\"\n                                  }\n                                ],\n                                \"id\": 7665,\n                                \"name\": \"VariableDeclaration\",\n                                \"src\": \"5106:13:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        },\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 5314,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                      \"value\": \"bdiv\"\n                                    },\n                                    \"id\": 7666,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5122:4:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7649,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r1\"\n                                    },\n                                    \"id\": 7667,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5127:2:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7642,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r0\"\n                                    },\n                                    \"id\": 7668,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5131:2:33\"\n                                  }\n                                ],\n                                \"id\": 7669,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"5122:12:33\"\n                              }\n                            ],\n                            \"id\": 7670,\n                            \"name\": \"VariableDeclarationStatement\",\n                            \"src\": \"5106:28:33\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7637,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"fairResA\"\n                                    },\n                                    \"id\": 7671,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5149:8:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            },\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 5254,\n                                          \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                          \"value\": \"bmul\"\n                                        },\n                                        \"id\": 7672,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5160:4:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7624,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"resA\"\n                                        },\n                                        \"id\": 7673,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5165:4:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                },\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 5437,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                              \"value\": \"bpow\"\n                                            },\n                                            \"id\": 7674,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5171:4:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7665,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"ratio\"\n                                            },\n                                            \"id\": 7675,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5176:5:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7630,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"wB\"\n                                            },\n                                            \"id\": 7676,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5183:2:33\"\n                                          }\n                                        ],\n                                        \"id\": 7677,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"5171:15:33\"\n                                      }\n                                    ],\n                                    \"id\": 7678,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"5160:27:33\"\n                                  }\n                                ],\n                                \"id\": 7679,\n                                \"name\": \"Assignment\",\n                                \"src\": \"5149:38:33\"\n                              }\n                            ],\n                            \"id\": 7680,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"5149:38:33\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7639,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"fairResB\"\n                                    },\n                                    \"id\": 7681,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5202:8:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            },\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 5314,\n                                          \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                          \"value\": \"bdiv\"\n                                        },\n                                        \"id\": 7682,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5213:4:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7626,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"resB\"\n                                        },\n                                        \"id\": 7683,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5218:4:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                },\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 5437,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                              \"value\": \"bpow\"\n                                            },\n                                            \"id\": 7684,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5224:4:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7665,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"ratio\"\n                                            },\n                                            \"id\": 7685,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5229:5:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7628,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"wA\"\n                                            },\n                                            \"id\": 7686,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5236:2:33\"\n                                          }\n                                        ],\n                                        \"id\": 7687,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"5224:15:33\"\n                                      }\n                                    ],\n                                    \"id\": 7688,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"5213:27:33\"\n                                  }\n                                ],\n                                \"id\": 7689,\n                                \"name\": \"Assignment\",\n                                \"src\": \"5202:38:33\"\n                              }\n                            ],\n                            \"id\": 7690,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"5202:38:33\"\n                          }\n                        ],\n                        \"id\": 7691,\n                        \"name\": \"Block\",\n                        \"src\": \"5091:161:33\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"assignments\": [7693]\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"constant\": false,\n                                  \"mutability\": \"mutable\",\n                                  \"name\": \"ratio\",\n                                  \"overrides\": null,\n                                  \"scope\": 7719,\n                                  \"stateVariable\": false,\n                                  \"storageLocation\": \"default\",\n                                  \"type\": \"uint256\",\n                                  \"value\": null,\n                                  \"visibility\": \"internal\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint256\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"id\": 7692,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"5273:7:33\"\n                                  }\n                                ],\n                                \"id\": 7693,\n                                \"name\": \"VariableDeclaration\",\n                                \"src\": \"5273:13:33\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        },\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 5314,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                      \"value\": \"bdiv\"\n                                    },\n                                    \"id\": 7694,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5289:4:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7642,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r0\"\n                                    },\n                                    \"id\": 7695,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5294:2:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7649,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r1\"\n                                    },\n                                    \"id\": 7696,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5298:2:33\"\n                                  }\n                                ],\n                                \"id\": 7697,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"5289:12:33\"\n                              }\n                            ],\n                            \"id\": 7698,\n                            \"name\": \"VariableDeclarationStatement\",\n                            \"src\": \"5273:28:33\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7637,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"fairResA\"\n                                    },\n                                    \"id\": 7699,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5316:8:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            },\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 5314,\n                                          \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                          \"value\": \"bdiv\"\n                                        },\n                                        \"id\": 7700,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5327:4:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7624,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"resA\"\n                                        },\n                                        \"id\": 7701,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5332:4:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                },\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 5437,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                              \"value\": \"bpow\"\n                                            },\n                                            \"id\": 7702,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5338:4:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7693,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"ratio\"\n                                            },\n                                            \"id\": 7703,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5343:5:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7630,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"wB\"\n                                            },\n                                            \"id\": 7704,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5350:2:33\"\n                                          }\n                                        ],\n                                        \"id\": 7705,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"5338:15:33\"\n                                      }\n                                    ],\n                                    \"id\": 7706,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"5327:27:33\"\n                                  }\n                                ],\n                                \"id\": 7707,\n                                \"name\": \"Assignment\",\n                                \"src\": \"5316:38:33\"\n                              }\n                            ],\n                            \"id\": 7708,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"5316:38:33\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7639,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"fairResB\"\n                                    },\n                                    \"id\": 7709,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5369:8:33\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            },\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 5254,\n                                          \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                          \"value\": \"bmul\"\n                                        },\n                                        \"id\": 7710,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5380:4:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7626,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"resB\"\n                                        },\n                                        \"id\": 7711,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5385:4:33\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                },\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 5437,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\",\n                                              \"value\": \"bpow\"\n                                            },\n                                            \"id\": 7712,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5391:4:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7693,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"ratio\"\n                                            },\n                                            \"id\": 7713,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5396:5:33\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7628,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"wA\"\n                                            },\n                                            \"id\": 7714,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"5403:2:33\"\n                                          }\n                                        ],\n                                        \"id\": 7715,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"5391:15:33\"\n                                      }\n                                    ],\n                                    \"id\": 7716,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"5380:27:33\"\n                                  }\n                                ],\n                                \"id\": 7717,\n                                \"name\": \"Assignment\",\n                                \"src\": \"5369:38:33\"\n                              }\n                            ],\n                            \"id\": 7718,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"5369:38:33\"\n                          }\n                        ],\n                        \"id\": 7719,\n                        \"name\": \"Block\",\n                        \"src\": \"5258:161:33\"\n                      }\n                    ],\n                    \"id\": 7720,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"5078:341:33\"\n                  }\n                ],\n                \"id\": 7721,\n                \"name\": \"Block\",\n                \"src\": \"4338:1088:33\"\n              }\n            ],\n            \"id\": 7722,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"4172:1254:33\"\n          }\n        ],\n        \"id\": 7723,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"741:4688:33\"\n      }\n    ],\n    \"id\": 7724,\n    \"name\": \"SourceUnit\",\n    \"src\": \"0:5429:33\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.114Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Implements the PriceOracle interface for Fuse pools (and Compound v2).\",\n        \"params\": {\n          \"cToken\": \"The cToken address for price retrieval.\"\n        },\n        \"returns\": {\n          \"_0\": \"Price denominated in ETH, with 18 decimals, for the given cToken address.\"\n        }\n      },\n      \"price(address)\": {\n        \"params\": {\n          \"underlying\": \"The underlying token address for which to get the price (set to zero address for ETH).\"\n        },\n        \"returns\": {\n          \"_0\": \"Price denominated in ETH (scaled by 1e18).\"\n        }\n      }\n    },\n    \"title\": \"BalancerLpTokenPriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"notice\": \"Get the underlying price of a cToken.\"\n      },\n      \"price(address)\": {\n        \"notice\": \"Get the LP token price price for an underlying token address.\"\n      }\n    },\n    \"notice\": \"BalancerLpTokenPriceOracle is a price oracle for Balancer LP tokens.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/ChainlinkPriceOracle.json",
    "content": "{\n  \"contractName\": \"ChainlinkPriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"_maxSecondsBeforePriceIsStale\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"BTC_ETH_PRICE_FEED\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract AggregatorV3Interface\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ETH_USD_PRICE_FEED\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract AggregatorV3Interface\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"btcPriceFeeds\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract AggregatorV3Interface\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"ethPriceFeeds\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract AggregatorV3Interface\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"maxSecondsBeforePriceIsStale\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"usdPriceFeeds\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract AggregatorV3Interface\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"underlying\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"hasPriceFeed\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"underlying\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"price\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_maxSecondsBeforePriceIsStale\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BTC_ETH_PRICE_FEED\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract AggregatorV3Interface\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ETH_USD_PRICE_FEED\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract AggregatorV3Interface\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"btcPriceFeeds\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract AggregatorV3Interface\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"ethPriceFeeds\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract AggregatorV3Interface\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"hasPriceFeed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"maxSecondsBeforePriceIsStale\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"usdPriceFeeds\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract AggregatorV3Interface\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements `PriceOracle`.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Constructor to set `maxSecondsBeforePriceIsStale` as well as all Chainlink price feeds.\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\\"},\\\"hasPriceFeed(address)\\\":{\\\"details\\\":\\\"Returns a boolean indicating if a price feed exists for the underlying asset.\\\"},\\\"price(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\\\"}},\\\"title\\\":\\\"PreferredPriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"BTC_ETH_PRICE_FEED()\\\":{\\\"notice\\\":\\\"Chainlink BTC/ETH price feed contracts.\\\"},\\\"ETH_USD_PRICE_FEED()\\\":{\\\"notice\\\":\\\"Chainlink ETH/USD price feed contracts.\\\"},\\\"btcPriceFeeds(address)\\\":{\\\"notice\\\":\\\"Maps ERC20 token addresses to BTC-based Chainlink price feed contracts.\\\"},\\\"ethPriceFeeds(address)\\\":{\\\"notice\\\":\\\"Maps ERC20 token addresses to ETH-based Chainlink price feed contracts.\\\"},\\\"maxSecondsBeforePriceIsStale()\\\":{\\\"notice\\\":\\\"The maxmimum number of seconds elapsed since the round was last updated before the price is considered stale. If set to 0, no limit is enforced.\\\"},\\\"usdPriceFeeds(address)\\\":{\\\"notice\\\":\\\"Maps ERC20 token addresses to USD-based Chainlink price feed contracts.\\\"}},\\\"notice\\\":\\\"Returns prices from Chainlink.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/ChainlinkPriceOracle.sol\\\":\\\"ChainlinkPriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/chainlink/AggregatorV3Interface.sol\\\":{\\\"keccak256\\\":\\\"0x19b0055692673667799f6698d674fe1b4d938a2e6d89911583b91544ccf588e1\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://72ca4a7259eb42c9aa1d2966b937f375f54ed9ec139d398f369446e1c55dc999\\\",\\\"dweb:/ipfs/Qmc6XsqaVsgWGDJmgdt5Wbx7wmnWZgWMHA8c6Mq8NcXX7G\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xf267cd7f597c43c528b18543849347126d814357a0c3e262ac657f3054260a89\\\",\\\"urls\\\":[\\\"bzz-raw://d315fcc20e26f6378189167f4ab86893819903823ea18a485588f355aab5e036\\\",\\\"dweb:/ipfs/QmYG9oa8Rti6u7bAoBWJC8TtSqM1V8QsBiivsQo9y4wkAF\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/ChainlinkPriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xbed744696246b10ae4129f56d7007a234f3270e18967bdcad58ee4ae0138dc50\\\",\\\"urls\\\":[\\\"bzz-raw://cfe9587fe9a17486518dea4d342403f76c1f7cb95faa2fae3e32c59353254c2f\\\",\\\"dweb:/ipfs/QmRBecikWFCVJ2VFkcoSwVcyXmyzfT78u3Sp8mTMsHjayy\\\"]},\\\"@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\\\",\\\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\\\",\\\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x9e71cf53c2ee5c9e4f183e168028fc208560493aaf48668bca0981bb2c8359c2\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7cb9d29f7bc76b077649ccef2043e1492a462afcb2410f443e63233f206a95dd\\\",\\\"dweb:/ipfs/QmRDXEro4hh2E6rTUAWvBkHzivAS1TBmtSLP1mRGAHVnnL\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516122a83803806122a88339818101604052602081101561003357600080fd5b50516003557f922605635d8625baeee2632c4abd30ed3e656c608e4e1d527ac798b2e7bbaf8080546001600160a01b03199081167372afaecf99c9d9c8215ff44c77b94b99c28741e8179091557f7145bb02480b505fc02ccfdba07d3ba3a9d821606f0688263abedd0ac6e5bec580548216736df09e975c830ecae5bd4ed9d90f3a95a4f880121790557f652f71c42b843343e1ef371dbb9eee4ae200cef6c0330cc356d68047e9c79b628054821673492575fdd11a0fcf2c6c719867890a7648d526eb1790557f6aa415b64acb0a434cca4219caf83aa35a6e08e958efcfbc0a11e6938dcca50b80548216738f83670260f8f7708143b836a2a6f11ef0abac011790557f8dd1acf2f417f842f399a5c6c5a803e3017458a53801bad96df1fe1972a4537c805482167358921ac140522867bf50b9e009599da0ca4a23791790557f2bc93a8060526cefdf8802183664660d7d7310808def67df12894f0e5193b4338054821673c1438aa3823a6ba0c159cfa8d98df5a994ba120b1790557f60788a10714095b4b847dd17e28e2482eb05bcedcbe89ea8d5fa139281c227ff80548216730bdb051e10c9718d1c29efbad442e88d389582741790557f9d36796f595ad8c503b82568e7e967e06e60c0e85648af5d26070800c033c7f080548216730d16d4528239e9ee52fa531af613acdb23d88c941790557f2ada67348576a5f43965aeed43cfc775fb3796c746b8d7e063e9e31abe7756108054821673c546d2d06144f9dd42815b8ba46ee7b8fcafa4a29081179091557f98d1e320c17e2a1a87baab27194cf61fc6f4cbb6cda0040c2dbf58758d8effb78054831690911790557f72ecb6b277d69e65f266d635816977482f3bd43f38cd571ba98aab196b191eb28054821673cf61d1841b178fe82c8895fe60c2edda083144161790557ff0b998666205e50af945dcd5198861491334a6162cc24264d9a801634ee07ec88054821673deb288f737066589598e9214e782fa5a8ed689e89081179091557f0ad657e79cb9f74bdf6f33badc318d69537edcaf175eb59af2e123b577dd466580548316821790557f8237a75246863a956acc84e18f74a40be5a5e45c1449659b16fff884d97b2d2180548316821790557fc58542b7442a09818236d2c23eecf870f3688f99e43a40b094f6ed48f76581118054831690911790557f939f7cabc28bdbedc4485191b21a60d41b948f6b2be04fad8a9bba962c7a74b18054821673614715d2af89e6ec99a233818275142ce88d1cfd1790557f714d08b158d6cc294ffeb4a3b345613fb0e642c104a5bce757c5f7f16bd4df5480548216738f7c7181ed1a2ba41cfc3f5d064ef91b67daef661790557fc19dbee4376f33a2c7d0d8afb05074ae4879269d0731097362888a48b88cbe4e805482167375fbd83b4bd51dee765b2a01e8d3aa1b020f9d331790557f511cc89fca1810b4d2868146b87932d94ee0e38147e04dc2f8572df83cf520a880548216731b39ee86ec5979ba5c322b826b3ecb8c799916991790557f74b21504d6ce8d3085ff4d3c40f4f6f826f045fe400f691809753490c1113ccc80548216737b6230ef79d5e97c11049ab362c0b685facba0c21790557fa321655a2bbe4fb76e06e998714ab65c52c1c2c1d83195276a2c435589568d76805482167382597cfe6af8baad7c0d441aa82cbc3b517596071790557ff7b15f98e94b56adc7bc4251d8e5bab2a85df3c658d291f469be1863917931e98054821673ca696a9eb93b81adfe6435759a29ab4cf2991a961790557f70c3dba262fa5eaaf3e393830b86a1923f032bbcdc463b5d2b22ed5f11b1e68580548216738a12be339b0cd1829b91adc01977caa5e9ac121e1790557f5306b8fbe80b30a74098357ee8e26fad8dc069da9011cca5f0870a0a5982e5418054821673773616e4d11a78f511299002da57a0a94577f1f41790557f2dd12e72a092c6022dd4b244c76871f9fba900e3c17d078fa30123d4cc431b5f8054821673d010e899f7ab723ac93f825cdc5aa057669557c21790557f1bc36087bcda8c8f0a1d3644ff9e81045f37abda2f3e48c9950fe55b89d0df568054821673029849bbc0b1d93b85a8b6190e979fd38f5760e21790557f2a792ecbe4cc20859315764ffd1173cc3d655abe0eab051e1b91505d05664e5f805482167324d9ab51950f3d62e9144fdc2f3135daa6ce8d1b1790557f69385f4f59c73b47d354995d37e8afb2d12626a98f707577a862ca34c9b8dfab80548216732de7e4a9488488e0058b95854cc2f7955b35dc9b1790557f7fa58701f5444cd8686e8db74991cfac490ac6c67543759a064d4a1d9437208b8054821673f0985f7e2cabff22cecc5a71282a89582c382efe1790557f1937f4929bf506eeb2c6a1d0a2fcd058a6c656179f2f8b4280efa139cc62bcba805482167317d054ecac33d91f7340645341efb5de9009f1c11790557f65ddfc0b22efd48a70a9225c1497ac6013365784568b598beb41c24a618196638054821673af5e8d9cd9fc85725a83bf23c52f1c39a71588a61790557ff3da0919264f7c718053ecd775aaadf3e60482b8a48602c1a29f9e3fa1891d1c8054821673656c0544ef4c98a6a98491833a89204abb045d6b1790557fcf66ea24a3a22ace3478fe5474bcc1fe794b64f2f3e3e510121d34175d9fca748054821673e7015ccb7e5f788b8c1010fc22343473eaac37411790557f730d6fdf8f2d5e5e75a62ad49cc4d175b7750703aa72e452e1e22258c77079fb8054821673dc530d9457755926550b59e8eccdae76241815571790557ffde91a0e4ce347aee87f50e1828f560ac227f5a85b774d40a730df907420cbdd8054821673160ac928a16c93ed4895c2de6f81ecce9a7eb7b41790557fe9ac309054ae3ea057b8ba5ade5fbdb631fd2a69208b4c4996b5da5c0c28541a805482167382a44d92d6c329826dc557c5e1be6ebec5d5feb91790557fdda00a57bee26ed4ac93f73d0238caf2b0b80d455de521e247ae994efa80def5805482167324551a8fb2a7211a25a17b1481f043a8a8adc7f21790557fd85a4d964d4d582b84640f5fb5e87df4a5d5298bb387091004bd9260d56a89e38054821673daea8386611a157b08829ed4997a8a62b557014c1790557f8368c25c4b2f30d7b2ab019df22a73e277c773d0fb7cde331e90efc89d2692fb805482167398334b85de2a8b998ba844c5521e73d68ad69c001790557f7b66cee30b2b198fbf35e728c76f17d88c3a425bd48097e22eafaff9da2e7e8f80548216739cb2a01a7e64992d32a34db7ceea4c919c391f6a1790557f692c63a03bf35f688365fdce87bd4530629214d76f11021ca81cb251428807a9805482167357c9ab3e56ee4a83752c181f241120a3dbba06a11790557f629da0e8ff2229b61f23ea59f6fc9fae5385ec7d86836d69d66518b801a1a2b98054821673ba9b2a360eb8abdb677d6d7f27e12de11aa052ef1790557fc13b7ee270ec43e8a6443e3b8f180d8f4fca097dedaede03fcc04df7145c999a80548216733a08ebbab125224b7b6474384ee39fbb247d22001790557fdfcc185e406aad40b3880bc723dcc773f9b6e7bc42904ab3f9845c594921f49d80548216739b97304ea12efed0fad976fbecaad46016bf269e1790557f72d1ea1bd06e478789ce223c9d4541833ee2f7ebeef7a8270683f3d403f32f9480548216733147d7203354dc06d9fd350c7a2437bca92387a41790557f5048cdc78b2b28093fa136992d1ca5cef83e144d947de68225926a0ff2827a6c8054821673d4ce430c3b67b3e2f7026d86e7128588629e24551790557f915ea3178cf8d84ce8970365961a708ef05e98859d8d4717485c47bf3cbcb26480548216734cba1e1fdc738d0fe8db3ee07728e2bc4da676c61790557f3a366db8310f607ec90a3e157b2d9c96b54e5b9058a23c07ffef108dcac299bf8054821673875d60c44cfbc38baa4eb2ddb76a767deb91b97e1790557f6cd63715d5f0db03eec592ada4e78050279222b9583fb20a52ef8a37c8e911b9805482167379291a9d692df95334b1a0b3b4ae6bc606782f8c1790557f86533f34a757e46c0721fbd7d349a6f1936fb78c3f41968b01245132d7a80c658054821673050c048c9a0cd0e76f166e2539f87ef2accec58f1790557f891368e9fb55bce905a27799ff398f5706410e14205316f805cafda2a6c93be480548216738e0b7e6062272b5ef4524250bfff8e5bd34977571790557fb738e63d4f4906dfb172df67af9f36b70db9ec183d59b161eabe70a6ea8083e68054821673e572cef69f43c2e488b33924af04bdace19079cf1790557f690bb39a0a5e54120bf07b6463b8fcd7bea90578d8ae77d1e573a88ddc40bfec80548216733886ba987236181d98f2401c507fb8bea7871df21790557fef188c9425e10b9ff1f1fb69b77afe1d1874b5bbe31bfcba2584fae894ee14478054821673f817b69ea583caff291e287cae00ea329d22765c1790557f6da98f1d47bb0bc5549e1497f71ab684f8d693b19b458fbccae05e126d246e908054821673d6aa3d25116d8da79ea0246c4826eb951872e02e1790557fc6521c8ea4247e8beb499344e591b9401fb2807ff9997dd598fd9e56c73a264d8054821673986b5e1e1755e3c2440e960477f25201b0a8bbd41790557fa934b07068f5d95a11413ed6d08a4a1122dc4b8c14a6ab2d94f8b279dac630428054821673ee9f2375b4bdf6387aa8265dd4fb8f16512a1d461790557fbfbb6e0ba78daf468733c76bad8771bca2c4b9e50f4caf63c623fea7eda8d6028054821673a20623070413d42a5c01db2c8111640dd7a5a03a1790557fe2f5263ab0aff2d245fbc15bf86f3654aada3c07fe237aa7b35d5a4307de57698054821673e5dc0a609ab8bcf15d3f35cfaa1ff40f521173ea1790557fca39940d9fe8cb630469ab5caba946836b0cc51b0835f081f9fe5be60d1be4ca8054821673cebd2026d3c99f2a7ce028acf372c154ab4638a91790557f828ac2cfae8391df6fe4c86c1beb4a85a14c88f651908f41682259723170b5dc80548216737c5d4f8345e66f68099581db340cd65b078c41f41790557f1ce7425dcaab438b3aa06773f467c327bc5dafb088bd4b5574d752d6ef71f7d78054821673aab2f6b45b28e962b3acd1ee4fc88aeddf5577561790557fd3bdcf34226f9e810a1afecc8561c82ca9d9fd3955869ad47d9842f2dba8fa1e80548216732da4983a622a8498bb1a21fae9d8f6c6649399621790557fc16ce42b99dfd9b3e8f651b2f0b0ba7f21a54924ccfc1edbab49a269b7c4e4358054821673ae48c91df1fe419994ffda27da09d5ac69c30f551790557f228b035097642596abbc6f7f0758ba63a695d310ef53868d044ec2dc14fe61e38054821673231e764b44b2c1b7ca171fa8021a24ed520cde101790557fcfaddbd6ace3a979cf8d823997c93cc8a906b3474c7c04f7ead4ed4386dc3402805482167377f9710e7d0a19669a13c055f62cd80d313df0221790557ff84f2148991de777f629d59c7b1bf4c1e645096d98447d3406dc8a49e573c9128054821673449d117117838ffa61263b61da6301aa2a88b13a1790557f363d907798d05e664f1ad8bea95d518f44f828b18fee97195d3a12419b4d99968054821673fb0cadfea136e9e343cfb55b863a6df8348ab9121790557f1d5dd85bf54141e1e9825d67c3e9d9099cd3f284f85b90ce8fdb48fbe7587fa080548216731c07afb8e2b827c5a4739c6d59ae3a5035f287341790557f045c4c1a1887c6351dd9b50a806c6f3b969a704c2a71296883f55e466a2911dc805482167310a43289895eaff840e8d45995bba89f9115ecee1790557f29fdff8d3c2f67b2e13270227e40ac2535955bc3d63b7251c804d64b03e714348054821673aea2808407b7319a31a383b6f8b60f04bca23ce21790557fdf8318910f030d17d9af780fe90952ef38366f74eda98a29c961fc58d2506d6d8054821673b49f677943bc038e9857d61e7d053caa2c1734c11790557fdf99644981f13d8b18357d5d983b2f719203481d0d4a1c649a4b2d67d7e456b3805482167380070f7151bddbbb1361937ad4839317af99ae6c1790557fa134e427ef6529de95c7765b9831befbe26d2405ec3c4e872f967e2dfdeb2b1980548216735c0ab2d9b5a7ed9f470386e82bb36a3613cdd4b51790557f10db6a6613161f0e0a549f1f0c4bad6fd3d4dca1a45778499973aa27ae242c258054821673d0935838935349401c73a06fcde9d63f719e84e51790557ff03828b358f7faf17cd412f0c681ddd3c48f493565d84f6640a42fb86eb389a580548216736af09df7563c363b5763b9102712ebed3b9e859b1790557f422f9fa51c3ebf73c3fd74a817bc14bebb8d41805604ee0e2943143a024fcc5380548216737bac85a8a13a4bcd8abb3eb7d6b4d632c5a576761790557fce4c145f89f04763ecd4949aa72a46f7b1cf90c8e8cfea822705f79653b30bd58054821673d75aaae4af0c398ca13e2667be57af2cca8b5de61790557f7a08f1a05d6f24183b50d93ad9678cd6a18b49fd99d86f4b3f052a07b2c5938d8054821673fb0cfd6c19e25db4a08d8a204a387cea48cc138f1790557f5be6a1eae107afa7bddcea28ecc6a0b9200d088fac46ebde1b0899da28675fd9805482167326929b85fe284eeab939831002e1928183a10fb11790557f67aa7916c724f9f4889561f854c87d81b72d222616ad75f627be8b9da1bd3e7f8054821673acd0d1a29759cc01e8d925371b72cb2b5610ea251790557f1e8be566fcb0087c849bfa725bf2f34a4a7d61340491f533e4d911ecdcb0c72080548216731cedaab50936881b3e449e47e40a2cdaf5576a4a1790557fded36a01f3cd1f3dfbc4133230ddd9496f6aed7b580122c52fead359496a27c08054821673fac81ea9dd29d8e9b212acd6edbeb6de38cb43af1790557f5fc8b5a5372582c92ca1f5fc34b2fc67ecab129876bc197e421abf3ae3b194248054821673379589227b15f1a12195d3f2d90bbc9f31f952351790557f73d276fb9ee560332ea673c295519551375beccedfa7958021f64ecec0704a1a8054821673214ed9da11d2fbe465a6fc601a91e62ebec1a0d61790557f7aed1cbd1e9f97c301a09e560743c612867d0c3c140b9154207868811d8d02a48054821673fa66458cce7dd15d8650015c4fce4d278271618f1790557f2f2e13da20646f0b6f1b541c9f8163d18fa60c60eb923a097bb66e5419e01a328054821673ced2660c6dd1ffd856a5a82c67f3482d88c50b121790557fbac4733c84e9b7c5f58930c8b72ed3a84e28397c77f4d2a0ea79414e9dc1768d80548216735239a625deb44bf3eeac2cd5366ba24b8e9db63f1790557f4caf056ab4b9e3eea26c6d6d0e54b16f1d0982867848072f0cd1369efbfea7928054821673283d433435cfcabf00263beef6a362b7cc5ed9f21790557f9d30438784fca7535cf1019a1c35e8440741f3b7114721a1363f20893e998f378054821673a8e875f94138b0c5b51d1e1d5de35bbddd28ea8717905560026020527f7cbd64aab4b04ae4829b2aa2d6141aed77c1ac938af266e79812be8c48d67c9e8054821673418a6c98cd5b8275955f08f0b8c1c6838c8b168517905573f970b8e36e23f7fc3fd752eea86f8be8d83375a66000527f7907f4cd94db47062093d965fccb17a1a5b0ea0aadfc6b16658c8c50ac50163a805490911673ea0b3dca635f4a4e77d9654c5c18836ee771566e179055610c94806116146000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063b0f0abe911610066578063b0f0abe914610172578063cf0b06131461017a578063e073a24114610182578063f0e0626f1461018a578063fc57d4df146101b057610093565b80630b7983a2146100985780631c5ed620146100d257806336bfdf7214610114578063aea910781461013a575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101d6565b604080519115158252519081900360200190f35b6100f8600480360360208110156100e857600080fd5b50356001600160a01b0316610245565b604080516001600160a01b039092168252519081900360200190f35b6100f86004803603602081101561012a57600080fd5b50356001600160a01b0316610260565b6101606004803603602081101561015057600080fd5b50356001600160a01b031661027b565b60408051918252519081900360200190f35b6100f8610286565b6100f861029e565b6101606102b6565b6100f8600480360360208110156101a057600080fd5b50356001600160a01b03166102bc565b610160600480360360208110156101c657600080fd5b50356001600160a01b03166102d7565b6001600160a01b0381811660009081526020819052604081205490911615158061021957506001600160a01b038281166000908152600160205260409020541615155b8061023d57506001600160a01b038281166000908152600260205260409020541615155b90505b919050565b6000602081905290815260409020546001600160a01b031681565b6002602052600090815260409020546001600160a01b031681565b600061023d8261046d565b735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b73deb288f737066589598e9214e782fa5a8ed689e881565b60035481565b6001602052600090815260409020546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561031257600080fd5b505afa158015610326573d6000803e3d6000fd5b505050506040513d602081101561033c57600080fd5b5051156103525750670de0b6b3a7640000610240565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561038d57600080fd5b505afa1580156103a1573d6000803e3d6000fd5b505050506040513d60208110156103b757600080fd5b5051905060006103c68261046d565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561040357600080fd5b505afa158015610417573d6000803e3d6000fd5b505050506040513d602081101561042d57600080fd5b505160ff16905060128111156104535761044e826011198301600a0a610a0e565b610464565b610464826012839003600a0a610a59565b95945050505050565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03831614156104a35750670de0b6b3a7640000610240565b6001600160a01b0382811660009081526020819052604090205416156105b9576001600160a01b03808316600090815260208190526040808220548151633fabe5a360e21b815291519293849391169163feaf968c9160048083019260a0929190829003018186803b15801561051857600080fd5b505afa15801561052c573d6000803e3d6000fd5b505050506040513d60a081101561054257600080fd5b50602081015160609091015160035491935091501561059e57600354810142111561059e5760405162461bcd60e51b8152600401808060200182810382526023815260200180610b766023913960400191505060405180910390fd5b60008212156105ae5760006105b0565b815b92505050610240565b6001600160a01b0382811660009081526001602052604090205416156107d257600080735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561062957600080fd5b505afa15801561063d573d6000803e3d6000fd5b505050506040513d60a081101561065357600080fd5b5060208101516060909101516003549193509150156106af5760035481014211156106af5760405162461bcd60e51b8152600401808060200182810382526021815260200180610bbc6021913960400191505060405180910390fd5b600082136106c257600092505050610240565b6001600160a01b03808516600090815260016020526040808220548151633fabe5a360e21b815291519293169163feaf968c9160048082019260a092909190829003018186803b15801561071557600080fd5b505afa158015610729573d6000803e3d6000fd5b505050506040513d60a081101561073f57600080fd5b5060208101516060909101516003549093509091501561079c57600354820142111561079c5760405162461bcd60e51b8152600401808060200182810382526023815260200180610b996023913960400191505060405180910390fd5b60008112156107ac5760006107c8565b6107c8836107c283670de0b6b3a7640000610a59565b90610a0e565b9350505050610240565b6001600160a01b0382811660009081526002602052604090205416156109d75760008073deb288f737066589598e9214e782fa5a8ed689e86001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561084257600080fd5b505afa158015610856573d6000803e3d6000fd5b505050506040513d60a081101561086c57600080fd5b5060208101516060909101516003549193509150156108c85760035481014211156108c85760405162461bcd60e51b8152600401808060200182810382526021815260200180610b556021913960400191505060405180910390fd5b600082136108db57600092505050610240565b6001600160a01b03808516600090815260026020526040808220548151633fabe5a360e21b815291519293169163feaf968c9160048082019260a092909190829003018186803b15801561092e57600080fd5b505afa158015610942573d6000803e3d6000fd5b505050506040513d60a081101561095857600080fd5b506020810151606090910151600354909350909150156109b55760035482014211156109b55760405162461bcd60e51b8152600401808060200182810382526023815260200180610c3c6023913960400191505060405180910390fd5b60008112156109c55760006107c8565b6107c86305f5e1006107c28386610a59565b60405162461bcd60e51b815260040180806020018281038252603e815260200180610bdd603e913960400191505060405180910390fd5b6000610a5083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610ab2565b90505b92915050565b600082610a6857506000610a53565b82820282848281610a7557fe5b0414610a505760405162461bcd60e51b8152600401808060200182810382526021815260200180610c1b6021913960400191505060405180910390fd5b60008183610b3e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b03578181015183820152602001610aeb565b50505050905090810190601f168015610b305780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610b4a57fe5b049594505050505056fe4254432f45544820436861696e6c696e6b207072696365206973207374616c652e546f6b656e2f45544820436861696e6c696e6b207072696365206973207374616c652e546f6b656e2f55534420436861696e6c696e6b207072696365206973207374616c652e4554482f55534420436861696e6c696e6b207072696365206973207374616c652e4e6f20436861696e6c696e6b207072696365206665656420666f756e6420666f72207468697320756e6465726c79696e6720455243323020746f6b656e2e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f6b656e2f42544320436861696e6c696e6b207072696365206973207374616c652ea26469706673582212200c83034372f9b00af05a99b751418c9060ff84f60f0ada5242c8411f58f1c75964736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063b0f0abe911610066578063b0f0abe914610172578063cf0b06131461017a578063e073a24114610182578063f0e0626f1461018a578063fc57d4df146101b057610093565b80630b7983a2146100985780631c5ed620146100d257806336bfdf7214610114578063aea910781461013a575b600080fd5b6100be600480360360208110156100ae57600080fd5b50356001600160a01b03166101d6565b604080519115158252519081900360200190f35b6100f8600480360360208110156100e857600080fd5b50356001600160a01b0316610245565b604080516001600160a01b039092168252519081900360200190f35b6100f86004803603602081101561012a57600080fd5b50356001600160a01b0316610260565b6101606004803603602081101561015057600080fd5b50356001600160a01b031661027b565b60408051918252519081900360200190f35b6100f8610286565b6100f861029e565b6101606102b6565b6100f8600480360360208110156101a057600080fd5b50356001600160a01b03166102bc565b610160600480360360208110156101c657600080fd5b50356001600160a01b03166102d7565b6001600160a01b0381811660009081526020819052604081205490911615158061021957506001600160a01b038281166000908152600160205260409020541615155b8061023d57506001600160a01b038281166000908152600260205260409020541615155b90505b919050565b6000602081905290815260409020546001600160a01b031681565b6002602052600090815260409020546001600160a01b031681565b600061023d8261046d565b735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b73deb288f737066589598e9214e782fa5a8ed689e881565b60035481565b6001602052600090815260409020546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561031257600080fd5b505afa158015610326573d6000803e3d6000fd5b505050506040513d602081101561033c57600080fd5b5051156103525750670de0b6b3a7640000610240565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561038d57600080fd5b505afa1580156103a1573d6000803e3d6000fd5b505050506040513d60208110156103b757600080fd5b5051905060006103c68261046d565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561040357600080fd5b505afa158015610417573d6000803e3d6000fd5b505050506040513d602081101561042d57600080fd5b505160ff16905060128111156104535761044e826011198301600a0a610a0e565b610464565b610464826012839003600a0a610a59565b95945050505050565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03831614156104a35750670de0b6b3a7640000610240565b6001600160a01b0382811660009081526020819052604090205416156105b9576001600160a01b03808316600090815260208190526040808220548151633fabe5a360e21b815291519293849391169163feaf968c9160048083019260a0929190829003018186803b15801561051857600080fd5b505afa15801561052c573d6000803e3d6000fd5b505050506040513d60a081101561054257600080fd5b50602081015160609091015160035491935091501561059e57600354810142111561059e5760405162461bcd60e51b8152600401808060200182810382526023815260200180610b766023913960400191505060405180910390fd5b60008212156105ae5760006105b0565b815b92505050610240565b6001600160a01b0382811660009081526001602052604090205416156107d257600080735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561062957600080fd5b505afa15801561063d573d6000803e3d6000fd5b505050506040513d60a081101561065357600080fd5b5060208101516060909101516003549193509150156106af5760035481014211156106af5760405162461bcd60e51b8152600401808060200182810382526021815260200180610bbc6021913960400191505060405180910390fd5b600082136106c257600092505050610240565b6001600160a01b03808516600090815260016020526040808220548151633fabe5a360e21b815291519293169163feaf968c9160048082019260a092909190829003018186803b15801561071557600080fd5b505afa158015610729573d6000803e3d6000fd5b505050506040513d60a081101561073f57600080fd5b5060208101516060909101516003549093509091501561079c57600354820142111561079c5760405162461bcd60e51b8152600401808060200182810382526023815260200180610b996023913960400191505060405180910390fd5b60008112156107ac5760006107c8565b6107c8836107c283670de0b6b3a7640000610a59565b90610a0e565b9350505050610240565b6001600160a01b0382811660009081526002602052604090205416156109d75760008073deb288f737066589598e9214e782fa5a8ed689e86001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561084257600080fd5b505afa158015610856573d6000803e3d6000fd5b505050506040513d60a081101561086c57600080fd5b5060208101516060909101516003549193509150156108c85760035481014211156108c85760405162461bcd60e51b8152600401808060200182810382526021815260200180610b556021913960400191505060405180910390fd5b600082136108db57600092505050610240565b6001600160a01b03808516600090815260026020526040808220548151633fabe5a360e21b815291519293169163feaf968c9160048082019260a092909190829003018186803b15801561092e57600080fd5b505afa158015610942573d6000803e3d6000fd5b505050506040513d60a081101561095857600080fd5b506020810151606090910151600354909350909150156109b55760035482014211156109b55760405162461bcd60e51b8152600401808060200182810382526023815260200180610c3c6023913960400191505060405180910390fd5b60008112156109c55760006107c8565b6107c86305f5e1006107c28386610a59565b60405162461bcd60e51b815260040180806020018281038252603e815260200180610bdd603e913960400191505060405180910390fd5b6000610a5083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610ab2565b90505b92915050565b600082610a6857506000610a53565b82820282848281610a7557fe5b0414610a505760405162461bcd60e51b8152600401808060200182810382526021815260200180610c1b6021913960400191505060405180910390fd5b60008183610b3e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b03578181015183820152602001610aeb565b50505050905090810190601f168015610b305780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610b4a57fe5b049594505050505056fe4254432f45544820436861696e6c696e6b207072696365206973207374616c652e546f6b656e2f45544820436861696e6c696e6b207072696365206973207374616c652e546f6b656e2f55534420436861696e6c696e6b207072696365206973207374616c652e4554482f55534420436861696e6c696e6b207072696365206973207374616c652e4e6f20436861696e6c696e6b207072696365206665656420666f756e6420666f72207468697320756e6465726c79696e6720455243323020746f6b656e2e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77546f6b656e2f42544320436861696e6c696e6b207072696365206973207374616c652ea26469706673582212200c83034372f9b00af05a99b751418c9060ff84f60f0ada5242c8411f58f1c75964736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"614:18791:35:-:0;;;2028:13640;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2028:13640:35;2142:28;:60;2257:57;:125;;-1:-1:-1;;;;;;2257:125:35;;;2339:42;2257:125;;;;2402:57;:125;;;;2484:42;2402:125;;;2546:57;:125;;;;2628:42;2546:125;;;2690:57;:125;;;;2772:42;2690:125;;;2833:57;:125;;;;2915:42;2833:125;;;2979:57;:125;;;;3061:42;2979:125;;;3122:57;:125;;;;3204:42;3122:125;;;3266:57;:125;;;;3348:42;3266:125;;;3409:57;:125;;;;3491:42;3409:125;;;;;;3552:57;:125;;;;;;;;;3702:57;:125;;;;3784:42;3702:125;;;3845:57;:125;;;;3927:42;3845:125;;;;;;3995:57;:125;;;;;;;;4147:57;:125;;;;;;;;4297:57;:125;;;;;;;;;4447:57;:125;;;;4529:42;4447:125;;;4591:57;:125;;;;4673:42;4591:125;;;4735:57;:125;;;;4817:42;4735:125;;;4878:57;:125;;;;4960:42;4878:125;;;5022:57;:125;;;;5104:42;5022:125;;;5167:57;:125;;;;5249:42;5167:125;;;5312:57;:125;;;;5394:42;5312:125;;;5455:57;:125;;;;5537:42;5455:125;;;5598:57;:125;;;;5680:42;5598:125;;;5741:57;:125;;;;5823:42;5741:125;;;5884:57;:125;;;;5966:42;5884:125;;;6027:57;:125;;;;6109:42;6027:125;;;6170:57;:125;;;;6252:42;6170:125;;;6313:57;:125;;;;6395:42;6313:125;;;6456:57;:125;;;;6538:42;6456:125;;;6599:57;:125;;;;6681:42;6599:125;;;6744:57;:125;;;;6826:42;6744:125;;;6887:57;:125;;;;6969:42;6887:125;;;7031:57;:125;;;;7113:42;7031:125;;;7175:57;:125;;;;7257:42;7175:125;;;7318:57;:125;;;;7400:42;7318:125;;;7462:57;:125;;;;7544:42;7462:125;;;7605:57;:125;;;;7687:42;7605:125;;;7748:57;:125;;;;7830:42;7748:125;;;7891:57;:125;;;;7973:42;7891:125;;;8034:57;:125;;;;8116:42;8034:125;;;8177:57;:125;;;;8259:42;8177:125;;;8320:57;:125;;;;8402:42;8320:125;;;8463:57;:125;;;;8545:42;8463:125;;;8607:57;:125;;;;8689:42;8607:125;;;8750:57;:125;;;;8832:42;8750:125;;;8893:57;:125;;;;8975:42;8893:125;;;9036:57;:125;;;;9118:42;9036:125;;;9180:57;:125;;;;9262:42;9180:125;;;9323:57;:125;;;;9405:42;9323:125;;;9466:57;:125;;;;9548:42;9466:125;;;9610:57;:125;;;;9692:42;9610:125;;;9755:57;:125;;;;9837:42;9755:125;;;9899:57;:125;;;;9981:42;9899:125;;;10042:57;:125;;;;10124:42;10042:125;;;10185:57;:125;;;;10267:42;10185:125;;;10329:57;:125;;;;10411:42;10329:125;;;10473:57;:125;;;;10555:42;10473:125;;;10616:57;:125;;;;10698:42;10616:125;;;10760:57;:125;;;;10842:42;10760:125;;;10903:57;:125;;;;10985:42;10903:125;;;11046:57;:125;;;;11128:42;11046:125;;;11190:57;:125;;;;11272:42;11190:125;;;11363:57;:125;;;;11445:42;11363:125;;;11513:57;:125;;;;11595:42;11513:125;;;11656:57;:125;;;;11738:42;11656:125;;;11806:57;:125;;;;11888:42;11806:125;;;11956:57;:125;;;;12038:42;11956:125;;;12108:57;:125;;;;12190:42;12108:125;;;12258:57;:125;;;;12340:42;12258:125;;;12408:57;:125;;;;12490:42;12408:125;;;12558:57;:125;;;;12640:42;12558:125;;;12708:57;:125;;;;12790:42;12708:125;;;12851:57;:125;;;;12933:42;12851:125;;;13001:57;:125;;;;13083:42;13001:125;;;13145:57;:125;;;;13227:42;13145:125;;;13295:57;:125;;;;13377:42;13295:125;;;13440:57;:125;;;;13522:42;13440:125;;;13583:57;:125;;;;13665:42;13583:125;;;13726:57;:125;;;;13808:42;13726:125;;;13869:57;:125;;;;13951:42;13869:125;;;14019:57;:125;;;;14101:42;14019:125;;;14171:57;:125;;;;14253:42;14171:125;;;14315:57;:125;;;;14397:42;14315:125;;;14465:57;:125;;;;14547:42;14465:125;;;14615:57;:125;;;;14697:42;14615:125;;;14765:57;:125;;;;14847:42;14765:125;;;14915:57;:125;;;;14997:42;14915:125;;;15065:57;:125;;;;15147:42;15065:125;;;15209:57;:125;;;;15291:42;15209:125;;;15384:13;2028:13640;15384:57;;:125;;;;15466:42;15384:125;;;15542:42;2257:13;15528:57;;:125;;;;;15610:42;15528:125;;;614:18791;;;;;;\",\n  \"deployedSourceMap\": \"614:18791:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15785:249;;;;;;;;;;;;;;;;-1:-1:-1;15785:249:35;-1:-1:-1;;;;;15785:249:35;;:::i;:::-;;;;;;;;;;;;;;;;;;835:62;;;;;;;;;;;;;;;;-1:-1:-1;835:62:35;-1:-1:-1;;;;;835:62:35;;:::i;:::-;;;;-1:-1:-1;;;;;835:62:35;;;;;;;;;;;;;;1189;;;;;;;;;;;;;;;;-1:-1:-1;1189:62:35;-1:-1:-1;;;;;1189:62:35;;:::i;18511:117::-;;;;;;;;;;;;;;;;-1:-1:-1;18511:117:35;-1:-1:-1;;;;;18511:117:35;;:::i;:::-;;;;;;;;;;;;;;;;1334:124;;;:::i;1541:::-;;;:::i;1853:43::-;;;:::i;1012:62::-;;;;;;;;;;;;;;;;-1:-1:-1;1012:62:35;-1:-1:-1;;;;;1012:62:35;;:::i;18753:649::-;;;;;;;;;;;;;;;;-1:-1:-1;18753:649:35;-1:-1:-1;;;;;18753:649:35;;:::i;15785:249::-;-1:-1:-1;;;;;15882:25:35;;;15850:4;15882:25;;;;;;;;;;;15850:4;;15882:25;15874:48;;;:100;;-1:-1:-1;;;;;;15934:25:35;;;15972:1;15934:25;;;:13;:25;;;;;;;15926:48;;15874:100;:152;;;-1:-1:-1;;;;;;15986:25:35;;;16024:1;15986:25;;;:13;:25;;;;;;;15978:48;;15874:152;15867:159;;15785:249;;;;:::o;835:62::-;;;;;;;;;;;;;-1:-1:-1;;;;;835:62:35;;:::o;1189:::-;;;;;;;;;;;;-1:-1:-1;;;;;1189:62:35;;:::o;18511:117::-;18578:4;18602:18;18609:10;18602:6;:18::i;1334:124::-;1415:42;1334:124;:::o;1541:::-;1622:42;1541:124;:::o;1853:43::-;;;;:::o;1012:62::-;;;;;;;;;;;;-1:-1:-1;;;;;1012:62:35;;:::o;18753:649::-;18828:4;18881:6;-1:-1:-1;;;;;18881:15:35;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18881:17:35;18877:34;;;-1:-1:-1;18907:4:35;18900:11;;18877:34;18965:18;19001:6;-1:-1:-1;;;;;18986:34:35;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18986:36:35;;-1:-1:-1;19057:22:35;19082:18;18986:36;19082:6;:18::i;:::-;19057:43;;19149:26;19203:10;-1:-1:-1;;;;;19186:37:35;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19186:39:35;19178:48;;;-1:-1:-1;19266:2:35;19244:24;;;:150;;19334:60;19342:14;-1:-1:-1;;19369:23:35;;19362:2;:31;19334:27;:60::i;:::-;19244:150;;;19271:60;19279:14;19306:2;:23;;;19299:2;:31;19271:27;:60::i;:::-;19237:157;18753:649;-1:-1:-1;;;;;18753:649:35:o;16135:2264::-;16194:4;16262:42;-1:-1:-1;;;;;16248:56:35;;;16244:73;;;-1:-1:-1;16313:4:35;16306:11;;16244:73;-1:-1:-1;;;;;16389:25:35;;;16427:1;16389:25;;;;;;;;;;;;16381:48;16377:2014;;-1:-1:-1;;;;;16496:25:35;;;16449:20;16496:25;;;;;;;;;;;;:43;;-1:-1:-1;;;16496:43:35;;;;16449:20;;;;16496:25;;;:41;;:43;;;;;;;;;;;;;;:25;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16496:43:35;;;;;;;;;16558:28;;16496:43;;-1:-1:-1;16496:43:35;-1:-1:-1;16558:32:35;16554:145;;16631:28;;16619:9;:40;16600:15;:59;;16592:107;;;;-1:-1:-1;;;16592:107:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16738:1;16721:13;:18;;:47;;16767:1;16721:47;;;16750:13;16721:47;16714:54;;;;;;16377:2014;-1:-1:-1;;;;;16798:25:35;;;16836:1;16798:25;;;:13;:25;;;;;;;16790:48;16786:1605;;16858:18;16880:17;1415:42;-1:-1:-1;;;;;16903:34:35;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16903:36:35;;;;;;;;;16958:28;;16903:36;;-1:-1:-1;16903:36:35;-1:-1:-1;16958:32:35;16954:143;;17031:28;;17019:9;:40;17000:15;:59;;16992:105;;;;-1:-1:-1;;;16992:105:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17131:1;17116:11;:16;17112:30;;17141:1;17134:8;;;;;;17112:30;-1:-1:-1;;;;;17227:25:35;;;17157:20;17227:25;;;:13;:25;;;;;;;:43;;-1:-1:-1;;;17227:43:35;;;;17157:20;;17227:25;;:41;;:43;;;;;;;;;;;;;;;:25;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17227:43:35;;;;;;;;;17289:28;;17227:43;;-1:-1:-1;17227:43:35;;-1:-1:-1;17289:32:35;17285:145;;17362:28;;17350:9;:40;17331:15;:59;;17323:107;;;;-1:-1:-1;;;17323:107:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17469:1;17452:13;:18;;:83;;17534:1;17452:83;;;17473:58;17518:11;17473:32;17481:13;17500:4;17473:26;:32::i;:::-;:36;;:58::i;:::-;17445:90;;;;;;;16786:1605;-1:-1:-1;;;;;17565:25:35;;;17603:1;17565:25;;;:13;:25;;;;;;;17557:48;17553:838;;17625:18;17647:17;1622:42;-1:-1:-1;;;;;17670:34:35;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17670:36:35;;;;;;;;;17725:28;;17670:36;;-1:-1:-1;17670:36:35;-1:-1:-1;17725:32:35;17721:143;;17798:28;;17786:9;:40;17767:15;:59;;17759:105;;;;-1:-1:-1;;;17759:105:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17898:1;17883:11;:16;17879:30;;17908:1;17901:8;;;;;;17879:30;-1:-1:-1;;;;;17994:25:35;;;17924:20;17994:25;;;:13;:25;;;;;;;:43;;-1:-1:-1;;;17994:43:35;;;;17924:20;;17994:25;;:41;;:43;;;;;;;;;;;;;;;:25;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17994:43:35;;;;;;;;;18056:28;;17994:43;;-1:-1:-1;17994:43:35;;-1:-1:-1;18056:32:35;18052:145;;18129:28;;18117:9;:40;18098:15;:59;;18090:107;;;;-1:-1:-1;;;18090:107:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18236:1;18219:13;:18;;:82;;18300:1;18219:82;;;18240:57;18293:3;18240:48;18248:13;18275:11;18240:26;:48::i;17553:838::-;18319:72;;-1:-1:-1;;;18319:72:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3120:130:47;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3197:46;;3120:130;;;;;:::o;2199:459::-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:47;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3732:272;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:47:o\",\n  \"source\": \"pragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CToken.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"../external/chainlink/AggregatorV3Interface.sol\\\";\\r\\n\\r\\nimport \\\"./BasePriceOracle.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title PreferredPriceOracle\\r\\n * @notice Returns prices from Chainlink.\\r\\n * @dev Implements `PriceOracle`.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract ChainlinkPriceOracle is PriceOracle, BasePriceOracle {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @notice Maps ERC20 token addresses to ETH-based Chainlink price feed contracts.\\r\\n     */\\r\\n    mapping(address => AggregatorV3Interface) public ethPriceFeeds;\\r\\n\\r\\n    /**\\r\\n     * @notice Maps ERC20 token addresses to USD-based Chainlink price feed contracts.\\r\\n     */\\r\\n    mapping(address => AggregatorV3Interface) public usdPriceFeeds;\\r\\n\\r\\n    /**\\r\\n     * @notice Maps ERC20 token addresses to BTC-based Chainlink price feed contracts.\\r\\n     */\\r\\n    mapping(address => AggregatorV3Interface) public btcPriceFeeds;\\r\\n\\r\\n    /**\\r\\n     * @notice Chainlink ETH/USD price feed contracts.\\r\\n     */\\r\\n    AggregatorV3Interface public constant ETH_USD_PRICE_FEED = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);\\r\\n\\r\\n    /**\\r\\n     * @notice Chainlink BTC/ETH price feed contracts.\\r\\n     */\\r\\n    AggregatorV3Interface public constant BTC_ETH_PRICE_FEED = AggregatorV3Interface(0xdeb288F737066589598e9214E782fa5A8eD689e8);\\r\\n\\r\\n    /**\\r\\n     * @notice The maxmimum number of seconds elapsed since the round was last updated before the price is considered stale. If set to 0, no limit is enforced.\\r\\n     */\\r\\n    uint256 public maxSecondsBeforePriceIsStale;\\r\\n    \\r\\n    /**\\r\\n     * @dev Constructor to set `maxSecondsBeforePriceIsStale` as well as all Chainlink price feeds.\\r\\n     */\\r\\n    constructor(uint256 _maxSecondsBeforePriceIsStale) public {\\r\\n        // Set maxSecondsBeforePriceIsStale\\r\\n        maxSecondsBeforePriceIsStale = _maxSecondsBeforePriceIsStale;\\r\\n\\r\\n        // Set Chainlink ETH price feeds\\r\\n        ethPriceFeeds[0x111111111117dC0aa78b770fA6A738034120C302] = AggregatorV3Interface(0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8); // 1INCH\\r\\n        ethPriceFeeds[0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9] = AggregatorV3Interface(0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012); // AAVE\\r\\n        ethPriceFeeds[0xD46bA6D942050d489DBd938a2C909A5d5039A161] = AggregatorV3Interface(0x492575FDD11a0fCf2C6C719867890a7648d526eB); // AMPL\\r\\n        ethPriceFeeds[0xa117000000f279D81A1D3cc75430fAA017FA5A2e] = AggregatorV3Interface(0x8f83670260F8f7708143b836a2a6F11eF0aBac01); // ANT\\r\\n        ethPriceFeeds[0x3472A5A71965499acd81997a54BBA8D852C6E53d] = AggregatorV3Interface(0x58921Ac140522867bf50b9E009599Da0CA4A2379); // BADGER\\r\\n        ethPriceFeeds[0xba100000625a3754423978a60c9317c58a424e3D] = AggregatorV3Interface(0xC1438AA3823A6Ba0C159CfA8D98dF5A994bA120b); // BAL\\r\\n        ethPriceFeeds[0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55] = AggregatorV3Interface(0x0BDb051e10c9718d1C29efbad442E88D38958274); // BAND\\r\\n        ethPriceFeeds[0x0D8775F648430679A709E98d2b0Cb6250d2887EF] = AggregatorV3Interface(0x0d16d4528239e9ee52fa531af613AcdB23D88c94); // BAT\\r\\n        ethPriceFeeds[0xB8c77482e45F1F44dE1745F52C74426C631bDD52] = AggregatorV3Interface(0xc546d2d06144F9DD42815b8bA46Ee7B8FcAFa4a2); // BNB\\r\\n        ethPriceFeeds[0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848] = AggregatorV3Interface(0xc546d2d06144F9DD42815b8bA46Ee7B8FcAFa4a2); // sBNB = BNB\\r\\n        ethPriceFeeds[0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C] = AggregatorV3Interface(0xCf61d1841B178fe82C8895fe60c2EDDa08314416); // BNT\\r\\n        ethPriceFeeds[0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599] = AggregatorV3Interface(0xdeb288F737066589598e9214E782fa5A8eD689e8); // WBTC = BTC\\r\\n        ethPriceFeeds[0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D] = AggregatorV3Interface(0xdeb288F737066589598e9214E782fa5A8eD689e8); // renBTC = BTC\\r\\n        ethPriceFeeds[0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6] = AggregatorV3Interface(0xdeb288F737066589598e9214E782fa5A8eD689e8); // sBTC = BTC\\r\\n        ethPriceFeeds[0x0316EB71485b0Ab14103307bf65a021042c6d380] = AggregatorV3Interface(0xdeb288F737066589598e9214E782fa5A8eD689e8); // HBTC = BTC\\r\\n        ethPriceFeeds[0x4Fabb145d64652a948d72533023f6E7A623C7C53] = AggregatorV3Interface(0x614715d2Af89E6EC99A233818275142cE88d1Cfd); // BUSD\\r\\n        ethPriceFeeds[0x56d811088235F11C8920698a204A5010a788f4b3] = AggregatorV3Interface(0x8f7C7181Ed1a2BA41cfC3f5d064eF91b67daef66); // BZRX\\r\\n        ethPriceFeeds[0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d] = AggregatorV3Interface(0x75FbD83b4bd51dEe765b2a01e8D3aa1B020F9d33); // CEL\\r\\n        ethPriceFeeds[0xc00e94Cb662C3520282E6f5717214004A7f26888] = AggregatorV3Interface(0x1B39Ee86Ec5979ba5C322b826B3ECb8C79991699); // COMP\\r\\n        ethPriceFeeds[0x4688a8b1F292FDaB17E9a90c8Bc379dC1DBd8713] = AggregatorV3Interface(0x7B6230EF79D5E97C11049ab362c0b685faCBA0C2); // COVER\\r\\n        ethPriceFeeds[0x2ba592F78dB6436527729929AAf6c908497cB200] = AggregatorV3Interface(0x82597CFE6af8baad7c0d441AA82cbC3b51759607); // CREAM\\r\\n        ethPriceFeeds[0xA0b73E1Ff0B80914AB6fe0444E65848C4C34450b] = AggregatorV3Interface(0xcA696a9Eb93b81ADFE6435759A29aB4cf2991A96); // CRO\\r\\n        ethPriceFeeds[0xD533a949740bb3306d119CC777fa900bA034cd52] = AggregatorV3Interface(0x8a12Be339B0cD1829b91Adc01977caa5E9ac121e); // CRV\\r\\n        ethPriceFeeds[0x6B175474E89094C44Da98b954EedeAC495271d0F] = AggregatorV3Interface(0x773616E4d11A78F511299002da57A0a94577F1f4); // DAI\\r\\n        ethPriceFeeds[0xEd91879919B71bB6905f23af0A68d231EcF87b14] = AggregatorV3Interface(0xD010e899f7ab723AC93f825cDC5Aa057669557c2); // DMG\\r\\n        ethPriceFeeds[0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b] = AggregatorV3Interface(0x029849bbc0b1d93b85a8b6190e979fd38F5760E2); // DPI\\r\\n        ethPriceFeeds[0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c] = AggregatorV3Interface(0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B); // ENJ\\r\\n        ethPriceFeeds[0x4E15361FD6b4BB609Fa63C81A2be19d873717870] = AggregatorV3Interface(0x2DE7E4a9488488e0058B95854CC2f7955B35dC9b); // FTM\\r\\n        ethPriceFeeds[0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9] = AggregatorV3Interface(0xF0985f7E2CaBFf22CecC5a71282a89582c382EFE); // FTT\\r\\n        ethPriceFeeds[0xc944E90C64B2c07662A292be6244BDf05Cda44a7] = AggregatorV3Interface(0x17D054eCac33D91F7340645341eFB5DE9009F1C1); // GRT\\r\\n        ethPriceFeeds[0x584bC13c7D411c00c01A62e8019472dE68768430] = AggregatorV3Interface(0xAf5E8D9Cd9fC85725A83BF23C52f1C39A71588a6); // HEGIC\\r\\n        ethPriceFeeds[0xdd974D5C2e2928deA5F71b9825b8b646686BD200] = AggregatorV3Interface(0x656c0544eF4C98A6a98491833A89204Abb045d6b); // KNC\\r\\n        ethPriceFeeds[0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44] = AggregatorV3Interface(0xe7015CCb7E5F788B8c1010FC22343473EaaC3741); // KP3R\\r\\n        ethPriceFeeds[0x514910771AF9Ca656af840dff83E8264EcF986CA] = AggregatorV3Interface(0xDC530D9457755926550b59e8ECcdaE7624181557); // LINK\\r\\n        ethPriceFeeds[0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD] = AggregatorV3Interface(0x160AC928A16C93eD4895C2De6f81ECcE9a7eB7b4); // LRC\\r\\n        ethPriceFeeds[0x0F5D2fB29fb7d3CFeE444a200298f468908cC942] = AggregatorV3Interface(0x82A44D92D6c329826dc557c5E1Be6ebeC5D5FeB9); // MANA\\r\\n        ethPriceFeeds[0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2] = AggregatorV3Interface(0x24551a8Fb2A7211A25a17B1481f043A8a8adC7f2); // MKR\\r\\n        ethPriceFeeds[0xec67005c4E498Ec7f55E092bd1d35cbC47C91892] = AggregatorV3Interface(0xDaeA8386611A157B08829ED4997A8A62B557014C); // MLN\\r\\n        ethPriceFeeds[0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2] = AggregatorV3Interface(0x98334b85De2A8b998Ba844c5521e73D68AD69C00); // MTA\\r\\n        ethPriceFeeds[0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671] = AggregatorV3Interface(0x9cB2A01A7E64992d32A34db7cEea4c919C391f6A); // NMR\\r\\n        ethPriceFeeds[0xd26114cd6EE289AccF82350c8d8487fedB8A0C07] = AggregatorV3Interface(0x57C9aB3e56EE4a83752c181f241120a3DBba06a1); // OMG\\r\\n        ethPriceFeeds[0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a] = AggregatorV3Interface(0xbA9B2a360eb8aBdb677d6d7f27E12De11AA052ef); // ORN\\r\\n        ethPriceFeeds[0x8E870D67F660D95d5be530380D0eC0bd388289E1] = AggregatorV3Interface(0x3a08ebBaB125224b7b6474384Ee39fBb247D2200); // PAX\\r\\n        ethPriceFeeds[0x45804880De22913dAFE09f4980848ECE6EcbAf78] = AggregatorV3Interface(0x9B97304EA12EFed0FAd976FBeCAad46016bf269e); // PAXG\\r\\n        ethPriceFeeds[0x408e41876cCCDC0F92210600ef50372656052a38] = AggregatorV3Interface(0x3147D7203354Dc06D9fd350c7a2437bcA92387a4); // REN\\r\\n        ethPriceFeeds[0x221657776846890989a759BA2973e427DfF5C9bB] = AggregatorV3Interface(0xD4CE430C3b67b3E2F7026D86E7128588629e2455); // REP\\r\\n        ethPriceFeeds[0x607F4C5BB672230e8672085532f7e901544a7375] = AggregatorV3Interface(0x4cba1e1fdc738D0fe8DB3ee07728E2Bc4DA676c6); // RLC\\r\\n        ethPriceFeeds[0x3155BA85D5F96b2d030a4966AF206230e46849cb] = AggregatorV3Interface(0x875D60C44cfbC38BaA4Eb2dDB76A767dEB91b97e); // RUNE\\r\\n        ethPriceFeeds[0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F] = AggregatorV3Interface(0x79291A9d692Df95334B1a0B3B4AE6bC606782f8c); // SNX\\r\\n        ethPriceFeeds[0x476c5E26a75bd202a9683ffD34359C0CC15be0fF] = AggregatorV3Interface(0x050c048c9a0CD0e76f166E2539F87ef2acCEC58f); // SRM\\r\\n        ethPriceFeeds[0x57Ab1ec28D129707052df4dF418D58a2D46d5f51] = AggregatorV3Interface(0x8e0b7e6062272B5eF4524250bFFF8e5Bd3497757); // sUSD\\r\\n        ethPriceFeeds[0x6B3595068778DD592e39A122f4f5a5cF09C90fE2] = AggregatorV3Interface(0xe572CeF69f43c2E488b33924AF04BDacE19079cf); // SUSHI\\r\\n        ethPriceFeeds[0x0000000000085d4780B73119b644AE5ecd22b376] = AggregatorV3Interface(0x3886BA987236181D98F2401c507Fb8BeA7871dF2); // TUSD\\r\\n        ethPriceFeeds[0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828] = AggregatorV3Interface(0xf817B69EA583CAFF291E287CaE00Ea329d22765C); // UMA\\r\\n        ethPriceFeeds[0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984] = AggregatorV3Interface(0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e); // UNI\\r\\n        ethPriceFeeds[0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48] = AggregatorV3Interface(0x986b5E1e1755e3C2440e960477f25201B0a8bbD4); // USDC\\r\\n        ethPriceFeeds[0xdAC17F958D2ee523a2206206994597C13D831ec7] = AggregatorV3Interface(0xEe9F2375b4bdF6387aa8265dD4FB8F16512A1d46); // USDT\\r\\n        ethPriceFeeds[0xa47c8bf37f92aBed4A126BDA807A7b7498661acD] = AggregatorV3Interface(0xa20623070413d42a5C01Db2c8111640DD7A5A03a); // UST\\r\\n        ethPriceFeeds[0x0d438F3b5175Bebc262bF23753C1E53d03432bDE] = AggregatorV3Interface(0xe5Dc0A609Ab8bCF15d3f35cFaa1Ff40f521173Ea); // WNXM\\r\\n        ethPriceFeeds[0xBd356a39BFf2cAda8E9248532DD879147221Cf76] = AggregatorV3Interface(0xcEBD2026d3C99F2a7CE028acf372C154aB4638a9); // WOM\\r\\n        ethPriceFeeds[0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e] = AggregatorV3Interface(0x7c5d4F8345e66f68099581Db340cd65B078C41f4); // YFI\\r\\n        ethPriceFeeds[0xa1d0E215a23d7030842FC67cE582a6aFa3CCaB83] = AggregatorV3Interface(0xaaB2f6b45B28E962B3aCd1ee4fC88aEdDf557756); // YFII\\r\\n        ethPriceFeeds[0xE41d2489571d322189246DaFA5ebDe1F4699F498] = AggregatorV3Interface(0x2Da4983a622a8498bb1a21FaE9D8F6C664939962); // ZRX\\r\\n\\r\\n        // USD price feeds\\r\\n        usdPriceFeeds[0xe36E2D3c7c34281FA3bC737950a68571736880A1] = AggregatorV3Interface(0xAE48c91dF1fE419994FFDa27da09D5aC69c30f55); // sADA = ADA\\r\\n        usdPriceFeeds[0xADE00C28244d5CE17D72E40330B1c318cD12B7c3] = AggregatorV3Interface(0x231e764B44b2C1b7Ca171fa8021A24ed520Cde10); // ADX\\r\\n        usdPriceFeeds[0xF48e200EAF9906362BB1442fca31e0835773b8B4] = AggregatorV3Interface(0x77F9710E7d0A19669A13c055F62cd80d313dF022); // sAUD = AUD\\r\\n        usdPriceFeeds[0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d] = AggregatorV3Interface(0x449d117117838fFA61263B61dA6301AA2a88B13A); // sCHF = CHF\\r\\n        usdPriceFeeds[0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6] = AggregatorV3Interface(0xFb0cADFEa136E9E343cfb55B863a6Df8348ab912); // sDASH = DASH\\r\\n        usdPriceFeeds[0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6] = AggregatorV3Interface(0x1C07AFb8E2B827c5A4739C6d59Ae3A5035f28734); // sDOT = DOT\\r\\n        usdPriceFeeds[0x88C8Cf3A212c0369698D13FE98Fcb76620389841] = AggregatorV3Interface(0x10a43289895eAff840E8d45995BBa89f9115ECEe); // sEOS = EOS\\r\\n        usdPriceFeeds[0x22602469d704BfFb0936c7A7cfcD18f7aA269375] = AggregatorV3Interface(0xaEA2808407B7319A31A383B6F8B60f04BCa23cE2); // sETC = ETC\\r\\n        usdPriceFeeds[0xD71eCFF9342A5Ced620049e616c5035F1dB98620] = AggregatorV3Interface(0xb49f677943BC038e9857d61E7d053CaA2C1734C1); // sEUR = EUR\\r\\n        usdPriceFeeds[0xeF9Cd7882c067686691B6fF49e650b43AFBBCC6B] = AggregatorV3Interface(0x80070f7151BdDbbB1361937ad4839317af99AE6c); // FNX\\r\\n        usdPriceFeeds[0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F] = AggregatorV3Interface(0x5c0Ab2d9b5a7ed9f470386e82BB36A3613cDd4b5); // sGBP = GBP\\r\\n        usdPriceFeeds[0xFA1a856Cfa3409CFa145Fa4e20Eb270dF3EB21ab] = AggregatorV3Interface(0xd0935838935349401c73a06FCde9d63f719e84E5); // IOST\\r\\n        usdPriceFeeds[0xC14103C2141E842e228FBaC594579e798616ce7A] = AggregatorV3Interface(0x6AF09DF7563C363B5763b9102712EbeD3b9e859B); // sLTC = LTC\\r\\n        usdPriceFeeds[0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0] = AggregatorV3Interface(0x7bAC85A8a13A4BcD8abb3eB7d6b4d632c5a57676); // MATIC\\r\\n        usdPriceFeeds[0x4575f41308EC1483f3d399aa9a2826d74Da13Deb] = AggregatorV3Interface(0xd75AAaE4AF0c398ca13e2667Be57AF2ccA8B5de6); // OXT\\r\\n        usdPriceFeeds[0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9] = AggregatorV3Interface(0xFb0CfD6c19e25DB4a08D8a204a387cEa48Cc138f); // SXP\\r\\n        usdPriceFeeds[0x4C19596f5aAfF459fA38B0f7eD92F11AE6543784] = AggregatorV3Interface(0x26929b85fE284EeAB939831002e1928183a10fb1); // TRU\\r\\n        usdPriceFeeds[0xf2E08356588EC5cd9E437552Da87C0076b4970B0] = AggregatorV3Interface(0xacD0D1A29759CC01E8D925371B72cb2b5610EA25); // sTRX = TRX\\r\\n        usdPriceFeeds[0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D] = AggregatorV3Interface(0x1ceDaaB50936881B3e449e47e40A2cDAF5576A4a); // sTSLA = TSLA\\r\\n        usdPriceFeeds[0x1c48f86ae57291F7686349F12601910BD8D470bb] = AggregatorV3Interface(0xfAC81Ea9Dd29D8E9b212acd6edBEb6dE38Cb43Af); // USDK\\r\\n        usdPriceFeeds[0x6A22e5e94388464181578Aa7A6B869e00fE27846] = AggregatorV3Interface(0x379589227b15F1a12195D3f2d90bBc9F31f95235); // sXAG = XAG\\r\\n        usdPriceFeeds[0x261EfCdD24CeA98652B9700800a13DfBca4103fF] = AggregatorV3Interface(0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6); // sXAU = XAU\\r\\n        usdPriceFeeds[0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A] = AggregatorV3Interface(0xFA66458Cce7Dd15D8650015c4fce4D278271618F); // sXMR = XMR\\r\\n        usdPriceFeeds[0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c] = AggregatorV3Interface(0xCed2660c6Dd1Ffd856A5A82C67f3482d88C50b12); // sXRP = XRP\\r\\n        usdPriceFeeds[0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd] = AggregatorV3Interface(0x5239a625dEb44bF3EeAc2CD5366ba24b8e9DB63F); // sXTZ = XTZ\\r\\n        usdPriceFeeds[0xeABACD844A196D7Faf3CE596edeBF9900341B420] = AggregatorV3Interface(0x283D433435cFCAbf00263beEF6A362b7cc5ed9f2); // sCEX\\r\\n        usdPriceFeeds[0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B] = AggregatorV3Interface(0xa8E875F94138B0C5b51d1e1d5dE35bbDdd28EA87); // sDEFI\\r\\n\\r\\n        // BTC price feeds\\r\\n        btcPriceFeeds[0x798D1bE841a82a273720CE31c822C61a67a601C3] = AggregatorV3Interface(0x418a6C98CD5B8275955f08F0b8C1c6838c8b1685); // DIGG\\r\\n        btcPriceFeeds[0xF970b8E36e23F7fC3FD752EeA86f8Be8D83375A6] = AggregatorV3Interface(0xEa0b3DCa635f4a4E77D9654C5c18836EE771566e); // RCN\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Returns a boolean indicating if a price feed exists for the underlying asset.\\r\\n     */\\r\\n    function hasPriceFeed(address underlying) external view returns (bool) {\\r\\n        return address(ethPriceFeeds[underlying]) != address(0) || address(usdPriceFeeds[underlying]) != address(0) || address(btcPriceFeeds[underlying]) != address(0);\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Internal function returning the price in ETH of `underlying`.\\r\\n     */\\r\\n    function _price(address underlying) internal view returns (uint) {\\r\\n        // Return 1e18 for WETH\\r\\n        if (underlying == 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) return 1e18;\\r\\n\\r\\n        // Get token/ETH price from Chainlink\\r\\n        if (address(ethPriceFeeds[underlying]) != address(0)) {\\r\\n            (, int256 tokenEthPrice, , uint256 updatedAt, ) = ethPriceFeeds[underlying].latestRoundData();\\r\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= updatedAt + maxSecondsBeforePriceIsStale, \\\"Token/ETH Chainlink price is stale.\\\");\\r\\n            return tokenEthPrice >= 0 ? uint256(tokenEthPrice) : 0;\\r\\n        } else if (address(usdPriceFeeds[underlying]) != address(0)) {\\r\\n            (, int256 ethUsdPrice, , uint256 updatedAt, ) = ETH_USD_PRICE_FEED.latestRoundData();\\r\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= updatedAt + maxSecondsBeforePriceIsStale, \\\"ETH/USD Chainlink price is stale.\\\");\\r\\n            if (ethUsdPrice <= 0) return 0;\\r\\n            int256 tokenUsdPrice;\\r\\n            (, tokenUsdPrice, , updatedAt, ) = usdPriceFeeds[underlying].latestRoundData();\\r\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= updatedAt + maxSecondsBeforePriceIsStale, \\\"Token/USD Chainlink price is stale.\\\");\\r\\n            return tokenUsdPrice >= 0 ? uint256(tokenUsdPrice).mul(1e18).div(uint256(ethUsdPrice)) : 0;\\r\\n        } else if (address(btcPriceFeeds[underlying]) != address(0)) {\\r\\n            (, int256 btcEthPrice, , uint256 updatedAt, ) = BTC_ETH_PRICE_FEED.latestRoundData();\\r\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= updatedAt + maxSecondsBeforePriceIsStale, \\\"BTC/ETH Chainlink price is stale.\\\");\\r\\n            if (btcEthPrice <= 0) return 0;\\r\\n            int256 tokenBtcPrice;\\r\\n            (, tokenBtcPrice, , updatedAt, ) = btcPriceFeeds[underlying].latestRoundData();\\r\\n            if (maxSecondsBeforePriceIsStale > 0) require(block.timestamp <= updatedAt + maxSecondsBeforePriceIsStale, \\\"Token/BTC Chainlink price is stale.\\\");\\r\\n            return tokenBtcPrice >= 0 ? uint256(tokenBtcPrice).mul(uint256(btcEthPrice)).div(1e8) : 0;\\r\\n        } else revert(\\\"No Chainlink price feed found for this underlying ERC20 token.\\\");\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\\r\\n     */\\r\\n    function price(address underlying) external override view returns (uint) {\\r\\n        return _price(underlying);\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        // Return 1e18 for ETH\\r\\n        if (cToken.isCEther()) return 1e18;\\r\\n\\r\\n        // Get underlying token address\\r\\n        address underlying = CErc20(address(cToken)).underlying();\\r\\n\\r\\n        // Get price\\r\\n        uint256 chainlinkPrice = _price(underlying);\\r\\n\\r\\n        // Format and return price\\r\\n        uint256 underlyingDecimals = uint256(ERC20Upgradeable(underlying).decimals());\\r\\n        return underlyingDecimals <= 18 ? uint256(chainlinkPrice).mul(10 ** (18 - underlyingDecimals)) : uint256(chainlinkPrice).div(10 ** (underlyingDecimals - 18));\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:\\\\Users\\\\david\\\\Dropbox\\\\Rari\\\\v1\\\\fuse-contracts\\\\contracts\\\\oracles\\\\ChainlinkPriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/ChainlinkPriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"ChainlinkPriceOracle\": [8905]\n    },\n    \"id\": 8906,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 7740,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:35\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 7741,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 8906,\n        \"sourceUnit\": 10933,\n        \"src\": \"27:74:35\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"id\": 7742,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 8906,\n        \"sourceUnit\": 11534,\n        \"src\": \"103:78:35\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 7743,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 8906,\n        \"sourceUnit\": 6024,\n        \"src\": \"185:46:35\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 7744,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 8906,\n        \"sourceUnit\": 5867,\n        \"src\": \"233:41:35\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 7745,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 8906,\n        \"sourceUnit\": 5724,\n        \"src\": \"276:41:35\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/chainlink/AggregatorV3Interface.sol\",\n        \"file\": \"../external/chainlink/AggregatorV3Interface.sol\",\n        \"id\": 7746,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 8906,\n        \"sourceUnit\": 5701,\n        \"src\": \"321:57:35\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n        \"file\": \"./BasePriceOracle.sol\",\n        \"id\": 7747,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 8906,\n        \"sourceUnit\": 7739,\n        \"src\": \"382:31:35\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 7749,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"647:11:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 7750,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"647:11:35\"\n          },\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 7751,\n              \"name\": \"BasePriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 7738,\n              \"src\": \"660:15:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_BasePriceOracle_$7738\",\n                \"typeString\": \"contract BasePriceOracle\"\n              }\n            },\n            \"id\": 7752,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"660:15:35\"\n          }\n        ],\n        \"contractDependencies\": [6023, 7738],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 7748,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"417:195:35\",\n          \"text\": \" @title PreferredPriceOracle\\n @notice Returns prices from Chainlink.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 8905,\n        \"linearizedBaseContracts\": [8905, 7738, 6023],\n        \"name\": \"ChainlinkPriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 7755,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 7753,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 10932,\n              \"src\": \"689:19:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$10932\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"683:38:35\",\n            \"typeName\": {\n              \"id\": 7754,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"713:7:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 7756,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"729:100:35\",\n              \"text\": \" @notice Maps ERC20 token addresses to ETH-based Chainlink price feed contracts.\"\n            },\n            \"functionSelector\": \"1c5ed620\",\n            \"id\": 7760,\n            \"mutability\": \"mutable\",\n            \"name\": \"ethPriceFeeds\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 8905,\n            \"src\": \"835:62:35\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n              \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n            },\n            \"typeName\": {\n              \"id\": 7759,\n              \"keyType\": {\n                \"id\": 7757,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"843:7:35\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"835:41:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n              },\n              \"valueType\": {\n                \"contractScope\": null,\n                \"id\": 7758,\n                \"name\": \"AggregatorV3Interface\",\n                \"nodeType\": \"UserDefinedTypeName\",\n                \"referencedDeclaration\": 5700,\n                \"src\": \"854:21:35\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                  \"typeString\": \"contract AggregatorV3Interface\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 7761,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"906:100:35\",\n              \"text\": \" @notice Maps ERC20 token addresses to USD-based Chainlink price feed contracts.\"\n            },\n            \"functionSelector\": \"f0e0626f\",\n            \"id\": 7765,\n            \"mutability\": \"mutable\",\n            \"name\": \"usdPriceFeeds\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 8905,\n            \"src\": \"1012:62:35\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n              \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n            },\n            \"typeName\": {\n              \"id\": 7764,\n              \"keyType\": {\n                \"id\": 7762,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"1020:7:35\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"1012:41:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n              },\n              \"valueType\": {\n                \"contractScope\": null,\n                \"id\": 7763,\n                \"name\": \"AggregatorV3Interface\",\n                \"nodeType\": \"UserDefinedTypeName\",\n                \"referencedDeclaration\": 5700,\n                \"src\": \"1031:21:35\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                  \"typeString\": \"contract AggregatorV3Interface\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 7766,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1083:100:35\",\n              \"text\": \" @notice Maps ERC20 token addresses to BTC-based Chainlink price feed contracts.\"\n            },\n            \"functionSelector\": \"36bfdf72\",\n            \"id\": 7770,\n            \"mutability\": \"mutable\",\n            \"name\": \"btcPriceFeeds\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 8905,\n            \"src\": \"1189:62:35\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n              \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n            },\n            \"typeName\": {\n              \"id\": 7769,\n              \"keyType\": {\n                \"id\": 7767,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"1197:7:35\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"1189:41:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n              },\n              \"valueType\": {\n                \"contractScope\": null,\n                \"id\": 7768,\n                \"name\": \"AggregatorV3Interface\",\n                \"nodeType\": \"UserDefinedTypeName\",\n                \"referencedDeclaration\": 5700,\n                \"src\": \"1208:21:35\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                  \"typeString\": \"contract AggregatorV3Interface\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 7771,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1260:68:35\",\n              \"text\": \" @notice Chainlink ETH/USD price feed contracts.\"\n            },\n            \"functionSelector\": \"b0f0abe9\",\n            \"id\": 7776,\n            \"mutability\": \"constant\",\n            \"name\": \"ETH_USD_PRICE_FEED\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 8905,\n            \"src\": \"1334:124:35\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n              \"typeString\": \"contract AggregatorV3Interface\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 7772,\n              \"name\": \"AggregatorV3Interface\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 5700,\n              \"src\": \"1334:21:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                \"typeString\": \"contract AggregatorV3Interface\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"arguments\": [\n                {\n                  \"argumentTypes\": null,\n                  \"hexValue\": \"307835663465433344663963626434333731344645323734306635453336313631353563356238343139\",\n                  \"id\": 7774,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"kind\": \"number\",\n                  \"lValueRequested\": false,\n                  \"nodeType\": \"Literal\",\n                  \"src\": \"1415:42:35\",\n                  \"subdenomination\": null,\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"value\": \"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419\"\n                }\n              ],\n              \"expression\": {\n                \"argumentTypes\": [\n                  {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  }\n                ],\n                \"id\": 7773,\n                \"name\": \"AggregatorV3Interface\",\n                \"nodeType\": \"Identifier\",\n                \"overloadedDeclarations\": [],\n                \"referencedDeclaration\": 5700,\n                \"src\": \"1393:21:35\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                  \"typeString\": \"type(contract AggregatorV3Interface)\"\n                }\n              },\n              \"id\": 7775,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"typeConversion\",\n              \"lValueRequested\": false,\n              \"names\": [],\n              \"nodeType\": \"FunctionCall\",\n              \"src\": \"1393:65:35\",\n              \"tryCall\": false,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                \"typeString\": \"contract AggregatorV3Interface\"\n              }\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 7777,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1467:68:35\",\n              \"text\": \" @notice Chainlink BTC/ETH price feed contracts.\"\n            },\n            \"functionSelector\": \"cf0b0613\",\n            \"id\": 7782,\n            \"mutability\": \"constant\",\n            \"name\": \"BTC_ETH_PRICE_FEED\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 8905,\n            \"src\": \"1541:124:35\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n              \"typeString\": \"contract AggregatorV3Interface\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 7778,\n              \"name\": \"AggregatorV3Interface\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 5700,\n              \"src\": \"1541:21:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                \"typeString\": \"contract AggregatorV3Interface\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"arguments\": [\n                {\n                  \"argumentTypes\": null,\n                  \"hexValue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                  \"id\": 7780,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"kind\": \"number\",\n                  \"lValueRequested\": false,\n                  \"nodeType\": \"Literal\",\n                  \"src\": \"1622:42:35\",\n                  \"subdenomination\": null,\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                }\n              ],\n              \"expression\": {\n                \"argumentTypes\": [\n                  {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  }\n                ],\n                \"id\": 7779,\n                \"name\": \"AggregatorV3Interface\",\n                \"nodeType\": \"Identifier\",\n                \"overloadedDeclarations\": [],\n                \"referencedDeclaration\": 5700,\n                \"src\": \"1600:21:35\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                  \"typeString\": \"type(contract AggregatorV3Interface)\"\n                }\n              },\n              \"id\": 7781,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"typeConversion\",\n              \"lValueRequested\": false,\n              \"names\": [],\n              \"nodeType\": \"FunctionCall\",\n              \"src\": \"1600:65:35\",\n              \"tryCall\": false,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                \"typeString\": \"contract AggregatorV3Interface\"\n              }\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 7783,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1674:173:35\",\n              \"text\": \" @notice The maxmimum number of seconds elapsed since the round was last updated before the price is considered stale. If set to 0, no limit is enforced.\"\n            },\n            \"functionSelector\": \"e073a241\",\n            \"id\": 7785,\n            \"mutability\": \"mutable\",\n            \"name\": \"maxSecondsBeforePriceIsStale\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 8905,\n            \"src\": \"1853:43:35\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 7784,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1853:7:35\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 8531,\n              \"nodeType\": \"Block\",\n              \"src\": \"2086:13582:35\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7793,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7791,\n                      \"name\": \"maxSecondsBeforePriceIsStale\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7785,\n                      \"src\": \"2142:28:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 7792,\n                      \"name\": \"_maxSecondsBeforePriceIsStale\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7788,\n                      \"src\": \"2173:29:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2142:60:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 7794,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2142:60:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7801,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7795,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"2257:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7797,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307831313131313131313131313764433061613738623737306641364137333830333431323043333032\",\n                        \"id\": 7796,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2271:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x111111111117dC0aa78b770fA6A738034120C302\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2257:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307837324146414543463939433964394338323135664634344337374239344239394332383734316538\",\n                          \"id\": 7799,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2339:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7798,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"2317:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7800,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2317:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"2257:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7802,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2257:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7809,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7803,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"2402:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7805,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307837466336363530306338344137364164376539633933343337624663354163333345324444614539\",\n                        \"id\": 7804,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2416:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2402:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307836446630394539373563383330454361653562643465443964393066334139356134663838303132\",\n                          \"id\": 7807,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2484:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7806,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"2462:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7808,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2462:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"2402:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7810,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2402:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7817,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7811,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"2546:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7813,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307844343662413644393432303530643438394442643933386132433930394135643530333941313631\",\n                        \"id\": 7812,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2560:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xD46bA6D942050d489DBd938a2C909A5d5039A161\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2546:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307834393235373546444431316130664366324336433731393836373839306137363438643532366542\",\n                          \"id\": 7815,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2628:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x492575FDD11a0fCf2C6C719867890a7648d526eB\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7814,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"2606:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7816,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2606:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"2546:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7818,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2546:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7825,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7819,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"2690:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7821,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307861313137303030303030663237394438314131443363633735343330664141303137464135413265\",\n                        \"id\": 7820,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2704:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xa117000000f279D81A1D3cc75430fAA017FA5A2e\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2690:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307838663833363730323630463866373730383134336238333661326136463131654630614261633031\",\n                          \"id\": 7823,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2772:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x8f83670260F8f7708143b836a2a6F11eF0aBac01\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7822,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"2750:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7824,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2750:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"2690:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7826,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2690:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7833,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7827,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"2833:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7829,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307833343732413541373139363534393961636438313939376135344242413844383532433645353364\",\n                        \"id\": 7828,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2847:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x3472A5A71965499acd81997a54BBA8D852C6E53d\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2833:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307835383932314163313430353232383637626635306239453030393539394461304341344132333739\",\n                          \"id\": 7831,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2915:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x58921Ac140522867bf50b9E009599Da0CA4A2379\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7830,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"2893:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7832,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2893:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"2833:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7834,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2833:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7841,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7835,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"2979:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7837,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307862613130303030303632356133373534343233393738613630633933313763353861343234653344\",\n                        \"id\": 7836,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2993:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xba100000625a3754423978a60c9317c58a424e3D\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2979:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307843313433384141333832334136426130433135394366413844393864463541393934624131323062\",\n                          \"id\": 7839,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3061:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xC1438AA3823A6Ba0C159CfA8D98dF5A994bA120b\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7838,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"3039:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7840,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3039:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"2979:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7842,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2979:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7849,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7843,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"3122:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7845,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307842413131443030633566373432353566353661354533363646344637376635413138366437663535\",\n                        \"id\": 7844,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3136:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"3122:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307830424462303531653130633937313864314332396566626164343432453838443338393538323734\",\n                          \"id\": 7847,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3204:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x0BDb051e10c9718d1C29efbad442E88D38958274\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7846,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"3182:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7848,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3182:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"3122:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7850,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3122:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7857,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7851,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"3266:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7853,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307830443837373546363438343330363739413730394539386432623043623632353064323838374546\",\n                        \"id\": 7852,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3280:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x0D8775F648430679A709E98d2b0Cb6250d2887EF\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"3266:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307830643136643435323832333965396565353266613533316166363133416364423233443838633934\",\n                          \"id\": 7855,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3348:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x0d16d4528239e9ee52fa531af613AcdB23D88c94\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7854,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"3326:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7856,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3326:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"3266:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7858,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3266:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7865,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7859,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"3409:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7861,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307842386337373438326534354631463434644531373435463532433734343236433633316244443532\",\n                        \"id\": 7860,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3423:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xB8c77482e45F1F44dE1745F52C74426C631bDD52\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"3409:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307863353436643264303631343446394444343238313562386241343645653742384663414661346132\",\n                          \"id\": 7863,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3491:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xc546d2d06144F9DD42815b8bA46Ee7B8FcAFa4a2\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7862,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"3469:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7864,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3469:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"3409:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7866,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3409:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7873,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7867,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"3552:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7869,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307836313761654342363133374235313038443145374434393138653337323543386345626442383438\",\n                        \"id\": 7868,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3566:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"3552:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307863353436643264303631343446394444343238313562386241343645653742384663414661346132\",\n                          \"id\": 7871,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3634:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xc546d2d06144F9DD42815b8bA46Ee7B8FcAFa4a2\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7870,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"3612:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7872,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3612:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"3552:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7874,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3552:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7881,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7875,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"3702:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7877,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307831463537334436466233463133643638394646383434423463453337373934643739613746463143\",\n                        \"id\": 7876,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3716:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"3702:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307843663631643138343142313738666538324338383935666536306332454444613038333134343136\",\n                          \"id\": 7879,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3784:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xCf61d1841B178fe82C8895fe60c2EDDa08314416\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7878,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"3762:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7880,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3762:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"3702:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7882,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3702:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7889,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7883,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"3845:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7885,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307832323630464143354535353432613737334161343466424366654466374331393362633243353939\",\n                        \"id\": 7884,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3859:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"3845:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                          \"id\": 7887,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3927:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7886,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"3905:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7888,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3905:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"3845:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7890,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3845:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7897,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7891,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"3995:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7893,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307845423443323738316534656241383034434539613938303343363764303839333433366242323744\",\n                        \"id\": 7892,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4009:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"3995:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                          \"id\": 7895,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"4077:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7894,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"4055:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7896,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"4055:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"3995:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7898,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3995:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7905,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7899,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"4147:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7901,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307866453138626536623342643838413244324137663932386430303239324537613939363343664336\",\n                        \"id\": 7900,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4161:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"4147:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                          \"id\": 7903,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"4229:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7902,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"4207:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7904,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"4207:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"4147:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7906,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4147:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7913,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7907,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"4297:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7909,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307830333136454237313438356230416231343130333330376266363561303231303432633664333830\",\n                        \"id\": 7908,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4311:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x0316EB71485b0Ab14103307bf65a021042c6d380\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"4297:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                          \"id\": 7911,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"4379:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7910,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"4357:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7912,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"4357:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"4297:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7914,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4297:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7921,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7915,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"4447:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7917,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307834466162623134356436343635326139343864373235333330323366364537413632334337433533\",\n                        \"id\": 7916,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4461:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x4Fabb145d64652a948d72533023f6E7A623C7C53\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"4447:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307836313437313564324166383945364543393941323333383138323735313432634538386431436664\",\n                          \"id\": 7919,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"4529:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x614715d2Af89E6EC99A233818275142cE88d1Cfd\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7918,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"4507:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7920,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"4507:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"4447:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7922,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4447:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7929,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7923,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"4591:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7925,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307835366438313130383832333546313143383932303639386132303441353031306137383866346233\",\n                        \"id\": 7924,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4605:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x56d811088235F11C8920698a204A5010a788f4b3\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"4591:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307838663743373138314564316132424134316366433366356430363465463931623637646165663636\",\n                          \"id\": 7927,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"4673:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x8f7C7181Ed1a2BA41cfC3f5d064eF91b67daef66\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7926,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"4651:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7928,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"4651:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"4591:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7930,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4591:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7937,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7931,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"4735:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7933,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307861614145424536466534384535346634333162304333393043666146306230313764303944343264\",\n                        \"id\": 7932,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4749:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"4735:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307837354662443833623462643531644565373635623261303165384433616131423032304639643333\",\n                          \"id\": 7935,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"4817:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x75FbD83b4bd51dEe765b2a01e8D3aa1B020F9d33\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7934,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"4795:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7936,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"4795:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"4735:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7938,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4735:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7945,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7939,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"4878:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7941,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307863303065393443623636324333353230323832453666353731373231343030344137663236383838\",\n                        \"id\": 7940,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4892:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xc00e94Cb662C3520282E6f5717214004A7f26888\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"4878:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307831423339456538364563353937396261354333323262383236423345436238433739393931363939\",\n                          \"id\": 7943,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"4960:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x1B39Ee86Ec5979ba5C322b826B3ECb8C79991699\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7942,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"4938:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7944,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"4938:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"4878:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7946,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4878:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7953,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7947,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"5022:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7949,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307834363838613862314632393246446142313745396139306338426333373964433144426438373133\",\n                        \"id\": 7948,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"5036:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x4688a8b1F292FDaB17E9a90c8Bc379dC1DBd8713\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"5022:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307837423632333045463739443545393743313130343961623336326330623638356661434241304332\",\n                          \"id\": 7951,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5104:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x7B6230EF79D5E97C11049ab362c0b685faCBA0C2\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7950,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"5082:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7952,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5082:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"5022:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7954,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5022:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7961,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7955,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"5167:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7957,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307832626135393246373864423634333635323737323939323941416636633930383439376342323030\",\n                        \"id\": 7956,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"5181:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x2ba592F78dB6436527729929AAf6c908497cB200\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"5167:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307838323539374346453661663862616164376330643434314141383263624333623531373539363037\",\n                          \"id\": 7959,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5249:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x82597CFE6af8baad7c0d441AA82cbC3b51759607\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7958,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"5227:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7960,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5227:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"5167:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7962,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5167:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7969,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7963,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"5312:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7965,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307841306237334531466630423830393134414236666530343434453635383438433443333434353062\",\n                        \"id\": 7964,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"5326:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xA0b73E1Ff0B80914AB6fe0444E65848C4C34450b\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"5312:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307863413639366139456239336238314144464536343335373539413239614234636632393931413936\",\n                          \"id\": 7967,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5394:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xcA696a9Eb93b81ADFE6435759A29aB4cf2991A96\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7966,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"5372:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7968,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5372:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"5312:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7970,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5312:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7977,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7971,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"5455:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7973,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307844353333613934393734306262333330366431313943433737376661393030624130333463643532\",\n                        \"id\": 7972,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"5469:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xD533a949740bb3306d119CC777fa900bA034cd52\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"5455:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307838613132426533333942306344313832396239314164633031393737636161354539616331323165\",\n                          \"id\": 7975,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5537:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x8a12Be339B0cD1829b91Adc01977caa5E9ac121e\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7974,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"5515:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7976,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5515:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"5455:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7978,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5455:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7985,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7979,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"5598:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7981,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307836423137353437344538393039344334344461393862393534456564654143343935323731643046\",\n                        \"id\": 7980,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"5612:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x6B175474E89094C44Da98b954EedeAC495271d0F\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"5598:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307837373336313645346431314137384635313132393930303264613537413061393435373746316634\",\n                          \"id\": 7983,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5680:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x773616E4d11A78F511299002da57A0a94577F1f4\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7982,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"5658:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7984,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5658:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"5598:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7986,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5598:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 7993,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7987,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"5741:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7989,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307845643931383739393139423731624236393035663233616630413638643233314563463837623134\",\n                        \"id\": 7988,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"5755:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xEd91879919B71bB6905f23af0A68d231EcF87b14\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"5741:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307844303130653839396637616237323341433933663832356344433541613035373636393535376332\",\n                          \"id\": 7991,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5823:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xD010e899f7ab723AC93f825cDC5Aa057669557c2\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7990,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"5801:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7992,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5801:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"5741:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 7994,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5741:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8001,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 7995,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"5884:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 7997,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307831343934434131463131443438376332624265343534334539303038304165426134424133433262\",\n                        \"id\": 7996,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"5898:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"5884:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307830323938343962626330623164393362383561386236313930653937396664333846353736304532\",\n                          \"id\": 7999,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5966:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x029849bbc0b1d93b85a8b6190e979fd38F5760E2\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 7998,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"5944:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8000,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5944:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"5884:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8002,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5884:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8009,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8003,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"6027:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8005,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307846363239634264393464333739314339323530313532424438646642444633383045326133423963\",\n                        \"id\": 8004,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"6041:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"6027:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307832344439614235313935304633643632453931343466644332663331333544414136436538443142\",\n                          \"id\": 8007,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6109:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8006,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"6087:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8008,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6087:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"6027:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8010,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"6027:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8017,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8011,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"6170:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8013,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307834453135333631464436623442423630394661363343383141326265313964383733373137383730\",\n                        \"id\": 8012,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"6184:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x4E15361FD6b4BB609Fa63C81A2be19d873717870\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"6170:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307832444537453461393438383438386530303538423935383534434332663739353542333564433962\",\n                          \"id\": 8015,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6252:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x2DE7E4a9488488e0058B95854CC2f7955B35dC9b\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8014,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"6230:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8016,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6230:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"6170:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8018,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"6170:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8025,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8019,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"6313:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8021,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307835304431633937373139303234373630373665434663384232413833416436623933353561346339\",\n                        \"id\": 8020,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"6327:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"6313:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307846303938356637453243614246663232436563433561373132383261383935383263333832454645\",\n                          \"id\": 8023,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6395:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xF0985f7E2CaBFf22CecC5a71282a89582c382EFE\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8022,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"6373:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8024,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6373:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"6313:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8026,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"6313:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8033,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8027,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"6456:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8029,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307863393434453930433634423263303736363241323932626536323434424466303543646134346137\",\n                        \"id\": 8028,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"6470:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xc944E90C64B2c07662A292be6244BDf05Cda44a7\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"6456:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307831374430353465436163333344393146373334303634353334316546423544453930303946314331\",\n                          \"id\": 8031,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6538:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x17D054eCac33D91F7340645341eFB5DE9009F1C1\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8030,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"6516:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8032,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6516:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"6456:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8034,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"6456:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8041,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8035,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"6599:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8037,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307835383462433133633744343131633030633031413632653830313934373264453638373638343330\",\n                        \"id\": 8036,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"6613:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x584bC13c7D411c00c01A62e8019472dE68768430\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"6599:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307841663545384439436439664338353732354138334246323343353266314333394137313538386136\",\n                          \"id\": 8039,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6681:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xAf5E8D9Cd9fC85725A83BF23C52f1C39A71588a6\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8038,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"6659:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8040,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6659:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"6599:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8042,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"6599:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8049,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8043,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"6744:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8045,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307864643937344435433265323932386465413546373162393832356238623634363638364244323030\",\n                        \"id\": 8044,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"6758:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xdd974D5C2e2928deA5F71b9825b8b646686BD200\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"6744:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307836353663303534346546344339384136613938343931383333413839323034416262303435643662\",\n                          \"id\": 8047,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6826:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x656c0544eF4C98A6a98491833A89204Abb045d6b\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8046,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"6804:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8048,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6804:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"6744:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8050,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"6744:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8057,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8051,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"6887:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8053,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307831634542356342353743344434453262323433333634316239354464333330413333313835413434\",\n                        \"id\": 8052,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"6901:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"6887:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307865373031354343623745354637383842386331303130464332323334333437334561614333373431\",\n                          \"id\": 8055,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6969:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xe7015CCb7E5F788B8c1010FC22343473EaaC3741\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8054,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"6947:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8056,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6947:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"6887:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8058,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"6887:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8065,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8059,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"7031:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8061,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307835313439313037373141463943613635366166383430646666383345383236344563463938364341\",\n                        \"id\": 8060,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"7045:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x514910771AF9Ca656af840dff83E8264EcF986CA\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"7031:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307844433533304439343537373535393236353530623539653845436364614537363234313831353537\",\n                          \"id\": 8063,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"7113:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xDC530D9457755926550b59e8ECcdaE7624181557\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8062,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"7091:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8064,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"7091:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"7031:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8066,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"7031:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8073,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8067,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"7175:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8069,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307842426262434136413930316339323646323430623839456163423634316438416563374145616644\",\n                        \"id\": 8068,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"7189:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"7175:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307831363041433932384131364339336544343839354332446536663831454363453961376542376234\",\n                          \"id\": 8071,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"7257:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x160AC928A16C93eD4895C2De6f81ECcE9a7eB7b4\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8070,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"7235:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8072,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"7235:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"7175:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8074,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"7175:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8081,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8075,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"7318:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8077,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307830463544326642323966623764334346654534343461323030323938663436383930386343393432\",\n                        \"id\": 8076,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"7332:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x0F5D2fB29fb7d3CFeE444a200298f468908cC942\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"7318:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307838324134344439324436633332393832366463353537633545314265366562654335443546654239\",\n                          \"id\": 8079,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"7400:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x82A44D92D6c329826dc557c5E1Be6ebeC5D5FeB9\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8078,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"7378:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8080,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"7378:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"7318:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8082,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"7318:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8089,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8083,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"7462:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8085,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307839663846373261413933303463384235393364353535463132654636353839634333413537394132\",\n                        \"id\": 8084,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"7476:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"7462:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307832343535316138466232413732313141323561313742313438316630343341386138616443376632\",\n                          \"id\": 8087,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"7544:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x24551a8Fb2A7211A25a17B1481f043A8a8adC7f2\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8086,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"7522:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8088,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"7522:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"7462:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8090,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"7462:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8097,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8091,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"7605:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8093,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307865633637303035633445343938456337663535453039326264316433356362433437433931383932\",\n                        \"id\": 8092,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"7619:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xec67005c4E498Ec7f55E092bd1d35cbC47C91892\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"7605:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307844616541383338363631314131353742303838323945443439393741384136324235353730313443\",\n                          \"id\": 8095,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"7687:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xDaeA8386611A157B08829ED4997A8A62B557014C\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8094,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"7665:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8096,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"7665:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"7605:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8098,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"7605:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8105,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8099,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"7748:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8101,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307861334265443445316337354430306661366634453545363932324442373236314235453941634432\",\n                        \"id\": 8100,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"7762:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"7748:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307839383333346238354465324138623939384261383434633535323165373344363841443639433030\",\n                          \"id\": 8103,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"7830:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x98334b85De2A8b998Ba844c5521e73D68AD69C00\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8102,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"7808:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8104,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"7808:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"7748:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8106,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"7748:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8113,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8107,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"7891:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8109,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307831373736653146323666393862314135644639634433343739353361323664643343623436363731\",\n                        \"id\": 8108,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"7905:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"7891:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307839634232413031413745363439393264333241333464623763456561346339313943333931663641\",\n                          \"id\": 8111,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"7973:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x9cB2A01A7E64992d32A34db7cEea4c919C391f6A\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8110,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"7951:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8112,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"7951:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"7891:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8114,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"7891:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8121,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8115,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"8034:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8117,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307864323631313463643645453238394163634638323335306338643834383766656442384130433037\",\n                        \"id\": 8116,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"8048:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xd26114cd6EE289AccF82350c8d8487fedB8A0C07\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"8034:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307835374339614233653536454534613833373532633138316632343131323061334442626130366131\",\n                          \"id\": 8119,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"8116:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x57C9aB3e56EE4a83752c181f241120a3DBba06a1\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8118,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"8094:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8120,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"8094:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"8034:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8122,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"8034:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8129,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8123,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"8177:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8125,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307830323538463437343738364464466433374142434536646636424262314464356466433434333461\",\n                        \"id\": 8124,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"8191:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"8177:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307862413942326133363065623861426462363737643664376632374531324465313141413035326566\",\n                          \"id\": 8127,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"8259:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xbA9B2a360eb8aBdb677d6d7f27E12De11AA052ef\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8126,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"8237:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8128,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"8237:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"8177:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8130,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"8177:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8137,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8131,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"8320:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8133,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307838453837304436374636363044393564356265353330333830443065433062643338383238394531\",\n                        \"id\": 8132,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"8334:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x8E870D67F660D95d5be530380D0eC0bd388289E1\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"8320:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307833613038656242614231323532323462376236343734333834456533396642623234374432323030\",\n                          \"id\": 8135,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"8402:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x3a08ebBaB125224b7b6474384Ee39fBb247D2200\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8134,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"8380:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8136,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"8380:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"8320:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8138,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"8320:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8145,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8139,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"8463:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8141,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307834353830343838304465323239313364414645303966343938303834384543453645636241663738\",\n                        \"id\": 8140,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"8477:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x45804880De22913dAFE09f4980848ECE6EcbAf78\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"8463:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307839423937333034454131324546656430464164393736464265434161643436303136626632363965\",\n                          \"id\": 8143,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"8545:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x9B97304EA12EFed0FAd976FBeCAad46016bf269e\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8142,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"8523:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8144,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"8523:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"8463:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8146,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"8463:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8153,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8147,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"8607:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8149,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307834303865343138373663434344433046393232313036303065663530333732363536303532613338\",\n                        \"id\": 8148,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"8621:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x408e41876cCCDC0F92210600ef50372656052a38\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"8607:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307833313437443732303333353444633036443966643335306337613234333762634139323338376134\",\n                          \"id\": 8151,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"8689:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x3147D7203354Dc06D9fd350c7a2437bcA92387a4\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8150,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"8667:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8152,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"8667:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"8607:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8154,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"8607:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8161,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8155,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"8750:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8157,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307832323136353737373638343638393039383961373539424132393733653432374466463543396242\",\n                        \"id\": 8156,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"8764:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x221657776846890989a759BA2973e427DfF5C9bB\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"8750:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307844344345343330433362363762334532463730323644383645373132383538383632396532343535\",\n                          \"id\": 8159,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"8832:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xD4CE430C3b67b3E2F7026D86E7128588629e2455\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8158,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"8810:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8160,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"8810:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"8750:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8162,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"8750:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8169,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8163,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"8893:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8165,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307836303746344335424236373232333065383637323038353533326637653930313534346137333735\",\n                        \"id\": 8164,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"8907:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x607F4C5BB672230e8672085532f7e901544a7375\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"8893:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307834636261316531666463373338443066653844423365653037373238453242633444413637366336\",\n                          \"id\": 8167,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"8975:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x4cba1e1fdc738D0fe8DB3ee07728E2Bc4DA676c6\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8166,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"8953:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8168,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"8953:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"8893:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8170,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"8893:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8177,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8171,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"9036:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8173,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307833313535424138354435463936623264303330613439363641463230363233306534363834396362\",\n                        \"id\": 8172,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"9050:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x3155BA85D5F96b2d030a4966AF206230e46849cb\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"9036:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307838373544363043343463666243333842614134456232644442373641373637644542393162393765\",\n                          \"id\": 8175,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"9118:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x875D60C44cfbC38BaA4Eb2dDB76A767dEB91b97e\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8174,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"9096:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8176,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"9096:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"9036:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8178,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"9036:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8185,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8179,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"9180:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8181,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307843303131613733656538353736466234364635453163353735316341334239466530616632613646\",\n                        \"id\": 8180,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"9194:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"9180:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307837393239314139643639324466393533333442316130423342344145366243363036373832663863\",\n                          \"id\": 8183,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"9262:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x79291A9d692Df95334B1a0B3B4AE6bC606782f8c\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8182,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"9240:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8184,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"9240:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"9180:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8186,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"9180:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8193,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8187,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"9323:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8189,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307834373663354532366137356264323032613936383366664433343335394330434331356265306646\",\n                        \"id\": 8188,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"9337:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x476c5E26a75bd202a9683ffD34359C0CC15be0fF\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"9323:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307830353063303438633961304344306537366631363645323533394638376566326163434543353866\",\n                          \"id\": 8191,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"9405:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x050c048c9a0CD0e76f166E2539F87ef2acCEC58f\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8190,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"9383:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8192,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"9383:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"9323:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8194,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"9323:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8201,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8195,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"9466:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8197,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307835374162316563323844313239373037303532646634644634313844353861324434366435663531\",\n                        \"id\": 8196,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"9480:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x57Ab1ec28D129707052df4dF418D58a2D46d5f51\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"9466:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307838653062376536303632323732423565463435323432353062464646386535426433343937373537\",\n                          \"id\": 8199,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"9548:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x8e0b7e6062272B5eF4524250bFFF8e5Bd3497757\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8198,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"9526:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8200,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"9526:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"9466:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8202,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"9466:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8209,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8203,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"9610:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8205,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307836423335393530363837373844443539326533394131323266346635613563463039433930664532\",\n                        \"id\": 8204,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"9624:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x6B3595068778DD592e39A122f4f5a5cF09C90fE2\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"9610:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307865353732436546363966343363324534383862333339323441463034424461634531393037396366\",\n                          \"id\": 8207,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"9692:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xe572CeF69f43c2E488b33924AF04BDacE19079cf\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8206,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"9670:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8208,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"9670:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"9610:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8210,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"9610:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8217,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8211,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"9755:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8213,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307830303030303030303030303835643437383042373331313962363434414535656364323262333736\",\n                        \"id\": 8212,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"9769:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x0000000000085d4780B73119b644AE5ecd22b376\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"9755:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307833383836424139383732333631383144393846323430316335303746623842654137383731644632\",\n                          \"id\": 8215,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"9837:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x3886BA987236181D98F2401c507Fb8BeA7871dF2\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8214,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"9815:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8216,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"9815:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"9755:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8218,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"9755:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8225,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8219,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"9899:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8221,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307830344661306432333543346162663442634634373837614634434634343744453537326546383238\",\n                        \"id\": 8220,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"9913:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"9899:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307866383137423639454135383343414646323931453238374361453030456133323964323237363543\",\n                          \"id\": 8223,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"9981:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xf817B69EA583CAFF291E287CaE00Ea329d22765C\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8222,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"9959:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8224,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"9959:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"9899:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8226,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"9899:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8233,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8227,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"10042:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8229,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307831663938343061383564356146356266314431373632463932354244414464433432303146393834\",\n                        \"id\": 8228,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"10056:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"10042:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307844366141334432353131366438644137394561303234366334383236454239353138373265303265\",\n                          \"id\": 8231,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"10124:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8230,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"10102:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8232,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"10102:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"10042:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8234,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"10042:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8241,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8235,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"10185:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8237,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307841306238363939316336323138623336633164313944346132653945623063453336303665423438\",\n                        \"id\": 8236,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"10199:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"10185:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307839383662354531653137353565334332343430653936303437376632353230314230613862624434\",\n                          \"id\": 8239,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"10267:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x986b5E1e1755e3C2440e960477f25201B0a8bbD4\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8238,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"10245:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8240,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"10245:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"10185:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8242,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"10185:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8249,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8243,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"10329:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8245,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307864414331374639353844326565353233613232303632303639393435393743313344383331656337\",\n                        \"id\": 8244,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"10343:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"10329:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307845653946323337356234626446363338376161383236356444344642384631363531324131643436\",\n                          \"id\": 8247,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"10411:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xEe9F2375b4bdF6387aa8265dD4FB8F16512A1d46\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8246,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"10389:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8248,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"10389:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"10329:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8250,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"10329:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8257,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8251,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"10473:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8253,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307861343763386266333766393261426564344131323642444138303741376237343938363631616344\",\n                        \"id\": 8252,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"10487:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xa47c8bf37f92aBed4A126BDA807A7b7498661acD\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"10473:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307861323036323330373034313364343261354330314462326338313131363430444437413541303361\",\n                          \"id\": 8255,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"10555:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xa20623070413d42a5C01Db2c8111640DD7A5A03a\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8254,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"10533:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8256,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"10533:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"10473:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8258,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"10473:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8265,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8259,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"10616:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8261,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307830643433384633623531373542656263323632624632333735334331453533643033343332624445\",\n                        \"id\": 8260,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"10630:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x0d438F3b5175Bebc262bF23753C1E53d03432bDE\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"10616:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307865354463304136303941623862434631356433663335634661613146663430663532313137334561\",\n                          \"id\": 8263,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"10698:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xe5Dc0A609Ab8bCF15d3f35cFaa1Ff40f521173Ea\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8262,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"10676:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8264,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"10676:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"10616:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8266,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"10616:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8273,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8267,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"10760:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8269,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307842643335366133394246663263416461384539323438353332444438373931343732323143663736\",\n                        \"id\": 8268,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"10774:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xBd356a39BFf2cAda8E9248532DD879147221Cf76\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"10760:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307863454244323032366433433939463261374345303238616366333732433135346142343633386139\",\n                          \"id\": 8271,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"10842:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xcEBD2026d3C99F2a7CE028acf372C154aB4638a9\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8270,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"10820:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8272,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"10820:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"10760:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8274,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"10760:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8281,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8275,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"10903:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8277,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307830626335323963303043363430316145463644323230424538433645613136363746364164393365\",\n                        \"id\": 8276,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"10917:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"10903:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307837633564344638333435653636663638303939353831446233343063643635423037384334316634\",\n                          \"id\": 8279,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"10985:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x7c5d4F8345e66f68099581Db340cd65B078C41f4\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8278,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"10963:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8280,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"10963:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"10903:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8282,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"10903:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8289,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8283,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"11046:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8285,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307861316430453231356132336437303330383432464336376345353832613661466133434361423833\",\n                        \"id\": 8284,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"11060:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xa1d0E215a23d7030842FC67cE582a6aFa3CCaB83\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"11046:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307861614232663662343542323845393632423361436431656534664338386145644466353537373536\",\n                          \"id\": 8287,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"11128:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xaaB2f6b45B28E962B3aCd1ee4fC88aEdDf557756\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8286,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"11106:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8288,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"11106:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"11046:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8290,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"11046:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8297,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8291,\n                        \"name\": \"ethPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7760,\n                        \"src\": \"11190:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8293,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307845343164323438393537316433323231383932343644614641356562446531463436393946343938\",\n                        \"id\": 8292,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"11204:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xE41d2489571d322189246DaFA5ebDe1F4699F498\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"11190:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307832446134393833613632326138343938626231613231466145394438463643363634393339393632\",\n                          \"id\": 8295,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"11272:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x2Da4983a622a8498bb1a21FaE9D8F6C664939962\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8294,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"11250:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8296,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"11250:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"11190:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8298,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"11190:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8305,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8299,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"11363:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8301,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307865333645324433633763333432383146413362433733373935306136383537313733363838304131\",\n                        \"id\": 8300,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"11377:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xe36E2D3c7c34281FA3bC737950a68571736880A1\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"11363:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307841453438633931644631664534313939393446464461323764613039443561433639633330663535\",\n                          \"id\": 8303,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"11445:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xAE48c91dF1fE419994FFDa27da09D5aC69c30f55\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8302,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"11423:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8304,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"11423:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"11363:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8306,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"11363:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8313,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8307,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"11513:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8309,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307841444530304332383234346435434531374437324534303333304231633331386344313242376333\",\n                        \"id\": 8308,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"11527:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xADE00C28244d5CE17D72E40330B1c318cD12B7c3\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"11513:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307832333165373634423434623243316237436131373166613830323141323465643532304364653130\",\n                          \"id\": 8311,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"11595:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x231e764B44b2C1b7Ca171fa8021A24ed520Cde10\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8310,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"11573:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8312,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"11573:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"11513:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8314,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"11513:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8321,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8315,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"11656:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8317,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307846343865323030454146393930363336324242313434326663613331653038333537373362384234\",\n                        \"id\": 8316,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"11670:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xF48e200EAF9906362BB1442fca31e0835773b8B4\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"11656:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307837374639373130453764304131393636394131336330353546363263643830643331336446303232\",\n                          \"id\": 8319,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"11738:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x77F9710E7d0A19669A13c055F62cd80d313dF022\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8318,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"11716:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8320,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"11716:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"11656:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8322,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"11656:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8329,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8323,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"11806:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8325,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307830463833323837464637363844316331653137613432463434643634344437463232653865653164\",\n                        \"id\": 8324,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"11820:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"11806:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307834343964313137313137383338664641363132363342363164413633303141413261383842313341\",\n                          \"id\": 8327,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"11888:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x449d117117838fFA61263B61dA6301AA2a88B13A\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8326,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"11866:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8328,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"11866:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"11806:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8330,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"11806:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8337,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8331,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"11956:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8333,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307866453333616539354139663044413841383435614633333531364544633234304443443731316436\",\n                        \"id\": 8332,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"11970:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"11956:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307846623063414446456131333645394533343363666235354238363361364466383334386162393132\",\n                          \"id\": 8335,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"12038:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xFb0cADFEa136E9E343cfb55B863a6Df8348ab912\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8334,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"12016:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8336,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"12016:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"11956:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8338,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"11956:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8345,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8339,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"12108:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8341,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307831373135414330373433313032424635436435384566424236436632644332363835643936376236\",\n                        \"id\": 8340,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"12122:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"12108:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307831433037414662384532423832376335413437333943366435394165334135303335663238373334\",\n                          \"id\": 8343,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"12190:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x1C07AFb8E2B827c5A4739C6d59Ae3A5035f28734\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8342,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"12168:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8344,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"12168:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"12108:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8346,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"12108:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8353,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8347,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"12258:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8349,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307838384338436633413231326330333639363938443133464539384663623736363230333839383431\",\n                        \"id\": 8348,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"12272:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x88C8Cf3A212c0369698D13FE98Fcb76620389841\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"12258:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307831306134333238393839356541666638343045386434353939354242613839663931313545434565\",\n                          \"id\": 8351,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"12340:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x10a43289895eAff840E8d45995BBa89f9115ECEe\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8350,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"12318:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8352,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"12318:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"12258:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8354,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"12258:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8361,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8355,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"12408:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8357,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307832323630323436396437303442664662303933366337413763666344313866376141323639333735\",\n                        \"id\": 8356,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"12422:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x22602469d704BfFb0936c7A7cfcD18f7aA269375\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"12408:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307861454132383038343037423733313941333141333833423646384236306630344243613233634532\",\n                          \"id\": 8359,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"12490:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xaEA2808407B7319A31A383B6F8B60f04BCa23cE2\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8358,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"12468:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8360,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"12468:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"12408:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8362,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"12408:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8369,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8363,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"12558:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8365,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307844373165434646393334324135436564363230303439653631366335303335463164423938363230\",\n                        \"id\": 8364,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"12572:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xD71eCFF9342A5Ced620049e616c5035F1dB98620\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"12558:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307862343966363737393433424330333865393835376436314537643035334361413243313733344331\",\n                          \"id\": 8367,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"12640:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xb49f677943BC038e9857d61E7d053CaA2C1734C1\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8366,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"12618:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8368,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"12618:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"12558:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8370,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"12558:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8377,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8371,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"12708:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8373,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307865463943643738383263303637363836363931423666463439653635306234334146424243433642\",\n                        \"id\": 8372,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"12722:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xeF9Cd7882c067686691B6fF49e650b43AFBBCC6B\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"12708:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307838303037306637313531426444626242313336313933376164343833393331376166393941453663\",\n                          \"id\": 8375,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"12790:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x80070f7151BdDbbB1361937ad4839317af99AE6c\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8374,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"12768:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8376,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"12768:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"12708:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8378,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"12708:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8385,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8379,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"12851:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8381,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307839376665323245373334316130436438446236463643303231413234446338663444414438353546\",\n                        \"id\": 8380,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"12865:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"12851:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307835633041623264396235613765643966343730333836653832424233364133363133634464346235\",\n                          \"id\": 8383,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"12933:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x5c0Ab2d9b5a7ed9f470386e82BB36A3613cDd4b5\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8382,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"12911:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8384,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"12911:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"12851:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8386,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"12851:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8393,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8387,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"13001:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8389,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307846413161383536436661333430394346613134354661346532304562323730644633454232316162\",\n                        \"id\": 8388,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"13015:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xFA1a856Cfa3409CFa145Fa4e20Eb270dF3EB21ab\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"13001:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307864303933353833383933353334393430316337336130364643646539643633663731396538344535\",\n                          \"id\": 8391,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"13083:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xd0935838935349401c73a06FCde9d63f719e84E5\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8390,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"13061:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8392,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"13061:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"13001:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8394,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"13001:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8401,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8395,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"13145:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8397,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307843313431303343323134314538343265323238464261433539343537396537393836313663653741\",\n                        \"id\": 8396,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"13159:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xC14103C2141E842e228FBaC594579e798616ce7A\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"13145:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307836414630394446373536334333363342353736336239313032373132456265443362396538353942\",\n                          \"id\": 8399,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"13227:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x6AF09DF7563C363B5763b9102712EbeD3b9e859B\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8398,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"13205:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8400,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"13205:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"13145:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8402,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"13145:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8409,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8403,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"13295:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8405,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307837443141664137423731386662383933644233304133614263304366633630384161436665424230\",\n                        \"id\": 8404,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"13309:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"13295:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307837624143383541386131334134426344386162623365423764366234643633326335613537363736\",\n                          \"id\": 8407,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"13377:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x7bAC85A8a13A4BcD8abb3eB7d6b4d632c5a57676\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8406,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"13355:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8408,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"13355:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"13295:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8410,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"13295:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8417,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8411,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"13440:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8413,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307834353735663431333038454331343833663364333939616139613238323664373444613133446562\",\n                        \"id\": 8412,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"13454:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x4575f41308EC1483f3d399aa9a2826d74Da13Deb\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"13440:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307864373541416145344146306333393863613133653236363742653537414632636341384235646536\",\n                          \"id\": 8415,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"13522:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xd75AAaE4AF0c398ca13e2667Be57AF2ccA8B5de6\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8414,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"13500:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8416,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"13500:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"13440:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8418,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"13440:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8425,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8419,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"13583:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8421,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307838434539313337643339333236414430634436343931666235434330436241306530383962364139\",\n                        \"id\": 8420,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"13597:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"13583:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307846623043664436633139653235444234613038443861323034613338376345613438436331333866\",\n                          \"id\": 8423,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"13665:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xFb0CfD6c19e25DB4a08D8a204a387cEa48Cc138f\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8422,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"13643:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8424,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"13643:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"13583:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8426,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"13583:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8433,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8427,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"13726:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8429,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307834433139353936663561416646343539664133384230663765443932463131414536353433373834\",\n                        \"id\": 8428,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"13740:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x4C19596f5aAfF459fA38B0f7eD92F11AE6543784\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"13726:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307832363932396238356645323834456541423933393833313030326531393238313833613130666231\",\n                          \"id\": 8431,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"13808:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x26929b85fE284EeAB939831002e1928183a10fb1\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8430,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"13786:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8432,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"13786:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"13726:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8434,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"13726:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8441,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8435,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"13869:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8437,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307866324530383335363538384543356364394534333735353244613837433030373662343937304230\",\n                        \"id\": 8436,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"13883:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xf2E08356588EC5cd9E437552Da87C0076b4970B0\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"13869:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307861634430443141323937353943433031453844393235333731423732636232623536313045413235\",\n                          \"id\": 8439,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"13951:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xacD0D1A29759CC01E8D925371B72cb2b5610EA25\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8438,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"13929:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8440,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"13929:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"13869:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8442,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"13869:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8449,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8443,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"14019:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8445,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307839313864413931436362633332423761364130636334654364353938376262616236453331653644\",\n                        \"id\": 8444,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"14033:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"14019:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307831636544616142353039333638383142336534343965343765343041326344414635353736413461\",\n                          \"id\": 8447,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"14101:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x1ceDaaB50936881B3e449e47e40A2cDAF5576A4a\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8446,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"14079:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8448,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"14079:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"14019:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8450,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"14019:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8457,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8451,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"14171:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8453,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307831633438663836616535373239314637363836333439463132363031393130424438443437306262\",\n                        \"id\": 8452,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"14185:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x1c48f86ae57291F7686349F12601910BD8D470bb\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"14171:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307866414338314561394464323944384539623231326163643665644245623664453338436234334166\",\n                          \"id\": 8455,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"14253:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xfAC81Ea9Dd29D8E9b212acd6edBEb6dE38Cb43Af\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8454,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"14231:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8456,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"14231:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"14171:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8458,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"14171:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8465,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8459,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"14315:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8461,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307836413232653565393433383834363431383135373841613741364238363965303066453237383436\",\n                        \"id\": 8460,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"14329:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x6A22e5e94388464181578Aa7A6B869e00fE27846\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"14315:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307833373935383932323762313546316131323139354433663264393062426339463331663935323335\",\n                          \"id\": 8463,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"14397:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x379589227b15F1a12195D3f2d90bBc9F31f95235\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8462,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"14375:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8464,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"14375:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"14315:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8466,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"14315:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8473,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8467,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"14465:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8469,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307832363145664364443234436541393836353242393730303830306131334466426361343130336646\",\n                        \"id\": 8468,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"14479:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x261EfCdD24CeA98652B9700800a13DfBca4103fF\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"14465:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307832313465443944613131443266626534363561366663363031613931453632456245633161304436\",\n                          \"id\": 8471,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"14547:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8470,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"14525:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8472,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"14525:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"14465:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8474,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"14465:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8481,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8475,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"14615:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8477,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307835323939643646373437324443633133374437663343344263664242423531344261424633343141\",\n                        \"id\": 8476,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"14629:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"14615:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307846413636343538436365374464313544383635303031356334666365344432373832373136313846\",\n                          \"id\": 8479,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"14697:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xFA66458Cce7Dd15D8650015c4fce4D278271618F\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8478,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"14675:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8480,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"14675:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"14615:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8482,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"14615:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8489,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8483,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"14765:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8485,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307861324230664465364437313065323031643064363038653932344134383464314135664564353763\",\n                        \"id\": 8484,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"14779:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"14765:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307843656432363630633644643146666438353641354138324336376633343832643838433530623132\",\n                          \"id\": 8487,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"14847:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xCed2660c6Dd1Ffd856A5A82C67f3482d88C50b12\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8486,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"14825:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8488,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"14825:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"14765:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8490,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"14765:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8497,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8491,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"14915:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8493,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307832653539303035633563306630613444373743634138323635336434386234363332324545354364\",\n                        \"id\": 8492,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"14929:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"14915:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307835323339613632356445623434624633456541633243443533363662613234623865394442363346\",\n                          \"id\": 8495,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"14997:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x5239a625dEb44bF3EeAc2CD5366ba24b8e9DB63F\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8494,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"14975:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8496,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"14975:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"14915:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8498,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"14915:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8505,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8499,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"15065:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8501,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307865414241434438343441313936443746616633434535393665646542463939303033343142343230\",\n                        \"id\": 8500,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"15079:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xeABACD844A196D7Faf3CE596edeBF9900341B420\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"15065:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307832383344343333343335634643416266303032363362654546364133363262376363356564396632\",\n                          \"id\": 8503,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"15147:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x283D433435cFCAbf00263beEF6A362b7cc5ed9f2\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8502,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"15125:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8504,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"15125:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"15065:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8506,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"15065:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8513,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8507,\n                        \"name\": \"usdPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7765,\n                        \"src\": \"15209:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8509,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307865316146653146643736466438386637386342663539396561313834363233314238624133423642\",\n                        \"id\": 8508,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"15223:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"15209:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307861384538373546393431333842304335623531643165316435644533356262446464323845413837\",\n                          \"id\": 8511,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"15291:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xa8E875F94138B0C5b51d1e1d5dE35bbDdd28EA87\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8510,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"15269:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8512,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"15269:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"15209:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8514,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"15209:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8521,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8515,\n                        \"name\": \"btcPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7770,\n                        \"src\": \"15384:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8517,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307837393844316245383431613832613237333732304345333163383232433631613637613630314333\",\n                        \"id\": 8516,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"15398:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0x798D1bE841a82a273720CE31c822C61a67a601C3\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"15384:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307834313861364339384344354238323735393535663038463062384331633638333863386231363835\",\n                          \"id\": 8519,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"15466:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x418a6C98CD5B8275955f08F0b8C1c6838c8b1685\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8518,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"15444:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8520,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"15444:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"15384:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8522,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"15384:125:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 8529,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8523,\n                        \"name\": \"btcPriceFeeds\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 7770,\n                        \"src\": \"15528:13:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8525,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307846393730623845333665323346376643334644373532456541383666384265384438333337354136\",\n                        \"id\": 8524,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"15542:42:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xF970b8E36e23F7fC3FD752EeA86f8Be8D83375A6\"\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"15528:57:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307845613062334443613633356634613445373744393635344335633138383336454537373135363665\",\n                          \"id\": 8527,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"15610:42:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xEa0b3DCa635f4a4E77D9654C5c18836EE771566e\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        ],\n                        \"id\": 8526,\n                        \"name\": \"AggregatorV3Interface\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 5700,\n                        \"src\": \"15588:21:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                          \"typeString\": \"type(contract AggregatorV3Interface)\"\n                        }\n                      },\n                      \"id\": 8528,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"15588:65:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                        \"typeString\": \"contract AggregatorV3Interface\"\n                      }\n                    },\n                    \"src\": \"15528:125:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                      \"typeString\": \"contract AggregatorV3Interface\"\n                    }\n                  },\n                  \"id\": 8530,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"15528:125:35\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 7786,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1909:113:35\",\n              \"text\": \" @dev Constructor to set `maxSecondsBeforePriceIsStale` as well as all Chainlink price feeds.\"\n            },\n            \"id\": 8532,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 7789,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 7788,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_maxSecondsBeforePriceIsStale\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8532,\n                  \"src\": \"2040:37:35\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 7787,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2040:7:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2039:39:35\"\n            },\n            \"returnParameters\": {\n              \"id\": 7790,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2086:0:35\"\n            },\n            \"scope\": 8905,\n            \"src\": \"2028:13640:35\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 8576,\n              \"nodeType\": \"Block\",\n              \"src\": \"15856:178:35\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    },\n                    \"id\": 8574,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      },\n                      \"id\": 8562,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 8550,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8542,\n                                \"name\": \"ethPriceFeeds\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7760,\n                                \"src\": \"15882:13:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                                  \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                                }\n                              },\n                              \"id\": 8544,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8543,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8535,\n                                \"src\": \"15896:10:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"15882:25:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                \"typeString\": \"contract AggregatorV3Interface\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                \"typeString\": \"contract AggregatorV3Interface\"\n                              }\n                            ],\n                            \"id\": 8541,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"15874:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8540,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"15874:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8545,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"15874:34:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8548,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"15920:1:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 8547,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"15912:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8546,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"15912:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8549,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"15912:10:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"15874:48:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"||\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 8561,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8553,\n                                \"name\": \"usdPriceFeeds\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7765,\n                                \"src\": \"15934:13:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                                  \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                                }\n                              },\n                              \"id\": 8555,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8554,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8535,\n                                \"src\": \"15948:10:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"15934:25:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                \"typeString\": \"contract AggregatorV3Interface\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                \"typeString\": \"contract AggregatorV3Interface\"\n                              }\n                            ],\n                            \"id\": 8552,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"15926:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8551,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"15926:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8556,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"15926:34:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8559,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"15972:1:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 8558,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"15964:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8557,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"15964:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8560,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"15964:10:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"15926:48:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"src\": \"15874:100:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"||\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"id\": 8573,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 8565,\n                              \"name\": \"btcPriceFeeds\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7770,\n                              \"src\": \"15986:13:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                                \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                              }\n                            },\n                            \"id\": 8567,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 8566,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 8535,\n                              \"src\": \"16000:10:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"15986:25:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                              \"typeString\": \"contract AggregatorV3Interface\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                              \"typeString\": \"contract AggregatorV3Interface\"\n                            }\n                          ],\n                          \"id\": 8564,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"15978:7:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 8563,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"15978:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 8568,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"15978:34:35\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"!=\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 8571,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"16024:1:35\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 8570,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"16016:7:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 8569,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"16016:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 8572,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"16016:10:35\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"src\": \"15978:48:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"src\": \"15874:152:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"functionReturnParameters\": 8539,\n                  \"id\": 8575,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"15867:159:35\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 8533,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"15676:103:35\",\n              \"text\": \" @dev Returns a boolean indicating if a price feed exists for the underlying asset.\"\n            },\n            \"functionSelector\": \"0b7983a2\",\n            \"id\": 8577,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"hasPriceFeed\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 8536,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8535,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8577,\n                  \"src\": \"15807:18:35\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8534,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"15807:7:35\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"15806:20:35\"\n            },\n            \"returnParameters\": {\n              \"id\": 8539,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8538,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8577,\n                  \"src\": \"15850:4:35\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8537,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"15850:4:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"15849:6:35\"\n            },\n            \"scope\": 8905,\n            \"src\": \"15785:249:35\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 8816,\n              \"nodeType\": \"Block\",\n              \"src\": \"16200:2199:35\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 8587,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 8585,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 8580,\n                      \"src\": \"16248:10:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                      \"id\": 8586,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"16262:42:35\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      },\n                      \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                    },\n                    \"src\": \"16248:56:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 8590,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"16244:73:35\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 8588,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"16313:4:35\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 8584,\n                    \"id\": 8589,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"16306:11:35\"\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 8601,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 8593,\n                            \"name\": \"ethPriceFeeds\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7760,\n                            \"src\": \"16389:13:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                              \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                            }\n                          },\n                          \"id\": 8595,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 8594,\n                            \"name\": \"underlying\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 8580,\n                            \"src\": \"16403:10:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"16389:25:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                            \"typeString\": \"contract AggregatorV3Interface\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                            \"typeString\": \"contract AggregatorV3Interface\"\n                          }\n                        ],\n                        \"id\": 8592,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"16381:7:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 8591,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"16381:7:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 8596,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"16381:34:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 8599,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"16427:1:35\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 8598,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"16419:7:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 8597,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"16419:7:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 8600,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"16419:10:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"16381:48:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": {\n                    \"condition\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"id\": 8647,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 8639,\n                              \"name\": \"usdPriceFeeds\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7765,\n                              \"src\": \"16798:13:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                                \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                              }\n                            },\n                            \"id\": 8641,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 8640,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 8580,\n                              \"src\": \"16812:10:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"16798:25:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                              \"typeString\": \"contract AggregatorV3Interface\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                              \"typeString\": \"contract AggregatorV3Interface\"\n                            }\n                          ],\n                          \"id\": 8638,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"16790:7:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 8637,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"16790:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 8642,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"16790:34:35\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"!=\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 8645,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"16836:1:35\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            }\n                          ],\n                          \"id\": 8644,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"16828:7:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 8643,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"16828:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 8646,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"16828:10:35\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      },\n                      \"src\": \"16790:48:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"falseBody\": {\n                      \"condition\": {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 8733,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8725,\n                                \"name\": \"btcPriceFeeds\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7770,\n                                \"src\": \"17565:13:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                                  \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                                }\n                              },\n                              \"id\": 8727,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8726,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8580,\n                                \"src\": \"17579:10:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"17565:25:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                \"typeString\": \"contract AggregatorV3Interface\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                \"typeString\": \"contract AggregatorV3Interface\"\n                              }\n                            ],\n                            \"id\": 8724,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"17557:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8723,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"17557:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8728,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"17557:34:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8731,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"17603:1:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 8730,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"17595:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8729,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"17595:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8732,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"17595:10:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"17557:48:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"falseBody\": {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"4e6f20436861696e6c696e6b207072696365206665656420666f756e6420666f72207468697320756e6465726c79696e6720455243323020746f6b656e2e\",\n                              \"id\": 8810,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"string\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"18326:64:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_stringliteral_6ea4dc2be735532b49fd9464811d10b2852cc0da31857543f13ea792d11eb3d6\",\n                                \"typeString\": \"literal_string \\\"No Chainlink price feed found for this underlying ERC20 token.\\\"\"\n                              },\n                              \"value\": \"No Chainlink price feed found for this underlying ERC20 token.\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_stringliteral_6ea4dc2be735532b49fd9464811d10b2852cc0da31857543f13ea792d11eb3d6\",\n                                \"typeString\": \"literal_string \\\"No Chainlink price feed found for this underlying ERC20 token.\\\"\"\n                              }\n                            ],\n                            \"id\": 8809,\n                            \"name\": \"revert\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [-19, -19],\n                            \"referencedDeclaration\": -19,\n                            \"src\": \"18319:6:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_revert_pure$_t_string_memory_ptr_$returns$__$\",\n                              \"typeString\": \"function (string memory) pure\"\n                            }\n                          },\n                          \"id\": 8811,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"18319:72:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 8812,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"18319:72:35\"\n                      },\n                      \"id\": 8813,\n                      \"nodeType\": \"IfStatement\",\n                      \"src\": \"17553:838:35\",\n                      \"trueBody\": {\n                        \"id\": 8808,\n                        \"nodeType\": \"Block\",\n                        \"src\": \"17607:706:35\",\n                        \"statements\": [\n                          {\n                            \"assignments\": [null, 8735, null, 8737, null],\n                            \"declarations\": [\n                              null,\n                              {\n                                \"constant\": false,\n                                \"id\": 8735,\n                                \"mutability\": \"mutable\",\n                                \"name\": \"btcEthPrice\",\n                                \"nodeType\": \"VariableDeclaration\",\n                                \"overrides\": null,\n                                \"scope\": 8808,\n                                \"src\": \"17625:18:35\",\n                                \"stateVariable\": false,\n                                \"storageLocation\": \"default\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_int256\",\n                                  \"typeString\": \"int256\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 8734,\n                                  \"name\": \"int256\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"17625:6:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_int256\",\n                                    \"typeString\": \"int256\"\n                                  }\n                                },\n                                \"value\": null,\n                                \"visibility\": \"internal\"\n                              },\n                              null,\n                              {\n                                \"constant\": false,\n                                \"id\": 8737,\n                                \"mutability\": \"mutable\",\n                                \"name\": \"updatedAt\",\n                                \"nodeType\": \"VariableDeclaration\",\n                                \"overrides\": null,\n                                \"scope\": 8808,\n                                \"src\": \"17647:17:35\",\n                                \"stateVariable\": false,\n                                \"storageLocation\": \"default\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 8736,\n                                  \"name\": \"uint256\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"17647:7:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"value\": null,\n                                \"visibility\": \"internal\"\n                              },\n                              null\n                            ],\n                            \"id\": 8741,\n                            \"initialValue\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [],\n                              \"expression\": {\n                                \"argumentTypes\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 8738,\n                                  \"name\": \"BTC_ETH_PRICE_FEED\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 7782,\n                                  \"src\": \"17670:18:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                    \"typeString\": \"contract AggregatorV3Interface\"\n                                  }\n                                },\n                                \"id\": 8739,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"latestRoundData\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 5699,\n                                \"src\": \"17670:34:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                                  \"typeString\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                                }\n                              },\n                              \"id\": 8740,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"17670:36:35\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                                \"typeString\": \"tuple(uint80,int256,uint256,uint256,uint80)\"\n                              }\n                            },\n                            \"nodeType\": \"VariableDeclarationStatement\",\n                            \"src\": \"17622:84:35\"\n                          },\n                          {\n                            \"condition\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 8744,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8742,\n                                \"name\": \"maxSecondsBeforePriceIsStale\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7785,\n                                \"src\": \"17725:28:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \">\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"30\",\n                                \"id\": 8743,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"number\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"17756:1:35\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_0_by_1\",\n                                  \"typeString\": \"int_const 0\"\n                                },\n                                \"value\": \"0\"\n                              },\n                              \"src\": \"17725:32:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              }\n                            },\n                            \"falseBody\": null,\n                            \"id\": 8755,\n                            \"nodeType\": \"IfStatement\",\n                            \"src\": \"17721:143:35\",\n                            \"trueBody\": {\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"commonType\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    \"id\": 8751,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"leftExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 8746,\n                                        \"name\": \"block\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": -4,\n                                        \"src\": \"17767:5:35\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_magic_block\",\n                                          \"typeString\": \"block\"\n                                        }\n                                      },\n                                      \"id\": 8747,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"memberName\": \"timestamp\",\n                                      \"nodeType\": \"MemberAccess\",\n                                      \"referencedDeclaration\": null,\n                                      \"src\": \"17767:15:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"nodeType\": \"BinaryOperation\",\n                                    \"operator\": \"<=\",\n                                    \"rightExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"id\": 8750,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"leftExpression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 8748,\n                                        \"name\": \"updatedAt\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 8737,\n                                        \"src\": \"17786:9:35\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      },\n                                      \"nodeType\": \"BinaryOperation\",\n                                      \"operator\": \"+\",\n                                      \"rightExpression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 8749,\n                                        \"name\": \"maxSecondsBeforePriceIsStale\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 7785,\n                                        \"src\": \"17798:28:35\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      },\n                                      \"src\": \"17786:40:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"src\": \"17767:59:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_bool\",\n                                      \"typeString\": \"bool\"\n                                    }\n                                  },\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"hexValue\": \"4254432f45544820436861696e6c696e6b207072696365206973207374616c652e\",\n                                    \"id\": 8752,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"kind\": \"string\",\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"Literal\",\n                                    \"src\": \"17828:35:35\",\n                                    \"subdenomination\": null,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_stringliteral_16b6241b84fb628c11c4dffb2766ed99511928329fa9e5190eca81686bc6a174\",\n                                      \"typeString\": \"literal_string \\\"BTC/ETH Chainlink price is stale.\\\"\"\n                                    },\n                                    \"value\": \"BTC/ETH Chainlink price is stale.\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_bool\",\n                                      \"typeString\": \"bool\"\n                                    },\n                                    {\n                                      \"typeIdentifier\": \"t_stringliteral_16b6241b84fb628c11c4dffb2766ed99511928329fa9e5190eca81686bc6a174\",\n                                      \"typeString\": \"literal_string \\\"BTC/ETH Chainlink price is stale.\\\"\"\n                                    }\n                                  ],\n                                  \"id\": 8745,\n                                  \"name\": \"require\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [-18, -18],\n                                  \"referencedDeclaration\": -18,\n                                  \"src\": \"17759:7:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                    \"typeString\": \"function (bool,string memory) pure\"\n                                  }\n                                },\n                                \"id\": 8753,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"17759:105:35\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_tuple$__$\",\n                                  \"typeString\": \"tuple()\"\n                                }\n                              },\n                              \"id\": 8754,\n                              \"nodeType\": \"ExpressionStatement\",\n                              \"src\": \"17759:105:35\"\n                            }\n                          },\n                          {\n                            \"condition\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_int256\",\n                                \"typeString\": \"int256\"\n                              },\n                              \"id\": 8758,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8756,\n                                \"name\": \"btcEthPrice\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8735,\n                                \"src\": \"17883:11:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_int256\",\n                                  \"typeString\": \"int256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"<=\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"30\",\n                                \"id\": 8757,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"number\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"17898:1:35\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_0_by_1\",\n                                  \"typeString\": \"int_const 0\"\n                                },\n                                \"value\": \"0\"\n                              },\n                              \"src\": \"17883:16:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              }\n                            },\n                            \"falseBody\": null,\n                            \"id\": 8761,\n                            \"nodeType\": \"IfStatement\",\n                            \"src\": \"17879:30:35\",\n                            \"trueBody\": {\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"30\",\n                                \"id\": 8759,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"number\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"17908:1:35\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_0_by_1\",\n                                  \"typeString\": \"int_const 0\"\n                                },\n                                \"value\": \"0\"\n                              },\n                              \"functionReturnParameters\": 8584,\n                              \"id\": 8760,\n                              \"nodeType\": \"Return\",\n                              \"src\": \"17901:8:35\"\n                            }\n                          },\n                          {\n                            \"assignments\": [8763],\n                            \"declarations\": [\n                              {\n                                \"constant\": false,\n                                \"id\": 8763,\n                                \"mutability\": \"mutable\",\n                                \"name\": \"tokenBtcPrice\",\n                                \"nodeType\": \"VariableDeclaration\",\n                                \"overrides\": null,\n                                \"scope\": 8808,\n                                \"src\": \"17924:20:35\",\n                                \"stateVariable\": false,\n                                \"storageLocation\": \"default\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_int256\",\n                                  \"typeString\": \"int256\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 8762,\n                                  \"name\": \"int256\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"17924:6:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_int256\",\n                                    \"typeString\": \"int256\"\n                                  }\n                                },\n                                \"value\": null,\n                                \"visibility\": \"internal\"\n                              }\n                            ],\n                            \"id\": 8764,\n                            \"initialValue\": null,\n                            \"nodeType\": \"VariableDeclarationStatement\",\n                            \"src\": \"17924:20:35\"\n                          },\n                          {\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 8773,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftHandSide\": {\n                                \"argumentTypes\": null,\n                                \"components\": [\n                                  null,\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 8765,\n                                    \"name\": \"tokenBtcPrice\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 8763,\n                                    \"src\": \"17962:13:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_int256\",\n                                      \"typeString\": \"int256\"\n                                    }\n                                  },\n                                  null,\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 8766,\n                                    \"name\": \"updatedAt\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 8737,\n                                    \"src\": \"17979:9:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  null\n                                ],\n                                \"id\": 8767,\n                                \"isConstant\": false,\n                                \"isInlineArray\": false,\n                                \"isLValue\": true,\n                                \"isPure\": false,\n                                \"lValueRequested\": true,\n                                \"nodeType\": \"TupleExpression\",\n                                \"src\": \"17959:32:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_tuple$__$_t_int256_$__$_t_uint256_$__$\",\n                                  \"typeString\": \"tuple(,int256,,uint256,)\"\n                                }\n                              },\n                              \"nodeType\": \"Assignment\",\n                              \"operator\": \"=\",\n                              \"rightHandSide\": {\n                                \"argumentTypes\": null,\n                                \"arguments\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": [],\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"baseExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8768,\n                                      \"name\": \"btcPriceFeeds\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 7770,\n                                      \"src\": \"17994:13:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                                        \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                                      }\n                                    },\n                                    \"id\": 8770,\n                                    \"indexExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8769,\n                                      \"name\": \"underlying\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 8580,\n                                      \"src\": \"18008:10:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                      }\n                                    },\n                                    \"isConstant\": false,\n                                    \"isLValue\": true,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"IndexAccess\",\n                                    \"src\": \"17994:25:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                      \"typeString\": \"contract AggregatorV3Interface\"\n                                    }\n                                  },\n                                  \"id\": 8771,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"latestRoundData\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": 5699,\n                                  \"src\": \"17994:41:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                                    \"typeString\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                                  }\n                                },\n                                \"id\": 8772,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"17994:43:35\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                                  \"typeString\": \"tuple(uint80,int256,uint256,uint256,uint80)\"\n                                }\n                              },\n                              \"src\": \"17959:78:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_tuple$__$\",\n                                \"typeString\": \"tuple()\"\n                              }\n                            },\n                            \"id\": 8774,\n                            \"nodeType\": \"ExpressionStatement\",\n                            \"src\": \"17959:78:35\"\n                          },\n                          {\n                            \"condition\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 8777,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8775,\n                                \"name\": \"maxSecondsBeforePriceIsStale\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7785,\n                                \"src\": \"18056:28:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \">\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"30\",\n                                \"id\": 8776,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"number\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"18087:1:35\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_0_by_1\",\n                                  \"typeString\": \"int_const 0\"\n                                },\n                                \"value\": \"0\"\n                              },\n                              \"src\": \"18056:32:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              }\n                            },\n                            \"falseBody\": null,\n                            \"id\": 8788,\n                            \"nodeType\": \"IfStatement\",\n                            \"src\": \"18052:145:35\",\n                            \"trueBody\": {\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"commonType\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    \"id\": 8784,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"leftExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 8779,\n                                        \"name\": \"block\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": -4,\n                                        \"src\": \"18098:5:35\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_magic_block\",\n                                          \"typeString\": \"block\"\n                                        }\n                                      },\n                                      \"id\": 8780,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"memberName\": \"timestamp\",\n                                      \"nodeType\": \"MemberAccess\",\n                                      \"referencedDeclaration\": null,\n                                      \"src\": \"18098:15:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"nodeType\": \"BinaryOperation\",\n                                    \"operator\": \"<=\",\n                                    \"rightExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"id\": 8783,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"leftExpression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 8781,\n                                        \"name\": \"updatedAt\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 8737,\n                                        \"src\": \"18117:9:35\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      },\n                                      \"nodeType\": \"BinaryOperation\",\n                                      \"operator\": \"+\",\n                                      \"rightExpression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 8782,\n                                        \"name\": \"maxSecondsBeforePriceIsStale\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 7785,\n                                        \"src\": \"18129:28:35\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      },\n                                      \"src\": \"18117:40:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"src\": \"18098:59:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_bool\",\n                                      \"typeString\": \"bool\"\n                                    }\n                                  },\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"hexValue\": \"546f6b656e2f42544320436861696e6c696e6b207072696365206973207374616c652e\",\n                                    \"id\": 8785,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"kind\": \"string\",\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"Literal\",\n                                    \"src\": \"18159:37:35\",\n                                    \"subdenomination\": null,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_stringliteral_ed35518cf424ed4189aa89ff6fcbc32c1b868e73ec9c2db7575274fd97683dc6\",\n                                      \"typeString\": \"literal_string \\\"Token/BTC Chainlink price is stale.\\\"\"\n                                    },\n                                    \"value\": \"Token/BTC Chainlink price is stale.\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_bool\",\n                                      \"typeString\": \"bool\"\n                                    },\n                                    {\n                                      \"typeIdentifier\": \"t_stringliteral_ed35518cf424ed4189aa89ff6fcbc32c1b868e73ec9c2db7575274fd97683dc6\",\n                                      \"typeString\": \"literal_string \\\"Token/BTC Chainlink price is stale.\\\"\"\n                                    }\n                                  ],\n                                  \"id\": 8778,\n                                  \"name\": \"require\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [-18, -18],\n                                  \"referencedDeclaration\": -18,\n                                  \"src\": \"18090:7:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                    \"typeString\": \"function (bool,string memory) pure\"\n                                  }\n                                },\n                                \"id\": 8786,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"18090:107:35\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_tuple$__$\",\n                                  \"typeString\": \"tuple()\"\n                                }\n                              },\n                              \"id\": 8787,\n                              \"nodeType\": \"ExpressionStatement\",\n                              \"src\": \"18090:107:35\"\n                            }\n                          },\n                          {\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"condition\": {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_int256\",\n                                  \"typeString\": \"int256\"\n                                },\n                                \"id\": 8791,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 8789,\n                                  \"name\": \"tokenBtcPrice\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 8763,\n                                  \"src\": \"18219:13:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_int256\",\n                                    \"typeString\": \"int256\"\n                                  }\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \">=\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"30\",\n                                  \"id\": 8790,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"18236:1:35\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                    \"typeString\": \"int_const 0\"\n                                  },\n                                  \"value\": \"0\"\n                                },\n                                \"src\": \"18219:18:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                }\n                              },\n                              \"falseExpression\": {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"30\",\n                                \"id\": 8805,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"number\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"18300:1:35\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_0_by_1\",\n                                  \"typeString\": \"int_const 0\"\n                                },\n                                \"value\": \"0\"\n                              },\n                              \"id\": 8806,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Conditional\",\n                              \"src\": \"18219:82:35\",\n                              \"trueExpression\": {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"hexValue\": \"316538\",\n                                    \"id\": 8803,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"kind\": \"number\",\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"Literal\",\n                                    \"src\": \"18293:3:35\",\n                                    \"subdenomination\": null,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_rational_100000000_by_1\",\n                                      \"typeString\": \"int_const 100000000\"\n                                    },\n                                    \"value\": \"1e8\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_rational_100000000_by_1\",\n                                      \"typeString\": \"int_const 100000000\"\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                          {\n                                            \"argumentTypes\": null,\n                                            \"id\": 8799,\n                                            \"name\": \"btcEthPrice\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 8735,\n                                            \"src\": \"18275:11:35\",\n                                            \"typeDescriptions\": {\n                                              \"typeIdentifier\": \"t_int256\",\n                                              \"typeString\": \"int256\"\n                                            }\n                                          }\n                                        ],\n                                        \"expression\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_int256\",\n                                              \"typeString\": \"int256\"\n                                            }\n                                          ],\n                                          \"id\": 8798,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                                          \"src\": \"18267:7:35\",\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                            \"typeString\": \"type(uint256)\"\n                                          },\n                                          \"typeName\": {\n                                            \"id\": 8797,\n                                            \"name\": \"uint256\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"18267:7:35\",\n                                            \"typeDescriptions\": {\n                                              \"typeIdentifier\": null,\n                                              \"typeString\": null\n                                            }\n                                          }\n                                        },\n                                        \"id\": 8800,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"typeConversion\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"18267:20:35\",\n                                        \"tryCall\": false,\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"arguments\": [\n                                          {\n                                            \"argumentTypes\": null,\n                                            \"id\": 8794,\n                                            \"name\": \"tokenBtcPrice\",\n                                            \"nodeType\": \"Identifier\",\n                                            \"overloadedDeclarations\": [],\n                                            \"referencedDeclaration\": 8763,\n                                            \"src\": \"18248:13:35\",\n                                            \"typeDescriptions\": {\n                                              \"typeIdentifier\": \"t_int256\",\n                                              \"typeString\": \"int256\"\n                                            }\n                                          }\n                                        ],\n                                        \"expression\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_int256\",\n                                              \"typeString\": \"int256\"\n                                            }\n                                          ],\n                                          \"id\": 8793,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                                          \"src\": \"18240:7:35\",\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                            \"typeString\": \"type(uint256)\"\n                                          },\n                                          \"typeName\": {\n                                            \"id\": 8792,\n                                            \"name\": \"uint256\",\n                                            \"nodeType\": \"ElementaryTypeName\",\n                                            \"src\": \"18240:7:35\",\n                                            \"typeDescriptions\": {\n                                              \"typeIdentifier\": null,\n                                              \"typeString\": null\n                                            }\n                                          }\n                                        },\n                                        \"id\": 8795,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"kind\": \"typeConversion\",\n                                        \"lValueRequested\": false,\n                                        \"names\": [],\n                                        \"nodeType\": \"FunctionCall\",\n                                        \"src\": \"18240:22:35\",\n                                        \"tryCall\": false,\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      },\n                                      \"id\": 8796,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"memberName\": \"mul\",\n                                      \"nodeType\": \"MemberAccess\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"src\": \"18240:26:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                      }\n                                    },\n                                    \"id\": 8801,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"functionCall\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"18240:48:35\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"id\": 8802,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"div\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": 10862,\n                                  \"src\": \"18240:52:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                    \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                  }\n                                },\n                                \"id\": 8804,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"18240:57:35\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"functionReturnParameters\": 8584,\n                            \"id\": 8807,\n                            \"nodeType\": \"Return\",\n                            \"src\": \"18212:89:35\"\n                          }\n                        ]\n                      }\n                    },\n                    \"id\": 8814,\n                    \"nodeType\": \"IfStatement\",\n                    \"src\": \"16786:1605:35\",\n                    \"trueBody\": {\n                      \"id\": 8722,\n                      \"nodeType\": \"Block\",\n                      \"src\": \"16840:707:35\",\n                      \"statements\": [\n                        {\n                          \"assignments\": [null, 8649, null, 8651, null],\n                          \"declarations\": [\n                            null,\n                            {\n                              \"constant\": false,\n                              \"id\": 8649,\n                              \"mutability\": \"mutable\",\n                              \"name\": \"ethUsdPrice\",\n                              \"nodeType\": \"VariableDeclaration\",\n                              \"overrides\": null,\n                              \"scope\": 8722,\n                              \"src\": \"16858:18:35\",\n                              \"stateVariable\": false,\n                              \"storageLocation\": \"default\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_int256\",\n                                \"typeString\": \"int256\"\n                              },\n                              \"typeName\": {\n                                \"id\": 8648,\n                                \"name\": \"int256\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"16858:6:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_int256\",\n                                  \"typeString\": \"int256\"\n                                }\n                              },\n                              \"value\": null,\n                              \"visibility\": \"internal\"\n                            },\n                            null,\n                            {\n                              \"constant\": false,\n                              \"id\": 8651,\n                              \"mutability\": \"mutable\",\n                              \"name\": \"updatedAt\",\n                              \"nodeType\": \"VariableDeclaration\",\n                              \"overrides\": null,\n                              \"scope\": 8722,\n                              \"src\": \"16880:17:35\",\n                              \"stateVariable\": false,\n                              \"storageLocation\": \"default\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"typeName\": {\n                                \"id\": 8650,\n                                \"name\": \"uint256\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"16880:7:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"value\": null,\n                              \"visibility\": \"internal\"\n                            },\n                            null\n                          ],\n                          \"id\": 8655,\n                          \"initialValue\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [],\n                            \"expression\": {\n                              \"argumentTypes\": [],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8652,\n                                \"name\": \"ETH_USD_PRICE_FEED\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7776,\n                                \"src\": \"16903:18:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                  \"typeString\": \"contract AggregatorV3Interface\"\n                                }\n                              },\n                              \"id\": 8653,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"latestRoundData\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 5699,\n                              \"src\": \"16903:34:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                                \"typeString\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                              }\n                            },\n                            \"id\": 8654,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"16903:36:35\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                              \"typeString\": \"tuple(uint80,int256,uint256,uint256,uint80)\"\n                            }\n                          },\n                          \"nodeType\": \"VariableDeclarationStatement\",\n                          \"src\": \"16855:84:35\"\n                        },\n                        {\n                          \"condition\": {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 8658,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 8656,\n                              \"name\": \"maxSecondsBeforePriceIsStale\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7785,\n                              \"src\": \"16958:28:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \">\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8657,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"16989:1:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            },\n                            \"src\": \"16958:32:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_bool\",\n                              \"typeString\": \"bool\"\n                            }\n                          },\n                          \"falseBody\": null,\n                          \"id\": 8669,\n                          \"nodeType\": \"IfStatement\",\n                          \"src\": \"16954:143:35\",\n                          \"trueBody\": {\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"id\": 8665,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"leftExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"expression\": {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8660,\n                                      \"name\": \"block\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": -4,\n                                      \"src\": \"17000:5:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_magic_block\",\n                                        \"typeString\": \"block\"\n                                      }\n                                    },\n                                    \"id\": 8661,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"memberName\": \"timestamp\",\n                                    \"nodeType\": \"MemberAccess\",\n                                    \"referencedDeclaration\": null,\n                                    \"src\": \"17000:15:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"nodeType\": \"BinaryOperation\",\n                                  \"operator\": \"<=\",\n                                  \"rightExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"commonType\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    \"id\": 8664,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"leftExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8662,\n                                      \"name\": \"updatedAt\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 8651,\n                                      \"src\": \"17019:9:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"nodeType\": \"BinaryOperation\",\n                                    \"operator\": \"+\",\n                                    \"rightExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8663,\n                                      \"name\": \"maxSecondsBeforePriceIsStale\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 7785,\n                                      \"src\": \"17031:28:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"src\": \"17019:40:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"src\": \"17000:59:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_bool\",\n                                    \"typeString\": \"bool\"\n                                  }\n                                },\n                                {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"4554482f55534420436861696e6c696e6b207072696365206973207374616c652e\",\n                                  \"id\": 8666,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"string\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"17061:35:35\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_stringliteral_624141b8d95880e474132a6269001d744aed5397e135db8c925bc7ddb5d8e36c\",\n                                    \"typeString\": \"literal_string \\\"ETH/USD Chainlink price is stale.\\\"\"\n                                  },\n                                  \"value\": \"ETH/USD Chainlink price is stale.\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_bool\",\n                                    \"typeString\": \"bool\"\n                                  },\n                                  {\n                                    \"typeIdentifier\": \"t_stringliteral_624141b8d95880e474132a6269001d744aed5397e135db8c925bc7ddb5d8e36c\",\n                                    \"typeString\": \"literal_string \\\"ETH/USD Chainlink price is stale.\\\"\"\n                                  }\n                                ],\n                                \"id\": 8659,\n                                \"name\": \"require\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [-18, -18],\n                                \"referencedDeclaration\": -18,\n                                \"src\": \"16992:7:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                  \"typeString\": \"function (bool,string memory) pure\"\n                                }\n                              },\n                              \"id\": 8667,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"16992:105:35\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_tuple$__$\",\n                                \"typeString\": \"tuple()\"\n                              }\n                            },\n                            \"id\": 8668,\n                            \"nodeType\": \"ExpressionStatement\",\n                            \"src\": \"16992:105:35\"\n                          }\n                        },\n                        {\n                          \"condition\": {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_int256\",\n                              \"typeString\": \"int256\"\n                            },\n                            \"id\": 8672,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 8670,\n                              \"name\": \"ethUsdPrice\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 8649,\n                              \"src\": \"17116:11:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_int256\",\n                                \"typeString\": \"int256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"<=\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8671,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"17131:1:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            },\n                            \"src\": \"17116:16:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_bool\",\n                              \"typeString\": \"bool\"\n                            }\n                          },\n                          \"falseBody\": null,\n                          \"id\": 8675,\n                          \"nodeType\": \"IfStatement\",\n                          \"src\": \"17112:30:35\",\n                          \"trueBody\": {\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8673,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"17141:1:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            },\n                            \"functionReturnParameters\": 8584,\n                            \"id\": 8674,\n                            \"nodeType\": \"Return\",\n                            \"src\": \"17134:8:35\"\n                          }\n                        },\n                        {\n                          \"assignments\": [8677],\n                          \"declarations\": [\n                            {\n                              \"constant\": false,\n                              \"id\": 8677,\n                              \"mutability\": \"mutable\",\n                              \"name\": \"tokenUsdPrice\",\n                              \"nodeType\": \"VariableDeclaration\",\n                              \"overrides\": null,\n                              \"scope\": 8722,\n                              \"src\": \"17157:20:35\",\n                              \"stateVariable\": false,\n                              \"storageLocation\": \"default\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_int256\",\n                                \"typeString\": \"int256\"\n                              },\n                              \"typeName\": {\n                                \"id\": 8676,\n                                \"name\": \"int256\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"17157:6:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_int256\",\n                                  \"typeString\": \"int256\"\n                                }\n                              },\n                              \"value\": null,\n                              \"visibility\": \"internal\"\n                            }\n                          ],\n                          \"id\": 8678,\n                          \"initialValue\": null,\n                          \"nodeType\": \"VariableDeclarationStatement\",\n                          \"src\": \"17157:20:35\"\n                        },\n                        {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 8687,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftHandSide\": {\n                              \"argumentTypes\": null,\n                              \"components\": [\n                                null,\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 8679,\n                                  \"name\": \"tokenUsdPrice\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 8677,\n                                  \"src\": \"17195:13:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_int256\",\n                                    \"typeString\": \"int256\"\n                                  }\n                                },\n                                null,\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 8680,\n                                  \"name\": \"updatedAt\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 8651,\n                                  \"src\": \"17212:9:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                null\n                              ],\n                              \"id\": 8681,\n                              \"isConstant\": false,\n                              \"isInlineArray\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"nodeType\": \"TupleExpression\",\n                              \"src\": \"17192:32:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_tuple$__$_t_int256_$__$_t_uint256_$__$\",\n                                \"typeString\": \"tuple(,int256,,uint256,)\"\n                              }\n                            },\n                            \"nodeType\": \"Assignment\",\n                            \"operator\": \"=\",\n                            \"rightHandSide\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [],\n                              \"expression\": {\n                                \"argumentTypes\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"baseExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 8682,\n                                    \"name\": \"usdPriceFeeds\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7765,\n                                    \"src\": \"17227:13:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                                      \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                                    }\n                                  },\n                                  \"id\": 8684,\n                                  \"indexExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 8683,\n                                    \"name\": \"underlying\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 8580,\n                                    \"src\": \"17241:10:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": true,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"IndexAccess\",\n                                  \"src\": \"17227:25:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                    \"typeString\": \"contract AggregatorV3Interface\"\n                                  }\n                                },\n                                \"id\": 8685,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"latestRoundData\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 5699,\n                                \"src\": \"17227:41:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                                  \"typeString\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                                }\n                              },\n                              \"id\": 8686,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"17227:43:35\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                                \"typeString\": \"tuple(uint80,int256,uint256,uint256,uint80)\"\n                              }\n                            },\n                            \"src\": \"17192:78:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_tuple$__$\",\n                              \"typeString\": \"tuple()\"\n                            }\n                          },\n                          \"id\": 8688,\n                          \"nodeType\": \"ExpressionStatement\",\n                          \"src\": \"17192:78:35\"\n                        },\n                        {\n                          \"condition\": {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 8691,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 8689,\n                              \"name\": \"maxSecondsBeforePriceIsStale\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 7785,\n                              \"src\": \"17289:28:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \">\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8690,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"17320:1:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            },\n                            \"src\": \"17289:32:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_bool\",\n                              \"typeString\": \"bool\"\n                            }\n                          },\n                          \"falseBody\": null,\n                          \"id\": 8702,\n                          \"nodeType\": \"IfStatement\",\n                          \"src\": \"17285:145:35\",\n                          \"trueBody\": {\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"id\": 8698,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"leftExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"expression\": {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8693,\n                                      \"name\": \"block\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": -4,\n                                      \"src\": \"17331:5:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_magic_block\",\n                                        \"typeString\": \"block\"\n                                      }\n                                    },\n                                    \"id\": 8694,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"memberName\": \"timestamp\",\n                                    \"nodeType\": \"MemberAccess\",\n                                    \"referencedDeclaration\": null,\n                                    \"src\": \"17331:15:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"nodeType\": \"BinaryOperation\",\n                                  \"operator\": \"<=\",\n                                  \"rightExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"commonType\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    },\n                                    \"id\": 8697,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"leftExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8695,\n                                      \"name\": \"updatedAt\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 8651,\n                                      \"src\": \"17350:9:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"nodeType\": \"BinaryOperation\",\n                                    \"operator\": \"+\",\n                                    \"rightExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8696,\n                                      \"name\": \"maxSecondsBeforePriceIsStale\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 7785,\n                                      \"src\": \"17362:28:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"src\": \"17350:40:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"src\": \"17331:59:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_bool\",\n                                    \"typeString\": \"bool\"\n                                  }\n                                },\n                                {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"546f6b656e2f55534420436861696e6c696e6b207072696365206973207374616c652e\",\n                                  \"id\": 8699,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"string\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"17392:37:35\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_stringliteral_2e5dcb30070043aea2ee526bf84d6bdda9ed59ec572e870fe648eadb3504d1cf\",\n                                    \"typeString\": \"literal_string \\\"Token/USD Chainlink price is stale.\\\"\"\n                                  },\n                                  \"value\": \"Token/USD Chainlink price is stale.\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_bool\",\n                                    \"typeString\": \"bool\"\n                                  },\n                                  {\n                                    \"typeIdentifier\": \"t_stringliteral_2e5dcb30070043aea2ee526bf84d6bdda9ed59ec572e870fe648eadb3504d1cf\",\n                                    \"typeString\": \"literal_string \\\"Token/USD Chainlink price is stale.\\\"\"\n                                  }\n                                ],\n                                \"id\": 8692,\n                                \"name\": \"require\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [-18, -18],\n                                \"referencedDeclaration\": -18,\n                                \"src\": \"17323:7:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                  \"typeString\": \"function (bool,string memory) pure\"\n                                }\n                              },\n                              \"id\": 8700,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"17323:107:35\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_tuple$__$\",\n                                \"typeString\": \"tuple()\"\n                              }\n                            },\n                            \"id\": 8701,\n                            \"nodeType\": \"ExpressionStatement\",\n                            \"src\": \"17323:107:35\"\n                          }\n                        },\n                        {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"condition\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_int256\",\n                                \"typeString\": \"int256\"\n                              },\n                              \"id\": 8705,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8703,\n                                \"name\": \"tokenUsdPrice\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8677,\n                                \"src\": \"17452:13:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_int256\",\n                                  \"typeString\": \"int256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \">=\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"30\",\n                                \"id\": 8704,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"number\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"17469:1:35\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_0_by_1\",\n                                  \"typeString\": \"int_const 0\"\n                                },\n                                \"value\": \"0\"\n                              },\n                              \"src\": \"17452:18:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              }\n                            },\n                            \"falseExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8719,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"17534:1:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            },\n                            \"id\": 8720,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Conditional\",\n                            \"src\": \"17452:83:35\",\n                            \"trueExpression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8716,\n                                      \"name\": \"ethUsdPrice\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 8649,\n                                      \"src\": \"17518:11:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_int256\",\n                                        \"typeString\": \"int256\"\n                                      }\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_int256\",\n                                        \"typeString\": \"int256\"\n                                      }\n                                    ],\n                                    \"id\": 8715,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"17510:7:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                      \"typeString\": \"type(uint256)\"\n                                    },\n                                    \"typeName\": {\n                                      \"id\": 8714,\n                                      \"name\": \"uint256\",\n                                      \"nodeType\": \"ElementaryTypeName\",\n                                      \"src\": \"17510:7:35\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": null,\n                                        \"typeString\": null\n                                      }\n                                    }\n                                  },\n                                  \"id\": 8717,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"17510:20:35\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"hexValue\": \"31653138\",\n                                      \"id\": 8711,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"kind\": \"number\",\n                                      \"lValueRequested\": false,\n                                      \"nodeType\": \"Literal\",\n                                      \"src\": \"17500:4:35\",\n                                      \"subdenomination\": null,\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                        \"typeString\": \"int_const 1000000000000000000\"\n                                      },\n                                      \"value\": \"1e18\"\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                        \"typeString\": \"int_const 1000000000000000000\"\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [\n                                        {\n                                          \"argumentTypes\": null,\n                                          \"id\": 8708,\n                                          \"name\": \"tokenUsdPrice\",\n                                          \"nodeType\": \"Identifier\",\n                                          \"overloadedDeclarations\": [],\n                                          \"referencedDeclaration\": 8677,\n                                          \"src\": \"17481:13:35\",\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_int256\",\n                                            \"typeString\": \"int256\"\n                                          }\n                                        }\n                                      ],\n                                      \"expression\": {\n                                        \"argumentTypes\": [\n                                          {\n                                            \"typeIdentifier\": \"t_int256\",\n                                            \"typeString\": \"int256\"\n                                          }\n                                        ],\n                                        \"id\": 8707,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": true,\n                                        \"lValueRequested\": false,\n                                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"17473:7:35\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                          \"typeString\": \"type(uint256)\"\n                                        },\n                                        \"typeName\": {\n                                          \"id\": 8706,\n                                          \"name\": \"uint256\",\n                                          \"nodeType\": \"ElementaryTypeName\",\n                                          \"src\": \"17473:7:35\",\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": null,\n                                            \"typeString\": null\n                                          }\n                                        }\n                                      },\n                                      \"id\": 8709,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"kind\": \"typeConversion\",\n                                      \"lValueRequested\": false,\n                                      \"names\": [],\n                                      \"nodeType\": \"FunctionCall\",\n                                      \"src\": \"17473:22:35\",\n                                      \"tryCall\": false,\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"id\": 8710,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"memberName\": \"mul\",\n                                    \"nodeType\": \"MemberAccess\",\n                                    \"referencedDeclaration\": 10845,\n                                    \"src\": \"17473:26:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                      \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    }\n                                  },\n                                  \"id\": 8712,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"functionCall\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"17473:32:35\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"id\": 8713,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"div\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 10862,\n                                \"src\": \"17473:36:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                  \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                }\n                              },\n                              \"id\": 8718,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"17473:58:35\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"functionReturnParameters\": 8584,\n                          \"id\": 8721,\n                          \"nodeType\": \"Return\",\n                          \"src\": \"17445:90:35\"\n                        }\n                      ]\n                    }\n                  },\n                  \"id\": 8815,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"16377:2014:35\",\n                  \"trueBody\": {\n                    \"id\": 8636,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"16431:349:35\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [null, 8603, null, 8605, null],\n                        \"declarations\": [\n                          null,\n                          {\n                            \"constant\": false,\n                            \"id\": 8603,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"tokenEthPrice\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 8636,\n                            \"src\": \"16449:20:35\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_int256\",\n                              \"typeString\": \"int256\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8602,\n                              \"name\": \"int256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"16449:6:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_int256\",\n                                \"typeString\": \"int256\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          },\n                          null,\n                          {\n                            \"constant\": false,\n                            \"id\": 8605,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"updatedAt\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 8636,\n                            \"src\": \"16473:17:35\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8604,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"16473:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          },\n                          null\n                        ],\n                        \"id\": 8611,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8606,\n                                \"name\": \"ethPriceFeeds\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7760,\n                                \"src\": \"16496:13:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_AggregatorV3Interface_$5700_$\",\n                                  \"typeString\": \"mapping(address => contract AggregatorV3Interface)\"\n                                }\n                              },\n                              \"id\": 8608,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 8607,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8580,\n                                \"src\": \"16510:10:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"16496:25:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                \"typeString\": \"contract AggregatorV3Interface\"\n                              }\n                            },\n                            \"id\": 8609,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"latestRoundData\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 5699,\n                            \"src\": \"16496:41:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                              \"typeString\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                            }\n                          },\n                          \"id\": 8610,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"16496:43:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                            \"typeString\": \"tuple(uint80,int256,uint256,uint256,uint80)\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"16446:93:35\"\n                      },\n                      {\n                        \"condition\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 8614,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 8612,\n                            \"name\": \"maxSecondsBeforePriceIsStale\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7785,\n                            \"src\": \"16558:28:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \">\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 8613,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"16589:1:35\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          },\n                          \"src\": \"16558:32:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"falseBody\": null,\n                        \"id\": 8625,\n                        \"nodeType\": \"IfStatement\",\n                        \"src\": \"16554:145:35\",\n                        \"trueBody\": {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                \"id\": 8621,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 8616,\n                                    \"name\": \"block\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": -4,\n                                    \"src\": \"16600:5:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_magic_block\",\n                                      \"typeString\": \"block\"\n                                    }\n                                  },\n                                  \"id\": 8617,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"timestamp\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": null,\n                                  \"src\": \"16600:15:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \"<=\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"id\": 8620,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"leftExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 8618,\n                                    \"name\": \"updatedAt\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 8605,\n                                    \"src\": \"16619:9:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"nodeType\": \"BinaryOperation\",\n                                  \"operator\": \"+\",\n                                  \"rightExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 8619,\n                                    \"name\": \"maxSecondsBeforePriceIsStale\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7785,\n                                    \"src\": \"16631:28:35\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"src\": \"16619:40:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"src\": \"16600:59:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"546f6b656e2f45544820436861696e6c696e6b207072696365206973207374616c652e\",\n                                \"id\": 8622,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"string\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"16661:37:35\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_stringliteral_27a2b4b94355b7148366882a3ae0a8f6bce4bc6db2c0f51fea7622324248f810\",\n                                  \"typeString\": \"literal_string \\\"Token/ETH Chainlink price is stale.\\\"\"\n                                },\n                                \"value\": \"Token/ETH Chainlink price is stale.\"\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_27a2b4b94355b7148366882a3ae0a8f6bce4bc6db2c0f51fea7622324248f810\",\n                                  \"typeString\": \"literal_string \\\"Token/ETH Chainlink price is stale.\\\"\"\n                                }\n                              ],\n                              \"id\": 8615,\n                              \"name\": \"require\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"src\": \"16592:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                \"typeString\": \"function (bool,string memory) pure\"\n                              }\n                            },\n                            \"id\": 8623,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"16592:107:35\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_tuple$__$\",\n                              \"typeString\": \"tuple()\"\n                            }\n                          },\n                          \"id\": 8624,\n                          \"nodeType\": \"ExpressionStatement\",\n                          \"src\": \"16592:107:35\"\n                        }\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"condition\": {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_int256\",\n                              \"typeString\": \"int256\"\n                            },\n                            \"id\": 8628,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 8626,\n                              \"name\": \"tokenEthPrice\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 8603,\n                              \"src\": \"16721:13:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_int256\",\n                                \"typeString\": \"int256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \">=\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8627,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"16738:1:35\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            },\n                            \"src\": \"16721:18:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_bool\",\n                              \"typeString\": \"bool\"\n                            }\n                          },\n                          \"falseExpression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 8633,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"16767:1:35\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          },\n                          \"id\": 8634,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Conditional\",\n                          \"src\": \"16721:47:35\",\n                          \"trueExpression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 8631,\n                                \"name\": \"tokenEthPrice\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8603,\n                                \"src\": \"16750:13:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_int256\",\n                                  \"typeString\": \"int256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_int256\",\n                                  \"typeString\": \"int256\"\n                                }\n                              ],\n                              \"id\": 8630,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"ElementaryTypeNameExpression\",\n                              \"src\": \"16742:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                \"typeString\": \"type(uint256)\"\n                              },\n                              \"typeName\": {\n                                \"id\": 8629,\n                                \"name\": \"uint256\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"16742:7:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": null,\n                                  \"typeString\": null\n                                }\n                              }\n                            },\n                            \"id\": 8632,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"16742:22:35\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"functionReturnParameters\": 8584,\n                        \"id\": 8635,\n                        \"nodeType\": \"Return\",\n                        \"src\": \"16714:54:35\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 8578,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"16042:87:35\",\n              \"text\": \" @dev Internal function returning the price in ETH of `underlying`.\"\n            },\n            \"id\": 8817,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 8581,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8580,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8817,\n                  \"src\": \"16151:18:35\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8579,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"16151:7:35\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"16150:20:35\"\n            },\n            \"returnParameters\": {\n              \"id\": 8584,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8583,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8817,\n                  \"src\": \"16194:4:35\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8582,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"16194:4:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"16193:6:35\"\n            },\n            \"scope\": 8905,\n            \"src\": \"16135:2264:35\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"baseFunctions\": [7737],\n            \"body\": {\n              \"id\": 8830,\n              \"nodeType\": \"Block\",\n              \"src\": \"18584:44:35\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 8827,\n                        \"name\": \"underlying\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 8820,\n                        \"src\": \"18609:10:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 8826,\n                      \"name\": \"_price\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 8817,\n                      \"src\": \"18602:6:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 8828,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"18602:18:35\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 8825,\n                  \"id\": 8829,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"18595:25:35\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 8818,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"18407:98:35\",\n              \"text\": \" @dev Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\"\n            },\n            \"functionSelector\": \"aea91078\",\n            \"id\": 8831,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 8822,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"18555:8:35\"\n            },\n            \"parameters\": {\n              \"id\": 8821,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8820,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8831,\n                  \"src\": \"18526:18:35\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8819,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"18526:7:35\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"18525:20:35\"\n            },\n            \"returnParameters\": {\n              \"id\": 8825,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8824,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8831,\n                  \"src\": \"18578:4:35\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8823,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"18578:4:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"18577:6:35\"\n            },\n            \"scope\": 8905,\n            \"src\": \"18511:117:35\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 8903,\n              \"nodeType\": \"Block\",\n              \"src\": \"18834:568:35\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8840,\n                        \"name\": \"cToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 8834,\n                        \"src\": \"18881:6:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                          \"typeString\": \"contract CToken\"\n                        }\n                      },\n                      \"id\": 8841,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"isCEther\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5805,\n                      \"src\": \"18881:15:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_bool_$\",\n                        \"typeString\": \"function () view external returns (bool)\"\n                      }\n                    },\n                    \"id\": 8842,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"18881:17:35\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 8845,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"18877:34:35\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 8843,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"18907:4:35\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 8839,\n                    \"id\": 8844,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"18900:11:35\"\n                  }\n                },\n                {\n                  \"assignments\": [8847],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 8847,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 8903,\n                      \"src\": \"18965:18:35\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 8846,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"18965:7:35\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 8856,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 8851,\n                                \"name\": \"cToken\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8834,\n                                \"src\": \"19001:6:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              ],\n                              \"id\": 8850,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"ElementaryTypeNameExpression\",\n                              \"src\": \"18993:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_address_$\",\n                                \"typeString\": \"type(address)\"\n                              },\n                              \"typeName\": {\n                                \"id\": 8849,\n                                \"name\": \"address\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"18993:7:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": null,\n                                  \"typeString\": null\n                                }\n                              }\n                            },\n                            \"id\": 8852,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"18993:15:35\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 8848,\n                          \"name\": \"CErc20\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 5723,\n                          \"src\": \"18986:6:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                            \"typeString\": \"type(contract CErc20)\"\n                          }\n                        },\n                        \"id\": 8853,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"18986:23:35\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                          \"typeString\": \"contract CErc20\"\n                        }\n                      },\n                      \"id\": 8854,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"underlying\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5711,\n                      \"src\": \"18986:34:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 8855,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"18986:36:35\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"18965:57:35\"\n                },\n                {\n                  \"assignments\": [8858],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 8858,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"chainlinkPrice\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 8903,\n                      \"src\": \"19057:22:35\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 8857,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"19057:7:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 8862,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 8860,\n                        \"name\": \"underlying\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 8847,\n                        \"src\": \"19089:10:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 8859,\n                      \"name\": \"_price\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 8817,\n                      \"src\": \"19082:6:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 8861,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"19082:18:35\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"19057:43:35\"\n                },\n                {\n                  \"assignments\": [8864],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 8864,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlyingDecimals\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 8903,\n                      \"src\": \"19149:26:35\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 8863,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"19149:7:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 8873,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 8868,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8847,\n                                \"src\": \"19203:10:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 8867,\n                              \"name\": \"ERC20Upgradeable\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 11533,\n                              \"src\": \"19186:16:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11533_$\",\n                                \"typeString\": \"type(contract ERC20Upgradeable)\"\n                              }\n                            },\n                            \"id\": 8869,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"19186:28:35\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11533\",\n                              \"typeString\": \"contract ERC20Upgradeable\"\n                            }\n                          },\n                          \"id\": 8870,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"decimals\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 11105,\n                          \"src\": \"19186:37:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                            \"typeString\": \"function () view external returns (uint8)\"\n                          }\n                        },\n                        \"id\": 8871,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"19186:39:35\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint8\",\n                          \"typeString\": \"uint8\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint8\",\n                          \"typeString\": \"uint8\"\n                        }\n                      ],\n                      \"id\": 8866,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"19178:7:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                        \"typeString\": \"type(uint256)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 8865,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"19178:7:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 8872,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"19178:48:35\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"19149:77:35\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"condition\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 8876,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 8874,\n                        \"name\": \"underlyingDecimals\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 8864,\n                        \"src\": \"19244:18:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"<=\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"3138\",\n                        \"id\": 8875,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"19266:2:35\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_18_by_1\",\n                          \"typeString\": \"int_const 18\"\n                        },\n                        \"value\": \"18\"\n                      },\n                      \"src\": \"19244:24:35\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"falseExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 8899,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3130\",\n                            \"id\": 8894,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"19362:2:35\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_10_by_1\",\n                              \"typeString\": \"int_const 10\"\n                            },\n                            \"value\": \"10\"\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"**\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"components\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                \"id\": 8897,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 8895,\n                                  \"name\": \"underlyingDecimals\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 8864,\n                                  \"src\": \"19369:18:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \"-\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"3138\",\n                                  \"id\": 8896,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"19390:2:35\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_18_by_1\",\n                                    \"typeString\": \"int_const 18\"\n                                  },\n                                  \"value\": \"18\"\n                                },\n                                \"src\": \"19369:23:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"id\": 8898,\n                            \"isConstant\": false,\n                            \"isInlineArray\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"TupleExpression\",\n                            \"src\": \"19368:25:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"19362:31:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 8891,\n                              \"name\": \"chainlinkPrice\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 8858,\n                              \"src\": \"19342:14:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            ],\n                            \"id\": 8890,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"19334:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                              \"typeString\": \"type(uint256)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8889,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"19334:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8892,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"19334:23:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 8893,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"div\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 10862,\n                        \"src\": \"19334:27:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                          \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                        }\n                      },\n                      \"id\": 8900,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"19334:60:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 8901,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"Conditional\",\n                    \"src\": \"19244:150:35\",\n                    \"trueExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 8887,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3130\",\n                            \"id\": 8882,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"19299:2:35\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_10_by_1\",\n                              \"typeString\": \"int_const 10\"\n                            },\n                            \"value\": \"10\"\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"**\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"components\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                \"id\": 8885,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"3138\",\n                                  \"id\": 8883,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"19306:2:35\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_18_by_1\",\n                                    \"typeString\": \"int_const 18\"\n                                  },\n                                  \"value\": \"18\"\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \"-\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 8884,\n                                  \"name\": \"underlyingDecimals\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 8864,\n                                  \"src\": \"19311:18:35\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"src\": \"19306:23:35\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"id\": 8886,\n                            \"isConstant\": false,\n                            \"isInlineArray\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"TupleExpression\",\n                            \"src\": \"19305:25:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"19299:31:35\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 8879,\n                              \"name\": \"chainlinkPrice\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 8858,\n                              \"src\": \"19279:14:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            ],\n                            \"id\": 8878,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"19271:7:35\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                              \"typeString\": \"type(uint256)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8877,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"19271:7:35\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8880,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"19271:23:35\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 8881,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"mul\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 10845,\n                        \"src\": \"19271:27:35\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                          \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                        }\n                      },\n                      \"id\": 8888,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"19271:60:35\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 8839,\n                  \"id\": 8902,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"19237:157:35\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 8832,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"18636:111:35\",\n              \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 8904,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 8836,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"18805:8:35\"\n            },\n            \"parameters\": {\n              \"id\": 8835,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8834,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8904,\n                  \"src\": \"18781:13:35\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 8833,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"18781:6:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"18780:15:35\"\n            },\n            \"returnParameters\": {\n              \"id\": 8839,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8838,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8904,\n                  \"src\": \"18828:4:35\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8837,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"18828:4:35\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"18827:6:35\"\n            },\n            \"scope\": 8905,\n            \"src\": \"18753:649:35\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 8906,\n        \"src\": \"614:18791:35\"\n      }\n    ],\n    \"src\": \"0:19407:35\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/ChainlinkPriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"ChainlinkPriceOracle\": [8905]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 7740,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"0:23:35\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 10933,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 8906,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7741,\n        \"name\": \"ImportDirective\",\n        \"src\": \"27:74:35\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 11534,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"scope\": 8906,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7742,\n        \"name\": \"ImportDirective\",\n        \"src\": \"103:78:35\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 8906,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7743,\n        \"name\": \"ImportDirective\",\n        \"src\": \"185:46:35\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5867,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n          \"file\": \"../external/compound/CToken.sol\",\n          \"scope\": 8906,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7744,\n        \"name\": \"ImportDirective\",\n        \"src\": \"233:41:35\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 8906,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7745,\n        \"name\": \"ImportDirective\",\n        \"src\": \"276:41:35\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5701,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/chainlink/AggregatorV3Interface.sol\",\n          \"file\": \"../external/chainlink/AggregatorV3Interface.sol\",\n          \"scope\": 8906,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7746,\n        \"name\": \"ImportDirective\",\n        \"src\": \"321:57:35\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 7739,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n          \"file\": \"./BasePriceOracle.sol\",\n          \"scope\": 8906,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 7747,\n        \"name\": \"ImportDirective\",\n        \"src\": \"382:31:35\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023, 7738],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [8905, 7738, 6023],\n          \"name\": \"ChainlinkPriceOracle\",\n          \"scope\": 8906\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title PreferredPriceOracle\\n @notice Returns prices from Chainlink.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n            },\n            \"id\": 7748,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"417:195:35\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 7749,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"647:11:35\"\n              }\n            ],\n            \"id\": 7750,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"647:11:35\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"BasePriceOracle\",\n                  \"referencedDeclaration\": 7738,\n                  \"type\": \"contract BasePriceOracle\"\n                },\n                \"id\": 7751,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"660:15:35\"\n              }\n            ],\n            \"id\": 7752,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"660:15:35\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 10932,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 7753,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"689:19:35\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 7754,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"713:7:35\"\n              }\n            ],\n            \"id\": 7755,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"683:38:35\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"1c5ed620\",\n              \"mutability\": \"mutable\",\n              \"name\": \"ethPriceFeeds\",\n              \"overrides\": null,\n              \"scope\": 8905,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"type\": \"mapping(address => contract AggregatorV3Interface)\"\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"name\": \"address\",\n                      \"type\": \"address\"\n                    },\n                    \"id\": 7757,\n                    \"name\": \"ElementaryTypeName\",\n                    \"src\": \"843:7:35\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"contractScope\": null,\n                      \"name\": \"AggregatorV3Interface\",\n                      \"referencedDeclaration\": 5700,\n                      \"type\": \"contract AggregatorV3Interface\"\n                    },\n                    \"id\": 7758,\n                    \"name\": \"UserDefinedTypeName\",\n                    \"src\": \"854:21:35\"\n                  }\n                ],\n                \"id\": 7759,\n                \"name\": \"Mapping\",\n                \"src\": \"835:41:35\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Maps ERC20 token addresses to ETH-based Chainlink price feed contracts.\"\n                },\n                \"id\": 7756,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"729:100:35\"\n              }\n            ],\n            \"id\": 7760,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"835:62:35\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"f0e0626f\",\n              \"mutability\": \"mutable\",\n              \"name\": \"usdPriceFeeds\",\n              \"overrides\": null,\n              \"scope\": 8905,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"type\": \"mapping(address => contract AggregatorV3Interface)\"\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"name\": \"address\",\n                      \"type\": \"address\"\n                    },\n                    \"id\": 7762,\n                    \"name\": \"ElementaryTypeName\",\n                    \"src\": \"1020:7:35\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"contractScope\": null,\n                      \"name\": \"AggregatorV3Interface\",\n                      \"referencedDeclaration\": 5700,\n                      \"type\": \"contract AggregatorV3Interface\"\n                    },\n                    \"id\": 7763,\n                    \"name\": \"UserDefinedTypeName\",\n                    \"src\": \"1031:21:35\"\n                  }\n                ],\n                \"id\": 7764,\n                \"name\": \"Mapping\",\n                \"src\": \"1012:41:35\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Maps ERC20 token addresses to USD-based Chainlink price feed contracts.\"\n                },\n                \"id\": 7761,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"906:100:35\"\n              }\n            ],\n            \"id\": 7765,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1012:62:35\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"36bfdf72\",\n              \"mutability\": \"mutable\",\n              \"name\": \"btcPriceFeeds\",\n              \"overrides\": null,\n              \"scope\": 8905,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"type\": \"mapping(address => contract AggregatorV3Interface)\"\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"name\": \"address\",\n                      \"type\": \"address\"\n                    },\n                    \"id\": 7767,\n                    \"name\": \"ElementaryTypeName\",\n                    \"src\": \"1197:7:35\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"contractScope\": null,\n                      \"name\": \"AggregatorV3Interface\",\n                      \"referencedDeclaration\": 5700,\n                      \"type\": \"contract AggregatorV3Interface\"\n                    },\n                    \"id\": 7768,\n                    \"name\": \"UserDefinedTypeName\",\n                    \"src\": \"1208:21:35\"\n                  }\n                ],\n                \"id\": 7769,\n                \"name\": \"Mapping\",\n                \"src\": \"1189:41:35\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Maps ERC20 token addresses to BTC-based Chainlink price feed contracts.\"\n                },\n                \"id\": 7766,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1083:100:35\"\n              }\n            ],\n            \"id\": 7770,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1189:62:35\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"b0f0abe9\",\n              \"mutability\": \"constant\",\n              \"name\": \"ETH_USD_PRICE_FEED\",\n              \"overrides\": null,\n              \"scope\": 8905,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"contract AggregatorV3Interface\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"AggregatorV3Interface\",\n                  \"referencedDeclaration\": 5700,\n                  \"type\": \"contract AggregatorV3Interface\"\n                },\n                \"id\": 7772,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1334:21:35\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"isStructConstructorCall\": false,\n                  \"lValueRequested\": false,\n                  \"names\": [null],\n                  \"tryCall\": false,\n                  \"type\": \"contract AggregatorV3Interface\",\n                  \"type_conversion\": true\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"overloadedDeclarations\": [null],\n                      \"referencedDeclaration\": 5700,\n                      \"type\": \"type(contract AggregatorV3Interface)\",\n                      \"value\": \"AggregatorV3Interface\"\n                    },\n                    \"id\": 7773,\n                    \"name\": \"Identifier\",\n                    \"src\": \"1393:21:35\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": null,\n                      \"hexvalue\": \"307835663465433344663963626434333731344645323734306635453336313631353563356238343139\",\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"subdenomination\": null,\n                      \"token\": \"number\",\n                      \"type\": \"address payable\",\n                      \"value\": \"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419\"\n                    },\n                    \"id\": 7774,\n                    \"name\": \"Literal\",\n                    \"src\": \"1415:42:35\"\n                  }\n                ],\n                \"id\": 7775,\n                \"name\": \"FunctionCall\",\n                \"src\": \"1393:65:35\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Chainlink ETH/USD price feed contracts.\"\n                },\n                \"id\": 7771,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1260:68:35\"\n              }\n            ],\n            \"id\": 7776,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1334:124:35\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"cf0b0613\",\n              \"mutability\": \"constant\",\n              \"name\": \"BTC_ETH_PRICE_FEED\",\n              \"overrides\": null,\n              \"scope\": 8905,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"contract AggregatorV3Interface\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"AggregatorV3Interface\",\n                  \"referencedDeclaration\": 5700,\n                  \"type\": \"contract AggregatorV3Interface\"\n                },\n                \"id\": 7778,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1541:21:35\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"isStructConstructorCall\": false,\n                  \"lValueRequested\": false,\n                  \"names\": [null],\n                  \"tryCall\": false,\n                  \"type\": \"contract AggregatorV3Interface\",\n                  \"type_conversion\": true\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"overloadedDeclarations\": [null],\n                      \"referencedDeclaration\": 5700,\n                      \"type\": \"type(contract AggregatorV3Interface)\",\n                      \"value\": \"AggregatorV3Interface\"\n                    },\n                    \"id\": 7779,\n                    \"name\": \"Identifier\",\n                    \"src\": \"1600:21:35\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": null,\n                      \"hexvalue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"subdenomination\": null,\n                      \"token\": \"number\",\n                      \"type\": \"address payable\",\n                      \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                    },\n                    \"id\": 7780,\n                    \"name\": \"Literal\",\n                    \"src\": \"1622:42:35\"\n                  }\n                ],\n                \"id\": 7781,\n                \"name\": \"FunctionCall\",\n                \"src\": \"1600:65:35\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Chainlink BTC/ETH price feed contracts.\"\n                },\n                \"id\": 7777,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1467:68:35\"\n              }\n            ],\n            \"id\": 7782,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1541:124:35\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"e073a241\",\n              \"mutability\": \"mutable\",\n              \"name\": \"maxSecondsBeforePriceIsStale\",\n              \"overrides\": null,\n              \"scope\": 8905,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"uint256\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 7784,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"1853:7:35\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @notice The maxmimum number of seconds elapsed since the round was last updated before the price is considered stale. If set to 0, no limit is enforced.\"\n                },\n                \"id\": 7783,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1674:173:35\"\n              }\n            ],\n            \"id\": 7785,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1853:43:35\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": true,\n              \"kind\": \"constructor\",\n              \"modifiers\": [null],\n              \"name\": \"\",\n              \"overrides\": null,\n              \"scope\": 8905,\n              \"stateMutability\": \"nonpayable\",\n              \"virtual\": false,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Constructor to set `maxSecondsBeforePriceIsStale` as well as all Chainlink price feeds.\"\n                },\n                \"id\": 7786,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1909:113:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"_maxSecondsBeforePriceIsStale\",\n                      \"overrides\": null,\n                      \"scope\": 8532,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 7787,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2040:7:35\"\n                      }\n                    ],\n                    \"id\": 7788,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2040:37:35\"\n                  }\n                ],\n                \"id\": 7789,\n                \"name\": \"ParameterList\",\n                \"src\": \"2039:39:35\"\n              },\n              {\n                \"attributes\": {\n                  \"parameters\": [null]\n                },\n                \"children\": [],\n                \"id\": 7790,\n                \"name\": \"ParameterList\",\n                \"src\": \"2086:0:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7785,\n                              \"type\": \"uint256\",\n                              \"value\": \"maxSecondsBeforePriceIsStale\"\n                            },\n                            \"id\": 7791,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2142:28:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7788,\n                              \"type\": \"uint256\",\n                              \"value\": \"_maxSecondsBeforePriceIsStale\"\n                            },\n                            \"id\": 7792,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2173:29:35\"\n                          }\n                        ],\n                        \"id\": 7793,\n                        \"name\": \"Assignment\",\n                        \"src\": \"2142:60:35\"\n                      }\n                    ],\n                    \"id\": 7794,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2142:60:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7795,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2257:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831313131313131313131313764433061613738623737306641364137333830333431323043333032\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x111111111117dC0aa78b770fA6A738034120C302\"\n                                },\n                                \"id\": 7796,\n                                \"name\": \"Literal\",\n                                \"src\": \"2271:42:35\"\n                              }\n                            ],\n                            \"id\": 7797,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"2257:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7798,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2317:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837324146414543463939433964394338323135664634344337374239344239394332383734316538\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8\"\n                                },\n                                \"id\": 7799,\n                                \"name\": \"Literal\",\n                                \"src\": \"2339:42:35\"\n                              }\n                            ],\n                            \"id\": 7800,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"2317:65:35\"\n                          }\n                        ],\n                        \"id\": 7801,\n                        \"name\": \"Assignment\",\n                        \"src\": \"2257:125:35\"\n                      }\n                    ],\n                    \"id\": 7802,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2257:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7803,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2402:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837466336363530306338344137364164376539633933343337624663354163333345324444614539\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9\"\n                                },\n                                \"id\": 7804,\n                                \"name\": \"Literal\",\n                                \"src\": \"2416:42:35\"\n                              }\n                            ],\n                            \"id\": 7805,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"2402:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7806,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2462:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307836446630394539373563383330454361653562643465443964393066334139356134663838303132\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012\"\n                                },\n                                \"id\": 7807,\n                                \"name\": \"Literal\",\n                                \"src\": \"2484:42:35\"\n                              }\n                            ],\n                            \"id\": 7808,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"2462:65:35\"\n                          }\n                        ],\n                        \"id\": 7809,\n                        \"name\": \"Assignment\",\n                        \"src\": \"2402:125:35\"\n                      }\n                    ],\n                    \"id\": 7810,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2402:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7811,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2546:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307844343662413644393432303530643438394442643933386132433930394135643530333941313631\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xD46bA6D942050d489DBd938a2C909A5d5039A161\"\n                                },\n                                \"id\": 7812,\n                                \"name\": \"Literal\",\n                                \"src\": \"2560:42:35\"\n                              }\n                            ],\n                            \"id\": 7813,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"2546:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7814,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2606:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834393235373546444431316130664366324336433731393836373839306137363438643532366542\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x492575FDD11a0fCf2C6C719867890a7648d526eB\"\n                                },\n                                \"id\": 7815,\n                                \"name\": \"Literal\",\n                                \"src\": \"2628:42:35\"\n                              }\n                            ],\n                            \"id\": 7816,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"2606:65:35\"\n                          }\n                        ],\n                        \"id\": 7817,\n                        \"name\": \"Assignment\",\n                        \"src\": \"2546:125:35\"\n                      }\n                    ],\n                    \"id\": 7818,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2546:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7819,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2690:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861313137303030303030663237394438314131443363633735343330664141303137464135413265\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xa117000000f279D81A1D3cc75430fAA017FA5A2e\"\n                                },\n                                \"id\": 7820,\n                                \"name\": \"Literal\",\n                                \"src\": \"2704:42:35\"\n                              }\n                            ],\n                            \"id\": 7821,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"2690:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7822,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2750:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838663833363730323630463866373730383134336238333661326136463131654630614261633031\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x8f83670260F8f7708143b836a2a6F11eF0aBac01\"\n                                },\n                                \"id\": 7823,\n                                \"name\": \"Literal\",\n                                \"src\": \"2772:42:35\"\n                              }\n                            ],\n                            \"id\": 7824,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"2750:65:35\"\n                          }\n                        ],\n                        \"id\": 7825,\n                        \"name\": \"Assignment\",\n                        \"src\": \"2690:125:35\"\n                      }\n                    ],\n                    \"id\": 7826,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2690:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7827,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2833:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307833343732413541373139363534393961636438313939376135344242413844383532433645353364\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x3472A5A71965499acd81997a54BBA8D852C6E53d\"\n                                },\n                                \"id\": 7828,\n                                \"name\": \"Literal\",\n                                \"src\": \"2847:42:35\"\n                              }\n                            ],\n                            \"id\": 7829,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"2833:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7830,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2893:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835383932314163313430353232383637626635306239453030393539394461304341344132333739\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x58921Ac140522867bf50b9E009599Da0CA4A2379\"\n                                },\n                                \"id\": 7831,\n                                \"name\": \"Literal\",\n                                \"src\": \"2915:42:35\"\n                              }\n                            ],\n                            \"id\": 7832,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"2893:65:35\"\n                          }\n                        ],\n                        \"id\": 7833,\n                        \"name\": \"Assignment\",\n                        \"src\": \"2833:125:35\"\n                      }\n                    ],\n                    \"id\": 7834,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2833:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7835,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2979:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307862613130303030303632356133373534343233393738613630633933313763353861343234653344\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xba100000625a3754423978a60c9317c58a424e3D\"\n                                },\n                                \"id\": 7836,\n                                \"name\": \"Literal\",\n                                \"src\": \"2993:42:35\"\n                              }\n                            ],\n                            \"id\": 7837,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"2979:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7838,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3039:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307843313433384141333832334136426130433135394366413844393864463541393934624131323062\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xC1438AA3823A6Ba0C159CfA8D98dF5A994bA120b\"\n                                },\n                                \"id\": 7839,\n                                \"name\": \"Literal\",\n                                \"src\": \"3061:42:35\"\n                              }\n                            ],\n                            \"id\": 7840,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3039:65:35\"\n                          }\n                        ],\n                        \"id\": 7841,\n                        \"name\": \"Assignment\",\n                        \"src\": \"2979:125:35\"\n                      }\n                    ],\n                    \"id\": 7842,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2979:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7843,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3122:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307842413131443030633566373432353566353661354533363646344637376635413138366437663535\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55\"\n                                },\n                                \"id\": 7844,\n                                \"name\": \"Literal\",\n                                \"src\": \"3136:42:35\"\n                              }\n                            ],\n                            \"id\": 7845,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"3122:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7846,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3182:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830424462303531653130633937313864314332396566626164343432453838443338393538323734\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0BDb051e10c9718d1C29efbad442E88D38958274\"\n                                },\n                                \"id\": 7847,\n                                \"name\": \"Literal\",\n                                \"src\": \"3204:42:35\"\n                              }\n                            ],\n                            \"id\": 7848,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3182:65:35\"\n                          }\n                        ],\n                        \"id\": 7849,\n                        \"name\": \"Assignment\",\n                        \"src\": \"3122:125:35\"\n                      }\n                    ],\n                    \"id\": 7850,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3122:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7851,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3266:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830443837373546363438343330363739413730394539386432623043623632353064323838374546\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0D8775F648430679A709E98d2b0Cb6250d2887EF\"\n                                },\n                                \"id\": 7852,\n                                \"name\": \"Literal\",\n                                \"src\": \"3280:42:35\"\n                              }\n                            ],\n                            \"id\": 7853,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"3266:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7854,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3326:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830643136643435323832333965396565353266613533316166363133416364423233443838633934\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0d16d4528239e9ee52fa531af613AcdB23D88c94\"\n                                },\n                                \"id\": 7855,\n                                \"name\": \"Literal\",\n                                \"src\": \"3348:42:35\"\n                              }\n                            ],\n                            \"id\": 7856,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3326:65:35\"\n                          }\n                        ],\n                        \"id\": 7857,\n                        \"name\": \"Assignment\",\n                        \"src\": \"3266:125:35\"\n                      }\n                    ],\n                    \"id\": 7858,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3266:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7859,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3409:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307842386337373438326534354631463434644531373435463532433734343236433633316244443532\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xB8c77482e45F1F44dE1745F52C74426C631bDD52\"\n                                },\n                                \"id\": 7860,\n                                \"name\": \"Literal\",\n                                \"src\": \"3423:42:35\"\n                              }\n                            ],\n                            \"id\": 7861,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"3409:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7862,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3469:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307863353436643264303631343446394444343238313562386241343645653742384663414661346132\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xc546d2d06144F9DD42815b8bA46Ee7B8FcAFa4a2\"\n                                },\n                                \"id\": 7863,\n                                \"name\": \"Literal\",\n                                \"src\": \"3491:42:35\"\n                              }\n                            ],\n                            \"id\": 7864,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3469:65:35\"\n                          }\n                        ],\n                        \"id\": 7865,\n                        \"name\": \"Assignment\",\n                        \"src\": \"3409:125:35\"\n                      }\n                    ],\n                    \"id\": 7866,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3409:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7867,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3552:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307836313761654342363133374235313038443145374434393138653337323543386345626442383438\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848\"\n                                },\n                                \"id\": 7868,\n                                \"name\": \"Literal\",\n                                \"src\": \"3566:42:35\"\n                              }\n                            ],\n                            \"id\": 7869,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"3552:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7870,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3612:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307863353436643264303631343446394444343238313562386241343645653742384663414661346132\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xc546d2d06144F9DD42815b8bA46Ee7B8FcAFa4a2\"\n                                },\n                                \"id\": 7871,\n                                \"name\": \"Literal\",\n                                \"src\": \"3634:42:35\"\n                              }\n                            ],\n                            \"id\": 7872,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3612:65:35\"\n                          }\n                        ],\n                        \"id\": 7873,\n                        \"name\": \"Assignment\",\n                        \"src\": \"3552:125:35\"\n                      }\n                    ],\n                    \"id\": 7874,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3552:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7875,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3702:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831463537334436466233463133643638394646383434423463453337373934643739613746463143\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C\"\n                                },\n                                \"id\": 7876,\n                                \"name\": \"Literal\",\n                                \"src\": \"3716:42:35\"\n                              }\n                            ],\n                            \"id\": 7877,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"3702:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7878,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3762:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307843663631643138343142313738666538324338383935666536306332454444613038333134343136\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xCf61d1841B178fe82C8895fe60c2EDDa08314416\"\n                                },\n                                \"id\": 7879,\n                                \"name\": \"Literal\",\n                                \"src\": \"3784:42:35\"\n                              }\n                            ],\n                            \"id\": 7880,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3762:65:35\"\n                          }\n                        ],\n                        \"id\": 7881,\n                        \"name\": \"Assignment\",\n                        \"src\": \"3702:125:35\"\n                      }\n                    ],\n                    \"id\": 7882,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3702:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7883,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3845:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832323630464143354535353432613737334161343466424366654466374331393362633243353939\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599\"\n                                },\n                                \"id\": 7884,\n                                \"name\": \"Literal\",\n                                \"src\": \"3859:42:35\"\n                              }\n                            ],\n                            \"id\": 7885,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"3845:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7886,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3905:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                                },\n                                \"id\": 7887,\n                                \"name\": \"Literal\",\n                                \"src\": \"3927:42:35\"\n                              }\n                            ],\n                            \"id\": 7888,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3905:65:35\"\n                          }\n                        ],\n                        \"id\": 7889,\n                        \"name\": \"Assignment\",\n                        \"src\": \"3845:125:35\"\n                      }\n                    ],\n                    \"id\": 7890,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3845:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7891,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3995:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307845423443323738316534656241383034434539613938303343363764303839333433366242323744\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D\"\n                                },\n                                \"id\": 7892,\n                                \"name\": \"Literal\",\n                                \"src\": \"4009:42:35\"\n                              }\n                            ],\n                            \"id\": 7893,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"3995:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7894,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4055:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                                },\n                                \"id\": 7895,\n                                \"name\": \"Literal\",\n                                \"src\": \"4077:42:35\"\n                              }\n                            ],\n                            \"id\": 7896,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4055:65:35\"\n                          }\n                        ],\n                        \"id\": 7897,\n                        \"name\": \"Assignment\",\n                        \"src\": \"3995:125:35\"\n                      }\n                    ],\n                    \"id\": 7898,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3995:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7899,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4147:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307866453138626536623342643838413244324137663932386430303239324537613939363343664336\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6\"\n                                },\n                                \"id\": 7900,\n                                \"name\": \"Literal\",\n                                \"src\": \"4161:42:35\"\n                              }\n                            ],\n                            \"id\": 7901,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"4147:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7902,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4207:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                                },\n                                \"id\": 7903,\n                                \"name\": \"Literal\",\n                                \"src\": \"4229:42:35\"\n                              }\n                            ],\n                            \"id\": 7904,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4207:65:35\"\n                          }\n                        ],\n                        \"id\": 7905,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4147:125:35\"\n                      }\n                    ],\n                    \"id\": 7906,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4147:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7907,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4297:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830333136454237313438356230416231343130333330376266363561303231303432633664333830\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0316EB71485b0Ab14103307bf65a021042c6d380\"\n                                },\n                                \"id\": 7908,\n                                \"name\": \"Literal\",\n                                \"src\": \"4311:42:35\"\n                              }\n                            ],\n                            \"id\": 7909,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"4297:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7910,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4357:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307864656232383846373337303636353839353938653932313445373832666135413865443638396538\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xdeb288F737066589598e9214E782fa5A8eD689e8\"\n                                },\n                                \"id\": 7911,\n                                \"name\": \"Literal\",\n                                \"src\": \"4379:42:35\"\n                              }\n                            ],\n                            \"id\": 7912,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4357:65:35\"\n                          }\n                        ],\n                        \"id\": 7913,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4297:125:35\"\n                      }\n                    ],\n                    \"id\": 7914,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4297:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7915,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4447:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834466162623134356436343635326139343864373235333330323366364537413632334337433533\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x4Fabb145d64652a948d72533023f6E7A623C7C53\"\n                                },\n                                \"id\": 7916,\n                                \"name\": \"Literal\",\n                                \"src\": \"4461:42:35\"\n                              }\n                            ],\n                            \"id\": 7917,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"4447:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7918,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4507:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307836313437313564324166383945364543393941323333383138323735313432634538386431436664\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x614715d2Af89E6EC99A233818275142cE88d1Cfd\"\n                                },\n                                \"id\": 7919,\n                                \"name\": \"Literal\",\n                                \"src\": \"4529:42:35\"\n                              }\n                            ],\n                            \"id\": 7920,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4507:65:35\"\n                          }\n                        ],\n                        \"id\": 7921,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4447:125:35\"\n                      }\n                    ],\n                    \"id\": 7922,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4447:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7923,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4591:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835366438313130383832333546313143383932303639386132303441353031306137383866346233\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x56d811088235F11C8920698a204A5010a788f4b3\"\n                                },\n                                \"id\": 7924,\n                                \"name\": \"Literal\",\n                                \"src\": \"4605:42:35\"\n                              }\n                            ],\n                            \"id\": 7925,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"4591:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7926,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4651:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838663743373138314564316132424134316366433366356430363465463931623637646165663636\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x8f7C7181Ed1a2BA41cfC3f5d064eF91b67daef66\"\n                                },\n                                \"id\": 7927,\n                                \"name\": \"Literal\",\n                                \"src\": \"4673:42:35\"\n                              }\n                            ],\n                            \"id\": 7928,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4651:65:35\"\n                          }\n                        ],\n                        \"id\": 7929,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4591:125:35\"\n                      }\n                    ],\n                    \"id\": 7930,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4591:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7931,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4735:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861614145424536466534384535346634333162304333393043666146306230313764303944343264\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d\"\n                                },\n                                \"id\": 7932,\n                                \"name\": \"Literal\",\n                                \"src\": \"4749:42:35\"\n                              }\n                            ],\n                            \"id\": 7933,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"4735:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7934,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4795:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837354662443833623462643531644565373635623261303165384433616131423032304639643333\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x75FbD83b4bd51dEe765b2a01e8D3aa1B020F9d33\"\n                                },\n                                \"id\": 7935,\n                                \"name\": \"Literal\",\n                                \"src\": \"4817:42:35\"\n                              }\n                            ],\n                            \"id\": 7936,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4795:65:35\"\n                          }\n                        ],\n                        \"id\": 7937,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4735:125:35\"\n                      }\n                    ],\n                    \"id\": 7938,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4735:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7939,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4878:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307863303065393443623636324333353230323832453666353731373231343030344137663236383838\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xc00e94Cb662C3520282E6f5717214004A7f26888\"\n                                },\n                                \"id\": 7940,\n                                \"name\": \"Literal\",\n                                \"src\": \"4892:42:35\"\n                              }\n                            ],\n                            \"id\": 7941,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"4878:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7942,\n                                \"name\": \"Identifier\",\n                                \"src\": \"4938:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831423339456538364563353937396261354333323262383236423345436238433739393931363939\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1B39Ee86Ec5979ba5C322b826B3ECb8C79991699\"\n                                },\n                                \"id\": 7943,\n                                \"name\": \"Literal\",\n                                \"src\": \"4960:42:35\"\n                              }\n                            ],\n                            \"id\": 7944,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4938:65:35\"\n                          }\n                        ],\n                        \"id\": 7945,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4878:125:35\"\n                      }\n                    ],\n                    \"id\": 7946,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4878:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7947,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5022:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834363838613862314632393246446142313745396139306338426333373964433144426438373133\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x4688a8b1F292FDaB17E9a90c8Bc379dC1DBd8713\"\n                                },\n                                \"id\": 7948,\n                                \"name\": \"Literal\",\n                                \"src\": \"5036:42:35\"\n                              }\n                            ],\n                            \"id\": 7949,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"5022:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7950,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5082:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837423632333045463739443545393743313130343961623336326330623638356661434241304332\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x7B6230EF79D5E97C11049ab362c0b685faCBA0C2\"\n                                },\n                                \"id\": 7951,\n                                \"name\": \"Literal\",\n                                \"src\": \"5104:42:35\"\n                              }\n                            ],\n                            \"id\": 7952,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"5082:65:35\"\n                          }\n                        ],\n                        \"id\": 7953,\n                        \"name\": \"Assignment\",\n                        \"src\": \"5022:125:35\"\n                      }\n                    ],\n                    \"id\": 7954,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"5022:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7955,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5167:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832626135393246373864423634333635323737323939323941416636633930383439376342323030\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x2ba592F78dB6436527729929AAf6c908497cB200\"\n                                },\n                                \"id\": 7956,\n                                \"name\": \"Literal\",\n                                \"src\": \"5181:42:35\"\n                              }\n                            ],\n                            \"id\": 7957,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"5167:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7958,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5227:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838323539374346453661663862616164376330643434314141383263624333623531373539363037\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x82597CFE6af8baad7c0d441AA82cbC3b51759607\"\n                                },\n                                \"id\": 7959,\n                                \"name\": \"Literal\",\n                                \"src\": \"5249:42:35\"\n                              }\n                            ],\n                            \"id\": 7960,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"5227:65:35\"\n                          }\n                        ],\n                        \"id\": 7961,\n                        \"name\": \"Assignment\",\n                        \"src\": \"5167:125:35\"\n                      }\n                    ],\n                    \"id\": 7962,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"5167:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7963,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5312:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307841306237334531466630423830393134414236666530343434453635383438433443333434353062\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xA0b73E1Ff0B80914AB6fe0444E65848C4C34450b\"\n                                },\n                                \"id\": 7964,\n                                \"name\": \"Literal\",\n                                \"src\": \"5326:42:35\"\n                              }\n                            ],\n                            \"id\": 7965,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"5312:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7966,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5372:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307863413639366139456239336238314144464536343335373539413239614234636632393931413936\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xcA696a9Eb93b81ADFE6435759A29aB4cf2991A96\"\n                                },\n                                \"id\": 7967,\n                                \"name\": \"Literal\",\n                                \"src\": \"5394:42:35\"\n                              }\n                            ],\n                            \"id\": 7968,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"5372:65:35\"\n                          }\n                        ],\n                        \"id\": 7969,\n                        \"name\": \"Assignment\",\n                        \"src\": \"5312:125:35\"\n                      }\n                    ],\n                    \"id\": 7970,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"5312:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7971,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5455:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307844353333613934393734306262333330366431313943433737376661393030624130333463643532\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xD533a949740bb3306d119CC777fa900bA034cd52\"\n                                },\n                                \"id\": 7972,\n                                \"name\": \"Literal\",\n                                \"src\": \"5469:42:35\"\n                              }\n                            ],\n                            \"id\": 7973,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"5455:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7974,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5515:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838613132426533333942306344313832396239314164633031393737636161354539616331323165\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x8a12Be339B0cD1829b91Adc01977caa5E9ac121e\"\n                                },\n                                \"id\": 7975,\n                                \"name\": \"Literal\",\n                                \"src\": \"5537:42:35\"\n                              }\n                            ],\n                            \"id\": 7976,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"5515:65:35\"\n                          }\n                        ],\n                        \"id\": 7977,\n                        \"name\": \"Assignment\",\n                        \"src\": \"5455:125:35\"\n                      }\n                    ],\n                    \"id\": 7978,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"5455:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7979,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5598:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307836423137353437344538393039344334344461393862393534456564654143343935323731643046\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x6B175474E89094C44Da98b954EedeAC495271d0F\"\n                                },\n                                \"id\": 7980,\n                                \"name\": \"Literal\",\n                                \"src\": \"5612:42:35\"\n                              }\n                            ],\n                            \"id\": 7981,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"5598:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7982,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5658:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837373336313645346431314137384635313132393930303264613537413061393435373746316634\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x773616E4d11A78F511299002da57A0a94577F1f4\"\n                                },\n                                \"id\": 7983,\n                                \"name\": \"Literal\",\n                                \"src\": \"5680:42:35\"\n                              }\n                            ],\n                            \"id\": 7984,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"5658:65:35\"\n                          }\n                        ],\n                        \"id\": 7985,\n                        \"name\": \"Assignment\",\n                        \"src\": \"5598:125:35\"\n                      }\n                    ],\n                    \"id\": 7986,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"5598:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7987,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5741:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307845643931383739393139423731624236393035663233616630413638643233314563463837623134\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xEd91879919B71bB6905f23af0A68d231EcF87b14\"\n                                },\n                                \"id\": 7988,\n                                \"name\": \"Literal\",\n                                \"src\": \"5755:42:35\"\n                              }\n                            ],\n                            \"id\": 7989,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"5741:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7990,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5801:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307844303130653839396637616237323341433933663832356344433541613035373636393535376332\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xD010e899f7ab723AC93f825cDC5Aa057669557c2\"\n                                },\n                                \"id\": 7991,\n                                \"name\": \"Literal\",\n                                \"src\": \"5823:42:35\"\n                              }\n                            ],\n                            \"id\": 7992,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"5801:65:35\"\n                          }\n                        ],\n                        \"id\": 7993,\n                        \"name\": \"Assignment\",\n                        \"src\": \"5741:125:35\"\n                      }\n                    ],\n                    \"id\": 7994,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"5741:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 7995,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5884:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831343934434131463131443438376332624265343534334539303038304165426134424133433262\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b\"\n                                },\n                                \"id\": 7996,\n                                \"name\": \"Literal\",\n                                \"src\": \"5898:42:35\"\n                              }\n                            ],\n                            \"id\": 7997,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"5884:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 7998,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5944:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830323938343962626330623164393362383561386236313930653937396664333846353736304532\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x029849bbc0b1d93b85a8b6190e979fd38F5760E2\"\n                                },\n                                \"id\": 7999,\n                                \"name\": \"Literal\",\n                                \"src\": \"5966:42:35\"\n                              }\n                            ],\n                            \"id\": 8000,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"5944:65:35\"\n                          }\n                        ],\n                        \"id\": 8001,\n                        \"name\": \"Assignment\",\n                        \"src\": \"5884:125:35\"\n                      }\n                    ],\n                    \"id\": 8002,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"5884:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8003,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6027:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307846363239634264393464333739314339323530313532424438646642444633383045326133423963\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c\"\n                                },\n                                \"id\": 8004,\n                                \"name\": \"Literal\",\n                                \"src\": \"6041:42:35\"\n                              }\n                            ],\n                            \"id\": 8005,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"6027:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8006,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6087:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832344439614235313935304633643632453931343466644332663331333544414136436538443142\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B\"\n                                },\n                                \"id\": 8007,\n                                \"name\": \"Literal\",\n                                \"src\": \"6109:42:35\"\n                              }\n                            ],\n                            \"id\": 8008,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"6087:65:35\"\n                          }\n                        ],\n                        \"id\": 8009,\n                        \"name\": \"Assignment\",\n                        \"src\": \"6027:125:35\"\n                      }\n                    ],\n                    \"id\": 8010,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"6027:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8011,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6170:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834453135333631464436623442423630394661363343383141326265313964383733373137383730\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x4E15361FD6b4BB609Fa63C81A2be19d873717870\"\n                                },\n                                \"id\": 8012,\n                                \"name\": \"Literal\",\n                                \"src\": \"6184:42:35\"\n                              }\n                            ],\n                            \"id\": 8013,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"6170:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8014,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6230:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832444537453461393438383438386530303538423935383534434332663739353542333564433962\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x2DE7E4a9488488e0058B95854CC2f7955B35dC9b\"\n                                },\n                                \"id\": 8015,\n                                \"name\": \"Literal\",\n                                \"src\": \"6252:42:35\"\n                              }\n                            ],\n                            \"id\": 8016,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"6230:65:35\"\n                          }\n                        ],\n                        \"id\": 8017,\n                        \"name\": \"Assignment\",\n                        \"src\": \"6170:125:35\"\n                      }\n                    ],\n                    \"id\": 8018,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"6170:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8019,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6313:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835304431633937373139303234373630373665434663384232413833416436623933353561346339\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9\"\n                                },\n                                \"id\": 8020,\n                                \"name\": \"Literal\",\n                                \"src\": \"6327:42:35\"\n                              }\n                            ],\n                            \"id\": 8021,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"6313:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8022,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6373:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307846303938356637453243614246663232436563433561373132383261383935383263333832454645\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xF0985f7E2CaBFf22CecC5a71282a89582c382EFE\"\n                                },\n                                \"id\": 8023,\n                                \"name\": \"Literal\",\n                                \"src\": \"6395:42:35\"\n                              }\n                            ],\n                            \"id\": 8024,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"6373:65:35\"\n                          }\n                        ],\n                        \"id\": 8025,\n                        \"name\": \"Assignment\",\n                        \"src\": \"6313:125:35\"\n                      }\n                    ],\n                    \"id\": 8026,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"6313:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8027,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6456:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307863393434453930433634423263303736363241323932626536323434424466303543646134346137\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xc944E90C64B2c07662A292be6244BDf05Cda44a7\"\n                                },\n                                \"id\": 8028,\n                                \"name\": \"Literal\",\n                                \"src\": \"6470:42:35\"\n                              }\n                            ],\n                            \"id\": 8029,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"6456:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8030,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6516:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831374430353465436163333344393146373334303634353334316546423544453930303946314331\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x17D054eCac33D91F7340645341eFB5DE9009F1C1\"\n                                },\n                                \"id\": 8031,\n                                \"name\": \"Literal\",\n                                \"src\": \"6538:42:35\"\n                              }\n                            ],\n                            \"id\": 8032,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"6516:65:35\"\n                          }\n                        ],\n                        \"id\": 8033,\n                        \"name\": \"Assignment\",\n                        \"src\": \"6456:125:35\"\n                      }\n                    ],\n                    \"id\": 8034,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"6456:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8035,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6599:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835383462433133633744343131633030633031413632653830313934373264453638373638343330\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x584bC13c7D411c00c01A62e8019472dE68768430\"\n                                },\n                                \"id\": 8036,\n                                \"name\": \"Literal\",\n                                \"src\": \"6613:42:35\"\n                              }\n                            ],\n                            \"id\": 8037,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"6599:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8038,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6659:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307841663545384439436439664338353732354138334246323343353266314333394137313538386136\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xAf5E8D9Cd9fC85725A83BF23C52f1C39A71588a6\"\n                                },\n                                \"id\": 8039,\n                                \"name\": \"Literal\",\n                                \"src\": \"6681:42:35\"\n                              }\n                            ],\n                            \"id\": 8040,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"6659:65:35\"\n                          }\n                        ],\n                        \"id\": 8041,\n                        \"name\": \"Assignment\",\n                        \"src\": \"6599:125:35\"\n                      }\n                    ],\n                    \"id\": 8042,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"6599:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8043,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6744:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307864643937344435433265323932386465413546373162393832356238623634363638364244323030\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xdd974D5C2e2928deA5F71b9825b8b646686BD200\"\n                                },\n                                \"id\": 8044,\n                                \"name\": \"Literal\",\n                                \"src\": \"6758:42:35\"\n                              }\n                            ],\n                            \"id\": 8045,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"6744:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8046,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6804:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307836353663303534346546344339384136613938343931383333413839323034416262303435643662\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x656c0544eF4C98A6a98491833A89204Abb045d6b\"\n                                },\n                                \"id\": 8047,\n                                \"name\": \"Literal\",\n                                \"src\": \"6826:42:35\"\n                              }\n                            ],\n                            \"id\": 8048,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"6804:65:35\"\n                          }\n                        ],\n                        \"id\": 8049,\n                        \"name\": \"Assignment\",\n                        \"src\": \"6744:125:35\"\n                      }\n                    ],\n                    \"id\": 8050,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"6744:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8051,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6887:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831634542356342353743344434453262323433333634316239354464333330413333313835413434\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44\"\n                                },\n                                \"id\": 8052,\n                                \"name\": \"Literal\",\n                                \"src\": \"6901:42:35\"\n                              }\n                            ],\n                            \"id\": 8053,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"6887:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8054,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6947:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307865373031354343623745354637383842386331303130464332323334333437334561614333373431\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xe7015CCb7E5F788B8c1010FC22343473EaaC3741\"\n                                },\n                                \"id\": 8055,\n                                \"name\": \"Literal\",\n                                \"src\": \"6969:42:35\"\n                              }\n                            ],\n                            \"id\": 8056,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"6947:65:35\"\n                          }\n                        ],\n                        \"id\": 8057,\n                        \"name\": \"Assignment\",\n                        \"src\": \"6887:125:35\"\n                      }\n                    ],\n                    \"id\": 8058,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"6887:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8059,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7031:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835313439313037373141463943613635366166383430646666383345383236344563463938364341\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x514910771AF9Ca656af840dff83E8264EcF986CA\"\n                                },\n                                \"id\": 8060,\n                                \"name\": \"Literal\",\n                                \"src\": \"7045:42:35\"\n                              }\n                            ],\n                            \"id\": 8061,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"7031:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8062,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7091:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307844433533304439343537373535393236353530623539653845436364614537363234313831353537\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xDC530D9457755926550b59e8ECcdaE7624181557\"\n                                },\n                                \"id\": 8063,\n                                \"name\": \"Literal\",\n                                \"src\": \"7113:42:35\"\n                              }\n                            ],\n                            \"id\": 8064,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"7091:65:35\"\n                          }\n                        ],\n                        \"id\": 8065,\n                        \"name\": \"Assignment\",\n                        \"src\": \"7031:125:35\"\n                      }\n                    ],\n                    \"id\": 8066,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"7031:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8067,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7175:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307842426262434136413930316339323646323430623839456163423634316438416563374145616644\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD\"\n                                },\n                                \"id\": 8068,\n                                \"name\": \"Literal\",\n                                \"src\": \"7189:42:35\"\n                              }\n                            ],\n                            \"id\": 8069,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"7175:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8070,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7235:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831363041433932384131364339336544343839354332446536663831454363453961376542376234\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x160AC928A16C93eD4895C2De6f81ECcE9a7eB7b4\"\n                                },\n                                \"id\": 8071,\n                                \"name\": \"Literal\",\n                                \"src\": \"7257:42:35\"\n                              }\n                            ],\n                            \"id\": 8072,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"7235:65:35\"\n                          }\n                        ],\n                        \"id\": 8073,\n                        \"name\": \"Assignment\",\n                        \"src\": \"7175:125:35\"\n                      }\n                    ],\n                    \"id\": 8074,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"7175:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8075,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7318:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830463544326642323966623764334346654534343461323030323938663436383930386343393432\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0F5D2fB29fb7d3CFeE444a200298f468908cC942\"\n                                },\n                                \"id\": 8076,\n                                \"name\": \"Literal\",\n                                \"src\": \"7332:42:35\"\n                              }\n                            ],\n                            \"id\": 8077,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"7318:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8078,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7378:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838324134344439324436633332393832366463353537633545314265366562654335443546654239\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x82A44D92D6c329826dc557c5E1Be6ebeC5D5FeB9\"\n                                },\n                                \"id\": 8079,\n                                \"name\": \"Literal\",\n                                \"src\": \"7400:42:35\"\n                              }\n                            ],\n                            \"id\": 8080,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"7378:65:35\"\n                          }\n                        ],\n                        \"id\": 8081,\n                        \"name\": \"Assignment\",\n                        \"src\": \"7318:125:35\"\n                      }\n                    ],\n                    \"id\": 8082,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"7318:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8083,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7462:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307839663846373261413933303463384235393364353535463132654636353839634333413537394132\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2\"\n                                },\n                                \"id\": 8084,\n                                \"name\": \"Literal\",\n                                \"src\": \"7476:42:35\"\n                              }\n                            ],\n                            \"id\": 8085,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"7462:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8086,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7522:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832343535316138466232413732313141323561313742313438316630343341386138616443376632\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x24551a8Fb2A7211A25a17B1481f043A8a8adC7f2\"\n                                },\n                                \"id\": 8087,\n                                \"name\": \"Literal\",\n                                \"src\": \"7544:42:35\"\n                              }\n                            ],\n                            \"id\": 8088,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"7522:65:35\"\n                          }\n                        ],\n                        \"id\": 8089,\n                        \"name\": \"Assignment\",\n                        \"src\": \"7462:125:35\"\n                      }\n                    ],\n                    \"id\": 8090,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"7462:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8091,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7605:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307865633637303035633445343938456337663535453039326264316433356362433437433931383932\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xec67005c4E498Ec7f55E092bd1d35cbC47C91892\"\n                                },\n                                \"id\": 8092,\n                                \"name\": \"Literal\",\n                                \"src\": \"7619:42:35\"\n                              }\n                            ],\n                            \"id\": 8093,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"7605:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8094,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7665:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307844616541383338363631314131353742303838323945443439393741384136324235353730313443\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xDaeA8386611A157B08829ED4997A8A62B557014C\"\n                                },\n                                \"id\": 8095,\n                                \"name\": \"Literal\",\n                                \"src\": \"7687:42:35\"\n                              }\n                            ],\n                            \"id\": 8096,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"7665:65:35\"\n                          }\n                        ],\n                        \"id\": 8097,\n                        \"name\": \"Assignment\",\n                        \"src\": \"7605:125:35\"\n                      }\n                    ],\n                    \"id\": 8098,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"7605:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8099,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7748:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861334265443445316337354430306661366634453545363932324442373236314235453941634432\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2\"\n                                },\n                                \"id\": 8100,\n                                \"name\": \"Literal\",\n                                \"src\": \"7762:42:35\"\n                              }\n                            ],\n                            \"id\": 8101,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"7748:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8102,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7808:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307839383333346238354465324138623939384261383434633535323165373344363841443639433030\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x98334b85De2A8b998Ba844c5521e73D68AD69C00\"\n                                },\n                                \"id\": 8103,\n                                \"name\": \"Literal\",\n                                \"src\": \"7830:42:35\"\n                              }\n                            ],\n                            \"id\": 8104,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"7808:65:35\"\n                          }\n                        ],\n                        \"id\": 8105,\n                        \"name\": \"Assignment\",\n                        \"src\": \"7748:125:35\"\n                      }\n                    ],\n                    \"id\": 8106,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"7748:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8107,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7891:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831373736653146323666393862314135644639634433343739353361323664643343623436363731\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671\"\n                                },\n                                \"id\": 8108,\n                                \"name\": \"Literal\",\n                                \"src\": \"7905:42:35\"\n                              }\n                            ],\n                            \"id\": 8109,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"7891:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8110,\n                                \"name\": \"Identifier\",\n                                \"src\": \"7951:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307839634232413031413745363439393264333241333464623763456561346339313943333931663641\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x9cB2A01A7E64992d32A34db7cEea4c919C391f6A\"\n                                },\n                                \"id\": 8111,\n                                \"name\": \"Literal\",\n                                \"src\": \"7973:42:35\"\n                              }\n                            ],\n                            \"id\": 8112,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"7951:65:35\"\n                          }\n                        ],\n                        \"id\": 8113,\n                        \"name\": \"Assignment\",\n                        \"src\": \"7891:125:35\"\n                      }\n                    ],\n                    \"id\": 8114,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"7891:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8115,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8034:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307864323631313463643645453238394163634638323335306338643834383766656442384130433037\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xd26114cd6EE289AccF82350c8d8487fedB8A0C07\"\n                                },\n                                \"id\": 8116,\n                                \"name\": \"Literal\",\n                                \"src\": \"8048:42:35\"\n                              }\n                            ],\n                            \"id\": 8117,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"8034:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8118,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8094:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835374339614233653536454534613833373532633138316632343131323061334442626130366131\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x57C9aB3e56EE4a83752c181f241120a3DBba06a1\"\n                                },\n                                \"id\": 8119,\n                                \"name\": \"Literal\",\n                                \"src\": \"8116:42:35\"\n                              }\n                            ],\n                            \"id\": 8120,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"8094:65:35\"\n                          }\n                        ],\n                        \"id\": 8121,\n                        \"name\": \"Assignment\",\n                        \"src\": \"8034:125:35\"\n                      }\n                    ],\n                    \"id\": 8122,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"8034:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8123,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8177:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830323538463437343738364464466433374142434536646636424262314464356466433434333461\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a\"\n                                },\n                                \"id\": 8124,\n                                \"name\": \"Literal\",\n                                \"src\": \"8191:42:35\"\n                              }\n                            ],\n                            \"id\": 8125,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"8177:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8126,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8237:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307862413942326133363065623861426462363737643664376632374531324465313141413035326566\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xbA9B2a360eb8aBdb677d6d7f27E12De11AA052ef\"\n                                },\n                                \"id\": 8127,\n                                \"name\": \"Literal\",\n                                \"src\": \"8259:42:35\"\n                              }\n                            ],\n                            \"id\": 8128,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"8237:65:35\"\n                          }\n                        ],\n                        \"id\": 8129,\n                        \"name\": \"Assignment\",\n                        \"src\": \"8177:125:35\"\n                      }\n                    ],\n                    \"id\": 8130,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"8177:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8131,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8320:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838453837304436374636363044393564356265353330333830443065433062643338383238394531\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x8E870D67F660D95d5be530380D0eC0bd388289E1\"\n                                },\n                                \"id\": 8132,\n                                \"name\": \"Literal\",\n                                \"src\": \"8334:42:35\"\n                              }\n                            ],\n                            \"id\": 8133,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"8320:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8134,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8380:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307833613038656242614231323532323462376236343734333834456533396642623234374432323030\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x3a08ebBaB125224b7b6474384Ee39fBb247D2200\"\n                                },\n                                \"id\": 8135,\n                                \"name\": \"Literal\",\n                                \"src\": \"8402:42:35\"\n                              }\n                            ],\n                            \"id\": 8136,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"8380:65:35\"\n                          }\n                        ],\n                        \"id\": 8137,\n                        \"name\": \"Assignment\",\n                        \"src\": \"8320:125:35\"\n                      }\n                    ],\n                    \"id\": 8138,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"8320:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8139,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8463:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834353830343838304465323239313364414645303966343938303834384543453645636241663738\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x45804880De22913dAFE09f4980848ECE6EcbAf78\"\n                                },\n                                \"id\": 8140,\n                                \"name\": \"Literal\",\n                                \"src\": \"8477:42:35\"\n                              }\n                            ],\n                            \"id\": 8141,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"8463:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8142,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8523:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307839423937333034454131324546656430464164393736464265434161643436303136626632363965\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x9B97304EA12EFed0FAd976FBeCAad46016bf269e\"\n                                },\n                                \"id\": 8143,\n                                \"name\": \"Literal\",\n                                \"src\": \"8545:42:35\"\n                              }\n                            ],\n                            \"id\": 8144,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"8523:65:35\"\n                          }\n                        ],\n                        \"id\": 8145,\n                        \"name\": \"Assignment\",\n                        \"src\": \"8463:125:35\"\n                      }\n                    ],\n                    \"id\": 8146,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"8463:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8147,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8607:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834303865343138373663434344433046393232313036303065663530333732363536303532613338\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x408e41876cCCDC0F92210600ef50372656052a38\"\n                                },\n                                \"id\": 8148,\n                                \"name\": \"Literal\",\n                                \"src\": \"8621:42:35\"\n                              }\n                            ],\n                            \"id\": 8149,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"8607:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8150,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8667:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307833313437443732303333353444633036443966643335306337613234333762634139323338376134\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x3147D7203354Dc06D9fd350c7a2437bcA92387a4\"\n                                },\n                                \"id\": 8151,\n                                \"name\": \"Literal\",\n                                \"src\": \"8689:42:35\"\n                              }\n                            ],\n                            \"id\": 8152,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"8667:65:35\"\n                          }\n                        ],\n                        \"id\": 8153,\n                        \"name\": \"Assignment\",\n                        \"src\": \"8607:125:35\"\n                      }\n                    ],\n                    \"id\": 8154,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"8607:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8155,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8750:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832323136353737373638343638393039383961373539424132393733653432374466463543396242\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x221657776846890989a759BA2973e427DfF5C9bB\"\n                                },\n                                \"id\": 8156,\n                                \"name\": \"Literal\",\n                                \"src\": \"8764:42:35\"\n                              }\n                            ],\n                            \"id\": 8157,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"8750:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8158,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8810:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307844344345343330433362363762334532463730323644383645373132383538383632396532343535\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xD4CE430C3b67b3E2F7026D86E7128588629e2455\"\n                                },\n                                \"id\": 8159,\n                                \"name\": \"Literal\",\n                                \"src\": \"8832:42:35\"\n                              }\n                            ],\n                            \"id\": 8160,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"8810:65:35\"\n                          }\n                        ],\n                        \"id\": 8161,\n                        \"name\": \"Assignment\",\n                        \"src\": \"8750:125:35\"\n                      }\n                    ],\n                    \"id\": 8162,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"8750:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8163,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8893:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307836303746344335424236373232333065383637323038353533326637653930313534346137333735\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x607F4C5BB672230e8672085532f7e901544a7375\"\n                                },\n                                \"id\": 8164,\n                                \"name\": \"Literal\",\n                                \"src\": \"8907:42:35\"\n                              }\n                            ],\n                            \"id\": 8165,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"8893:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8166,\n                                \"name\": \"Identifier\",\n                                \"src\": \"8953:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834636261316531666463373338443066653844423365653037373238453242633444413637366336\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x4cba1e1fdc738D0fe8DB3ee07728E2Bc4DA676c6\"\n                                },\n                                \"id\": 8167,\n                                \"name\": \"Literal\",\n                                \"src\": \"8975:42:35\"\n                              }\n                            ],\n                            \"id\": 8168,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"8953:65:35\"\n                          }\n                        ],\n                        \"id\": 8169,\n                        \"name\": \"Assignment\",\n                        \"src\": \"8893:125:35\"\n                      }\n                    ],\n                    \"id\": 8170,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"8893:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8171,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9036:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307833313535424138354435463936623264303330613439363641463230363233306534363834396362\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x3155BA85D5F96b2d030a4966AF206230e46849cb\"\n                                },\n                                \"id\": 8172,\n                                \"name\": \"Literal\",\n                                \"src\": \"9050:42:35\"\n                              }\n                            ],\n                            \"id\": 8173,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"9036:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8174,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9096:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838373544363043343463666243333842614134456232644442373641373637644542393162393765\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x875D60C44cfbC38BaA4Eb2dDB76A767dEB91b97e\"\n                                },\n                                \"id\": 8175,\n                                \"name\": \"Literal\",\n                                \"src\": \"9118:42:35\"\n                              }\n                            ],\n                            \"id\": 8176,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"9096:65:35\"\n                          }\n                        ],\n                        \"id\": 8177,\n                        \"name\": \"Assignment\",\n                        \"src\": \"9036:125:35\"\n                      }\n                    ],\n                    \"id\": 8178,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"9036:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8179,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9180:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307843303131613733656538353736466234364635453163353735316341334239466530616632613646\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F\"\n                                },\n                                \"id\": 8180,\n                                \"name\": \"Literal\",\n                                \"src\": \"9194:42:35\"\n                              }\n                            ],\n                            \"id\": 8181,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"9180:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8182,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9240:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837393239314139643639324466393533333442316130423342344145366243363036373832663863\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x79291A9d692Df95334B1a0B3B4AE6bC606782f8c\"\n                                },\n                                \"id\": 8183,\n                                \"name\": \"Literal\",\n                                \"src\": \"9262:42:35\"\n                              }\n                            ],\n                            \"id\": 8184,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"9240:65:35\"\n                          }\n                        ],\n                        \"id\": 8185,\n                        \"name\": \"Assignment\",\n                        \"src\": \"9180:125:35\"\n                      }\n                    ],\n                    \"id\": 8186,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"9180:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8187,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9323:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834373663354532366137356264323032613936383366664433343335394330434331356265306646\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x476c5E26a75bd202a9683ffD34359C0CC15be0fF\"\n                                },\n                                \"id\": 8188,\n                                \"name\": \"Literal\",\n                                \"src\": \"9337:42:35\"\n                              }\n                            ],\n                            \"id\": 8189,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"9323:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8190,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9383:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830353063303438633961304344306537366631363645323533394638376566326163434543353866\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x050c048c9a0CD0e76f166E2539F87ef2acCEC58f\"\n                                },\n                                \"id\": 8191,\n                                \"name\": \"Literal\",\n                                \"src\": \"9405:42:35\"\n                              }\n                            ],\n                            \"id\": 8192,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"9383:65:35\"\n                          }\n                        ],\n                        \"id\": 8193,\n                        \"name\": \"Assignment\",\n                        \"src\": \"9323:125:35\"\n                      }\n                    ],\n                    \"id\": 8194,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"9323:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8195,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9466:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835374162316563323844313239373037303532646634644634313844353861324434366435663531\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x57Ab1ec28D129707052df4dF418D58a2D46d5f51\"\n                                },\n                                \"id\": 8196,\n                                \"name\": \"Literal\",\n                                \"src\": \"9480:42:35\"\n                              }\n                            ],\n                            \"id\": 8197,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"9466:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8198,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9526:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838653062376536303632323732423565463435323432353062464646386535426433343937373537\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x8e0b7e6062272B5eF4524250bFFF8e5Bd3497757\"\n                                },\n                                \"id\": 8199,\n                                \"name\": \"Literal\",\n                                \"src\": \"9548:42:35\"\n                              }\n                            ],\n                            \"id\": 8200,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"9526:65:35\"\n                          }\n                        ],\n                        \"id\": 8201,\n                        \"name\": \"Assignment\",\n                        \"src\": \"9466:125:35\"\n                      }\n                    ],\n                    \"id\": 8202,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"9466:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8203,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9610:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307836423335393530363837373844443539326533394131323266346635613563463039433930664532\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x6B3595068778DD592e39A122f4f5a5cF09C90fE2\"\n                                },\n                                \"id\": 8204,\n                                \"name\": \"Literal\",\n                                \"src\": \"9624:42:35\"\n                              }\n                            ],\n                            \"id\": 8205,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"9610:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8206,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9670:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307865353732436546363966343363324534383862333339323441463034424461634531393037396366\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xe572CeF69f43c2E488b33924AF04BDacE19079cf\"\n                                },\n                                \"id\": 8207,\n                                \"name\": \"Literal\",\n                                \"src\": \"9692:42:35\"\n                              }\n                            ],\n                            \"id\": 8208,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"9670:65:35\"\n                          }\n                        ],\n                        \"id\": 8209,\n                        \"name\": \"Assignment\",\n                        \"src\": \"9610:125:35\"\n                      }\n                    ],\n                    \"id\": 8210,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"9610:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8211,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9755:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830303030303030303030303835643437383042373331313962363434414535656364323262333736\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0000000000085d4780B73119b644AE5ecd22b376\"\n                                },\n                                \"id\": 8212,\n                                \"name\": \"Literal\",\n                                \"src\": \"9769:42:35\"\n                              }\n                            ],\n                            \"id\": 8213,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"9755:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8214,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9815:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307833383836424139383732333631383144393846323430316335303746623842654137383731644632\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x3886BA987236181D98F2401c507Fb8BeA7871dF2\"\n                                },\n                                \"id\": 8215,\n                                \"name\": \"Literal\",\n                                \"src\": \"9837:42:35\"\n                              }\n                            ],\n                            \"id\": 8216,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"9815:65:35\"\n                          }\n                        ],\n                        \"id\": 8217,\n                        \"name\": \"Assignment\",\n                        \"src\": \"9755:125:35\"\n                      }\n                    ],\n                    \"id\": 8218,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"9755:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8219,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9899:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830344661306432333543346162663442634634373837614634434634343744453537326546383238\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828\"\n                                },\n                                \"id\": 8220,\n                                \"name\": \"Literal\",\n                                \"src\": \"9913:42:35\"\n                              }\n                            ],\n                            \"id\": 8221,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"9899:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8222,\n                                \"name\": \"Identifier\",\n                                \"src\": \"9959:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307866383137423639454135383343414646323931453238374361453030456133323964323237363543\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xf817B69EA583CAFF291E287CaE00Ea329d22765C\"\n                                },\n                                \"id\": 8223,\n                                \"name\": \"Literal\",\n                                \"src\": \"9981:42:35\"\n                              }\n                            ],\n                            \"id\": 8224,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"9959:65:35\"\n                          }\n                        ],\n                        \"id\": 8225,\n                        \"name\": \"Assignment\",\n                        \"src\": \"9899:125:35\"\n                      }\n                    ],\n                    \"id\": 8226,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"9899:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8227,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10042:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831663938343061383564356146356266314431373632463932354244414464433432303146393834\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984\"\n                                },\n                                \"id\": 8228,\n                                \"name\": \"Literal\",\n                                \"src\": \"10056:42:35\"\n                              }\n                            ],\n                            \"id\": 8229,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"10042:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8230,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10102:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307844366141334432353131366438644137394561303234366334383236454239353138373265303265\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e\"\n                                },\n                                \"id\": 8231,\n                                \"name\": \"Literal\",\n                                \"src\": \"10124:42:35\"\n                              }\n                            ],\n                            \"id\": 8232,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"10102:65:35\"\n                          }\n                        ],\n                        \"id\": 8233,\n                        \"name\": \"Assignment\",\n                        \"src\": \"10042:125:35\"\n                      }\n                    ],\n                    \"id\": 8234,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"10042:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8235,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10185:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307841306238363939316336323138623336633164313944346132653945623063453336303665423438\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\"\n                                },\n                                \"id\": 8236,\n                                \"name\": \"Literal\",\n                                \"src\": \"10199:42:35\"\n                              }\n                            ],\n                            \"id\": 8237,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"10185:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8238,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10245:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307839383662354531653137353565334332343430653936303437376632353230314230613862624434\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x986b5E1e1755e3C2440e960477f25201B0a8bbD4\"\n                                },\n                                \"id\": 8239,\n                                \"name\": \"Literal\",\n                                \"src\": \"10267:42:35\"\n                              }\n                            ],\n                            \"id\": 8240,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"10245:65:35\"\n                          }\n                        ],\n                        \"id\": 8241,\n                        \"name\": \"Assignment\",\n                        \"src\": \"10185:125:35\"\n                      }\n                    ],\n                    \"id\": 8242,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"10185:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8243,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10329:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307864414331374639353844326565353233613232303632303639393435393743313344383331656337\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xdAC17F958D2ee523a2206206994597C13D831ec7\"\n                                },\n                                \"id\": 8244,\n                                \"name\": \"Literal\",\n                                \"src\": \"10343:42:35\"\n                              }\n                            ],\n                            \"id\": 8245,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"10329:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8246,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10389:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307845653946323337356234626446363338376161383236356444344642384631363531324131643436\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xEe9F2375b4bdF6387aa8265dD4FB8F16512A1d46\"\n                                },\n                                \"id\": 8247,\n                                \"name\": \"Literal\",\n                                \"src\": \"10411:42:35\"\n                              }\n                            ],\n                            \"id\": 8248,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"10389:65:35\"\n                          }\n                        ],\n                        \"id\": 8249,\n                        \"name\": \"Assignment\",\n                        \"src\": \"10329:125:35\"\n                      }\n                    ],\n                    \"id\": 8250,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"10329:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8251,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10473:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861343763386266333766393261426564344131323642444138303741376237343938363631616344\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xa47c8bf37f92aBed4A126BDA807A7b7498661acD\"\n                                },\n                                \"id\": 8252,\n                                \"name\": \"Literal\",\n                                \"src\": \"10487:42:35\"\n                              }\n                            ],\n                            \"id\": 8253,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"10473:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8254,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10533:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861323036323330373034313364343261354330314462326338313131363430444437413541303361\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xa20623070413d42a5C01Db2c8111640DD7A5A03a\"\n                                },\n                                \"id\": 8255,\n                                \"name\": \"Literal\",\n                                \"src\": \"10555:42:35\"\n                              }\n                            ],\n                            \"id\": 8256,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"10533:65:35\"\n                          }\n                        ],\n                        \"id\": 8257,\n                        \"name\": \"Assignment\",\n                        \"src\": \"10473:125:35\"\n                      }\n                    ],\n                    \"id\": 8258,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"10473:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8259,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10616:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830643433384633623531373542656263323632624632333735334331453533643033343332624445\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0d438F3b5175Bebc262bF23753C1E53d03432bDE\"\n                                },\n                                \"id\": 8260,\n                                \"name\": \"Literal\",\n                                \"src\": \"10630:42:35\"\n                              }\n                            ],\n                            \"id\": 8261,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"10616:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8262,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10676:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307865354463304136303941623862434631356433663335634661613146663430663532313137334561\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xe5Dc0A609Ab8bCF15d3f35cFaa1Ff40f521173Ea\"\n                                },\n                                \"id\": 8263,\n                                \"name\": \"Literal\",\n                                \"src\": \"10698:42:35\"\n                              }\n                            ],\n                            \"id\": 8264,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"10676:65:35\"\n                          }\n                        ],\n                        \"id\": 8265,\n                        \"name\": \"Assignment\",\n                        \"src\": \"10616:125:35\"\n                      }\n                    ],\n                    \"id\": 8266,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"10616:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8267,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10760:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307842643335366133394246663263416461384539323438353332444438373931343732323143663736\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xBd356a39BFf2cAda8E9248532DD879147221Cf76\"\n                                },\n                                \"id\": 8268,\n                                \"name\": \"Literal\",\n                                \"src\": \"10774:42:35\"\n                              }\n                            ],\n                            \"id\": 8269,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"10760:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8270,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10820:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307863454244323032366433433939463261374345303238616366333732433135346142343633386139\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xcEBD2026d3C99F2a7CE028acf372C154aB4638a9\"\n                                },\n                                \"id\": 8271,\n                                \"name\": \"Literal\",\n                                \"src\": \"10842:42:35\"\n                              }\n                            ],\n                            \"id\": 8272,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"10820:65:35\"\n                          }\n                        ],\n                        \"id\": 8273,\n                        \"name\": \"Assignment\",\n                        \"src\": \"10760:125:35\"\n                      }\n                    ],\n                    \"id\": 8274,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"10760:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8275,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10903:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830626335323963303043363430316145463644323230424538433645613136363746364164393365\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e\"\n                                },\n                                \"id\": 8276,\n                                \"name\": \"Literal\",\n                                \"src\": \"10917:42:35\"\n                              }\n                            ],\n                            \"id\": 8277,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"10903:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8278,\n                                \"name\": \"Identifier\",\n                                \"src\": \"10963:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837633564344638333435653636663638303939353831446233343063643635423037384334316634\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x7c5d4F8345e66f68099581Db340cd65B078C41f4\"\n                                },\n                                \"id\": 8279,\n                                \"name\": \"Literal\",\n                                \"src\": \"10985:42:35\"\n                              }\n                            ],\n                            \"id\": 8280,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"10963:65:35\"\n                          }\n                        ],\n                        \"id\": 8281,\n                        \"name\": \"Assignment\",\n                        \"src\": \"10903:125:35\"\n                      }\n                    ],\n                    \"id\": 8282,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"10903:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8283,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11046:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861316430453231356132336437303330383432464336376345353832613661466133434361423833\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xa1d0E215a23d7030842FC67cE582a6aFa3CCaB83\"\n                                },\n                                \"id\": 8284,\n                                \"name\": \"Literal\",\n                                \"src\": \"11060:42:35\"\n                              }\n                            ],\n                            \"id\": 8285,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"11046:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8286,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11106:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861614232663662343542323845393632423361436431656534664338386145644466353537373536\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xaaB2f6b45B28E962B3aCd1ee4fC88aEdDf557756\"\n                                },\n                                \"id\": 8287,\n                                \"name\": \"Literal\",\n                                \"src\": \"11128:42:35\"\n                              }\n                            ],\n                            \"id\": 8288,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"11106:65:35\"\n                          }\n                        ],\n                        \"id\": 8289,\n                        \"name\": \"Assignment\",\n                        \"src\": \"11046:125:35\"\n                      }\n                    ],\n                    \"id\": 8290,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"11046:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7760,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"ethPriceFeeds\"\n                                },\n                                \"id\": 8291,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11190:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307845343164323438393537316433323231383932343644614641356562446531463436393946343938\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xE41d2489571d322189246DaFA5ebDe1F4699F498\"\n                                },\n                                \"id\": 8292,\n                                \"name\": \"Literal\",\n                                \"src\": \"11204:42:35\"\n                              }\n                            ],\n                            \"id\": 8293,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"11190:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8294,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11250:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832446134393833613632326138343938626231613231466145394438463643363634393339393632\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x2Da4983a622a8498bb1a21FaE9D8F6C664939962\"\n                                },\n                                \"id\": 8295,\n                                \"name\": \"Literal\",\n                                \"src\": \"11272:42:35\"\n                              }\n                            ],\n                            \"id\": 8296,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"11250:65:35\"\n                          }\n                        ],\n                        \"id\": 8297,\n                        \"name\": \"Assignment\",\n                        \"src\": \"11190:125:35\"\n                      }\n                    ],\n                    \"id\": 8298,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"11190:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8299,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11363:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307865333645324433633763333432383146413362433733373935306136383537313733363838304131\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xe36E2D3c7c34281FA3bC737950a68571736880A1\"\n                                },\n                                \"id\": 8300,\n                                \"name\": \"Literal\",\n                                \"src\": \"11377:42:35\"\n                              }\n                            ],\n                            \"id\": 8301,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"11363:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8302,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11423:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307841453438633931644631664534313939393446464461323764613039443561433639633330663535\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xAE48c91dF1fE419994FFDa27da09D5aC69c30f55\"\n                                },\n                                \"id\": 8303,\n                                \"name\": \"Literal\",\n                                \"src\": \"11445:42:35\"\n                              }\n                            ],\n                            \"id\": 8304,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"11423:65:35\"\n                          }\n                        ],\n                        \"id\": 8305,\n                        \"name\": \"Assignment\",\n                        \"src\": \"11363:125:35\"\n                      }\n                    ],\n                    \"id\": 8306,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"11363:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8307,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11513:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307841444530304332383234346435434531374437324534303333304231633331386344313242376333\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xADE00C28244d5CE17D72E40330B1c318cD12B7c3\"\n                                },\n                                \"id\": 8308,\n                                \"name\": \"Literal\",\n                                \"src\": \"11527:42:35\"\n                              }\n                            ],\n                            \"id\": 8309,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"11513:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8310,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11573:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832333165373634423434623243316237436131373166613830323141323465643532304364653130\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x231e764B44b2C1b7Ca171fa8021A24ed520Cde10\"\n                                },\n                                \"id\": 8311,\n                                \"name\": \"Literal\",\n                                \"src\": \"11595:42:35\"\n                              }\n                            ],\n                            \"id\": 8312,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"11573:65:35\"\n                          }\n                        ],\n                        \"id\": 8313,\n                        \"name\": \"Assignment\",\n                        \"src\": \"11513:125:35\"\n                      }\n                    ],\n                    \"id\": 8314,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"11513:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8315,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11656:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307846343865323030454146393930363336324242313434326663613331653038333537373362384234\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xF48e200EAF9906362BB1442fca31e0835773b8B4\"\n                                },\n                                \"id\": 8316,\n                                \"name\": \"Literal\",\n                                \"src\": \"11670:42:35\"\n                              }\n                            ],\n                            \"id\": 8317,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"11656:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8318,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11716:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837374639373130453764304131393636394131336330353546363263643830643331336446303232\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x77F9710E7d0A19669A13c055F62cd80d313dF022\"\n                                },\n                                \"id\": 8319,\n                                \"name\": \"Literal\",\n                                \"src\": \"11738:42:35\"\n                              }\n                            ],\n                            \"id\": 8320,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"11716:65:35\"\n                          }\n                        ],\n                        \"id\": 8321,\n                        \"name\": \"Assignment\",\n                        \"src\": \"11656:125:35\"\n                      }\n                    ],\n                    \"id\": 8322,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"11656:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8323,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11806:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307830463833323837464637363844316331653137613432463434643634344437463232653865653164\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d\"\n                                },\n                                \"id\": 8324,\n                                \"name\": \"Literal\",\n                                \"src\": \"11820:42:35\"\n                              }\n                            ],\n                            \"id\": 8325,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"11806:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8326,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11866:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834343964313137313137383338664641363132363342363164413633303141413261383842313341\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x449d117117838fFA61263B61dA6301AA2a88B13A\"\n                                },\n                                \"id\": 8327,\n                                \"name\": \"Literal\",\n                                \"src\": \"11888:42:35\"\n                              }\n                            ],\n                            \"id\": 8328,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"11866:65:35\"\n                          }\n                        ],\n                        \"id\": 8329,\n                        \"name\": \"Assignment\",\n                        \"src\": \"11806:125:35\"\n                      }\n                    ],\n                    \"id\": 8330,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"11806:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8331,\n                                \"name\": \"Identifier\",\n                                \"src\": \"11956:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307866453333616539354139663044413841383435614633333531364544633234304443443731316436\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6\"\n                                },\n                                \"id\": 8332,\n                                \"name\": \"Literal\",\n                                \"src\": \"11970:42:35\"\n                              }\n                            ],\n                            \"id\": 8333,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"11956:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8334,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12016:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307846623063414446456131333645394533343363666235354238363361364466383334386162393132\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xFb0cADFEa136E9E343cfb55B863a6Df8348ab912\"\n                                },\n                                \"id\": 8335,\n                                \"name\": \"Literal\",\n                                \"src\": \"12038:42:35\"\n                              }\n                            ],\n                            \"id\": 8336,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"12016:65:35\"\n                          }\n                        ],\n                        \"id\": 8337,\n                        \"name\": \"Assignment\",\n                        \"src\": \"11956:125:35\"\n                      }\n                    ],\n                    \"id\": 8338,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"11956:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8339,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12108:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831373135414330373433313032424635436435384566424236436632644332363835643936376236\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6\"\n                                },\n                                \"id\": 8340,\n                                \"name\": \"Literal\",\n                                \"src\": \"12122:42:35\"\n                              }\n                            ],\n                            \"id\": 8341,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"12108:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8342,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12168:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831433037414662384532423832376335413437333943366435394165334135303335663238373334\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1C07AFb8E2B827c5A4739C6d59Ae3A5035f28734\"\n                                },\n                                \"id\": 8343,\n                                \"name\": \"Literal\",\n                                \"src\": \"12190:42:35\"\n                              }\n                            ],\n                            \"id\": 8344,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"12168:65:35\"\n                          }\n                        ],\n                        \"id\": 8345,\n                        \"name\": \"Assignment\",\n                        \"src\": \"12108:125:35\"\n                      }\n                    ],\n                    \"id\": 8346,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"12108:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8347,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12258:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838384338436633413231326330333639363938443133464539384663623736363230333839383431\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x88C8Cf3A212c0369698D13FE98Fcb76620389841\"\n                                },\n                                \"id\": 8348,\n                                \"name\": \"Literal\",\n                                \"src\": \"12272:42:35\"\n                              }\n                            ],\n                            \"id\": 8349,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"12258:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8350,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12318:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831306134333238393839356541666638343045386434353939354242613839663931313545434565\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x10a43289895eAff840E8d45995BBa89f9115ECEe\"\n                                },\n                                \"id\": 8351,\n                                \"name\": \"Literal\",\n                                \"src\": \"12340:42:35\"\n                              }\n                            ],\n                            \"id\": 8352,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"12318:65:35\"\n                          }\n                        ],\n                        \"id\": 8353,\n                        \"name\": \"Assignment\",\n                        \"src\": \"12258:125:35\"\n                      }\n                    ],\n                    \"id\": 8354,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"12258:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8355,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12408:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832323630323436396437303442664662303933366337413763666344313866376141323639333735\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x22602469d704BfFb0936c7A7cfcD18f7aA269375\"\n                                },\n                                \"id\": 8356,\n                                \"name\": \"Literal\",\n                                \"src\": \"12422:42:35\"\n                              }\n                            ],\n                            \"id\": 8357,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"12408:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8358,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12468:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861454132383038343037423733313941333141333833423646384236306630344243613233634532\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xaEA2808407B7319A31A383B6F8B60f04BCa23cE2\"\n                                },\n                                \"id\": 8359,\n                                \"name\": \"Literal\",\n                                \"src\": \"12490:42:35\"\n                              }\n                            ],\n                            \"id\": 8360,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"12468:65:35\"\n                          }\n                        ],\n                        \"id\": 8361,\n                        \"name\": \"Assignment\",\n                        \"src\": \"12408:125:35\"\n                      }\n                    ],\n                    \"id\": 8362,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"12408:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8363,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12558:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307844373165434646393334324135436564363230303439653631366335303335463164423938363230\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xD71eCFF9342A5Ced620049e616c5035F1dB98620\"\n                                },\n                                \"id\": 8364,\n                                \"name\": \"Literal\",\n                                \"src\": \"12572:42:35\"\n                              }\n                            ],\n                            \"id\": 8365,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"12558:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8366,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12618:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307862343966363737393433424330333865393835376436314537643035334361413243313733344331\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xb49f677943BC038e9857d61E7d053CaA2C1734C1\"\n                                },\n                                \"id\": 8367,\n                                \"name\": \"Literal\",\n                                \"src\": \"12640:42:35\"\n                              }\n                            ],\n                            \"id\": 8368,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"12618:65:35\"\n                          }\n                        ],\n                        \"id\": 8369,\n                        \"name\": \"Assignment\",\n                        \"src\": \"12558:125:35\"\n                      }\n                    ],\n                    \"id\": 8370,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"12558:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8371,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12708:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307865463943643738383263303637363836363931423666463439653635306234334146424243433642\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xeF9Cd7882c067686691B6fF49e650b43AFBBCC6B\"\n                                },\n                                \"id\": 8372,\n                                \"name\": \"Literal\",\n                                \"src\": \"12722:42:35\"\n                              }\n                            ],\n                            \"id\": 8373,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"12708:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8374,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12768:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838303037306637313531426444626242313336313933376164343833393331376166393941453663\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x80070f7151BdDbbB1361937ad4839317af99AE6c\"\n                                },\n                                \"id\": 8375,\n                                \"name\": \"Literal\",\n                                \"src\": \"12790:42:35\"\n                              }\n                            ],\n                            \"id\": 8376,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"12768:65:35\"\n                          }\n                        ],\n                        \"id\": 8377,\n                        \"name\": \"Assignment\",\n                        \"src\": \"12708:125:35\"\n                      }\n                    ],\n                    \"id\": 8378,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"12708:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8379,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12851:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307839376665323245373334316130436438446236463643303231413234446338663444414438353546\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F\"\n                                },\n                                \"id\": 8380,\n                                \"name\": \"Literal\",\n                                \"src\": \"12865:42:35\"\n                              }\n                            ],\n                            \"id\": 8381,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"12851:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8382,\n                                \"name\": \"Identifier\",\n                                \"src\": \"12911:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835633041623264396235613765643966343730333836653832424233364133363133634464346235\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x5c0Ab2d9b5a7ed9f470386e82BB36A3613cDd4b5\"\n                                },\n                                \"id\": 8383,\n                                \"name\": \"Literal\",\n                                \"src\": \"12933:42:35\"\n                              }\n                            ],\n                            \"id\": 8384,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"12911:65:35\"\n                          }\n                        ],\n                        \"id\": 8385,\n                        \"name\": \"Assignment\",\n                        \"src\": \"12851:125:35\"\n                      }\n                    ],\n                    \"id\": 8386,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"12851:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8387,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13001:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307846413161383536436661333430394346613134354661346532304562323730644633454232316162\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xFA1a856Cfa3409CFa145Fa4e20Eb270dF3EB21ab\"\n                                },\n                                \"id\": 8388,\n                                \"name\": \"Literal\",\n                                \"src\": \"13015:42:35\"\n                              }\n                            ],\n                            \"id\": 8389,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"13001:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8390,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13061:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307864303933353833383933353334393430316337336130364643646539643633663731396538344535\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xd0935838935349401c73a06FCde9d63f719e84E5\"\n                                },\n                                \"id\": 8391,\n                                \"name\": \"Literal\",\n                                \"src\": \"13083:42:35\"\n                              }\n                            ],\n                            \"id\": 8392,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"13061:65:35\"\n                          }\n                        ],\n                        \"id\": 8393,\n                        \"name\": \"Assignment\",\n                        \"src\": \"13001:125:35\"\n                      }\n                    ],\n                    \"id\": 8394,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"13001:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8395,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13145:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307843313431303343323134314538343265323238464261433539343537396537393836313663653741\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xC14103C2141E842e228FBaC594579e798616ce7A\"\n                                },\n                                \"id\": 8396,\n                                \"name\": \"Literal\",\n                                \"src\": \"13159:42:35\"\n                              }\n                            ],\n                            \"id\": 8397,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"13145:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8398,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13205:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307836414630394446373536334333363342353736336239313032373132456265443362396538353942\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x6AF09DF7563C363B5763b9102712EbeD3b9e859B\"\n                                },\n                                \"id\": 8399,\n                                \"name\": \"Literal\",\n                                \"src\": \"13227:42:35\"\n                              }\n                            ],\n                            \"id\": 8400,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"13205:65:35\"\n                          }\n                        ],\n                        \"id\": 8401,\n                        \"name\": \"Assignment\",\n                        \"src\": \"13145:125:35\"\n                      }\n                    ],\n                    \"id\": 8402,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"13145:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8403,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13295:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837443141664137423731386662383933644233304133614263304366633630384161436665424230\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0\"\n                                },\n                                \"id\": 8404,\n                                \"name\": \"Literal\",\n                                \"src\": \"13309:42:35\"\n                              }\n                            ],\n                            \"id\": 8405,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"13295:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8406,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13355:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837624143383541386131334134426344386162623365423764366234643633326335613537363736\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x7bAC85A8a13A4BcD8abb3eB7d6b4d632c5a57676\"\n                                },\n                                \"id\": 8407,\n                                \"name\": \"Literal\",\n                                \"src\": \"13377:42:35\"\n                              }\n                            ],\n                            \"id\": 8408,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"13355:65:35\"\n                          }\n                        ],\n                        \"id\": 8409,\n                        \"name\": \"Assignment\",\n                        \"src\": \"13295:125:35\"\n                      }\n                    ],\n                    \"id\": 8410,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"13295:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8411,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13440:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834353735663431333038454331343833663364333939616139613238323664373444613133446562\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x4575f41308EC1483f3d399aa9a2826d74Da13Deb\"\n                                },\n                                \"id\": 8412,\n                                \"name\": \"Literal\",\n                                \"src\": \"13454:42:35\"\n                              }\n                            ],\n                            \"id\": 8413,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"13440:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8414,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13500:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307864373541416145344146306333393863613133653236363742653537414632636341384235646536\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xd75AAaE4AF0c398ca13e2667Be57AF2ccA8B5de6\"\n                                },\n                                \"id\": 8415,\n                                \"name\": \"Literal\",\n                                \"src\": \"13522:42:35\"\n                              }\n                            ],\n                            \"id\": 8416,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"13500:65:35\"\n                          }\n                        ],\n                        \"id\": 8417,\n                        \"name\": \"Assignment\",\n                        \"src\": \"13440:125:35\"\n                      }\n                    ],\n                    \"id\": 8418,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"13440:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8419,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13583:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307838434539313337643339333236414430634436343931666235434330436241306530383962364139\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9\"\n                                },\n                                \"id\": 8420,\n                                \"name\": \"Literal\",\n                                \"src\": \"13597:42:35\"\n                              }\n                            ],\n                            \"id\": 8421,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"13583:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8422,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13643:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307846623043664436633139653235444234613038443861323034613338376345613438436331333866\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xFb0CfD6c19e25DB4a08D8a204a387cEa48Cc138f\"\n                                },\n                                \"id\": 8423,\n                                \"name\": \"Literal\",\n                                \"src\": \"13665:42:35\"\n                              }\n                            ],\n                            \"id\": 8424,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"13643:65:35\"\n                          }\n                        ],\n                        \"id\": 8425,\n                        \"name\": \"Assignment\",\n                        \"src\": \"13583:125:35\"\n                      }\n                    ],\n                    \"id\": 8426,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"13583:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8427,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13726:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834433139353936663561416646343539664133384230663765443932463131414536353433373834\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x4C19596f5aAfF459fA38B0f7eD92F11AE6543784\"\n                                },\n                                \"id\": 8428,\n                                \"name\": \"Literal\",\n                                \"src\": \"13740:42:35\"\n                              }\n                            ],\n                            \"id\": 8429,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"13726:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8430,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13786:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832363932396238356645323834456541423933393833313030326531393238313833613130666231\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x26929b85fE284EeAB939831002e1928183a10fb1\"\n                                },\n                                \"id\": 8431,\n                                \"name\": \"Literal\",\n                                \"src\": \"13808:42:35\"\n                              }\n                            ],\n                            \"id\": 8432,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"13786:65:35\"\n                          }\n                        ],\n                        \"id\": 8433,\n                        \"name\": \"Assignment\",\n                        \"src\": \"13726:125:35\"\n                      }\n                    ],\n                    \"id\": 8434,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"13726:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8435,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13869:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307866324530383335363538384543356364394534333735353244613837433030373662343937304230\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xf2E08356588EC5cd9E437552Da87C0076b4970B0\"\n                                },\n                                \"id\": 8436,\n                                \"name\": \"Literal\",\n                                \"src\": \"13883:42:35\"\n                              }\n                            ],\n                            \"id\": 8437,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"13869:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8438,\n                                \"name\": \"Identifier\",\n                                \"src\": \"13929:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861634430443141323937353943433031453844393235333731423732636232623536313045413235\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xacD0D1A29759CC01E8D925371B72cb2b5610EA25\"\n                                },\n                                \"id\": 8439,\n                                \"name\": \"Literal\",\n                                \"src\": \"13951:42:35\"\n                              }\n                            ],\n                            \"id\": 8440,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"13929:65:35\"\n                          }\n                        ],\n                        \"id\": 8441,\n                        \"name\": \"Assignment\",\n                        \"src\": \"13869:125:35\"\n                      }\n                    ],\n                    \"id\": 8442,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"13869:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8443,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14019:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307839313864413931436362633332423761364130636334654364353938376262616236453331653644\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D\"\n                                },\n                                \"id\": 8444,\n                                \"name\": \"Literal\",\n                                \"src\": \"14033:42:35\"\n                              }\n                            ],\n                            \"id\": 8445,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"14019:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8446,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14079:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831636544616142353039333638383142336534343965343765343041326344414635353736413461\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1ceDaaB50936881B3e449e47e40A2cDAF5576A4a\"\n                                },\n                                \"id\": 8447,\n                                \"name\": \"Literal\",\n                                \"src\": \"14101:42:35\"\n                              }\n                            ],\n                            \"id\": 8448,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"14079:65:35\"\n                          }\n                        ],\n                        \"id\": 8449,\n                        \"name\": \"Assignment\",\n                        \"src\": \"14019:125:35\"\n                      }\n                    ],\n                    \"id\": 8450,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"14019:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8451,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14171:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307831633438663836616535373239314637363836333439463132363031393130424438443437306262\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x1c48f86ae57291F7686349F12601910BD8D470bb\"\n                                },\n                                \"id\": 8452,\n                                \"name\": \"Literal\",\n                                \"src\": \"14185:42:35\"\n                              }\n                            ],\n                            \"id\": 8453,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"14171:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8454,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14231:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307866414338314561394464323944384539623231326163643665644245623664453338436234334166\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xfAC81Ea9Dd29D8E9b212acd6edBEb6dE38Cb43Af\"\n                                },\n                                \"id\": 8455,\n                                \"name\": \"Literal\",\n                                \"src\": \"14253:42:35\"\n                              }\n                            ],\n                            \"id\": 8456,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"14231:65:35\"\n                          }\n                        ],\n                        \"id\": 8457,\n                        \"name\": \"Assignment\",\n                        \"src\": \"14171:125:35\"\n                      }\n                    ],\n                    \"id\": 8458,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"14171:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8459,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14315:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307836413232653565393433383834363431383135373841613741364238363965303066453237383436\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x6A22e5e94388464181578Aa7A6B869e00fE27846\"\n                                },\n                                \"id\": 8460,\n                                \"name\": \"Literal\",\n                                \"src\": \"14329:42:35\"\n                              }\n                            ],\n                            \"id\": 8461,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"14315:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8462,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14375:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307833373935383932323762313546316131323139354433663264393062426339463331663935323335\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x379589227b15F1a12195D3f2d90bBc9F31f95235\"\n                                },\n                                \"id\": 8463,\n                                \"name\": \"Literal\",\n                                \"src\": \"14397:42:35\"\n                              }\n                            ],\n                            \"id\": 8464,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"14375:65:35\"\n                          }\n                        ],\n                        \"id\": 8465,\n                        \"name\": \"Assignment\",\n                        \"src\": \"14315:125:35\"\n                      }\n                    ],\n                    \"id\": 8466,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"14315:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8467,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14465:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832363145664364443234436541393836353242393730303830306131334466426361343130336646\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x261EfCdD24CeA98652B9700800a13DfBca4103fF\"\n                                },\n                                \"id\": 8468,\n                                \"name\": \"Literal\",\n                                \"src\": \"14479:42:35\"\n                              }\n                            ],\n                            \"id\": 8469,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"14465:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8470,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14525:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832313465443944613131443266626534363561366663363031613931453632456245633161304436\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6\"\n                                },\n                                \"id\": 8471,\n                                \"name\": \"Literal\",\n                                \"src\": \"14547:42:35\"\n                              }\n                            ],\n                            \"id\": 8472,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"14525:65:35\"\n                          }\n                        ],\n                        \"id\": 8473,\n                        \"name\": \"Assignment\",\n                        \"src\": \"14465:125:35\"\n                      }\n                    ],\n                    \"id\": 8474,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"14465:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8475,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14615:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835323939643646373437324443633133374437663343344263664242423531344261424633343141\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A\"\n                                },\n                                \"id\": 8476,\n                                \"name\": \"Literal\",\n                                \"src\": \"14629:42:35\"\n                              }\n                            ],\n                            \"id\": 8477,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"14615:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8478,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14675:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307846413636343538436365374464313544383635303031356334666365344432373832373136313846\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xFA66458Cce7Dd15D8650015c4fce4D278271618F\"\n                                },\n                                \"id\": 8479,\n                                \"name\": \"Literal\",\n                                \"src\": \"14697:42:35\"\n                              }\n                            ],\n                            \"id\": 8480,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"14675:65:35\"\n                          }\n                        ],\n                        \"id\": 8481,\n                        \"name\": \"Assignment\",\n                        \"src\": \"14615:125:35\"\n                      }\n                    ],\n                    \"id\": 8482,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"14615:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8483,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14765:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861324230664465364437313065323031643064363038653932344134383464314135664564353763\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c\"\n                                },\n                                \"id\": 8484,\n                                \"name\": \"Literal\",\n                                \"src\": \"14779:42:35\"\n                              }\n                            ],\n                            \"id\": 8485,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"14765:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8486,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14825:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307843656432363630633644643146666438353641354138324336376633343832643838433530623132\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xCed2660c6Dd1Ffd856A5A82C67f3482d88C50b12\"\n                                },\n                                \"id\": 8487,\n                                \"name\": \"Literal\",\n                                \"src\": \"14847:42:35\"\n                              }\n                            ],\n                            \"id\": 8488,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"14825:65:35\"\n                          }\n                        ],\n                        \"id\": 8489,\n                        \"name\": \"Assignment\",\n                        \"src\": \"14765:125:35\"\n                      }\n                    ],\n                    \"id\": 8490,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"14765:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8491,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14915:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832653539303035633563306630613444373743634138323635336434386234363332324545354364\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd\"\n                                },\n                                \"id\": 8492,\n                                \"name\": \"Literal\",\n                                \"src\": \"14929:42:35\"\n                              }\n                            ],\n                            \"id\": 8493,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"14915:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8494,\n                                \"name\": \"Identifier\",\n                                \"src\": \"14975:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307835323339613632356445623434624633456541633243443533363662613234623865394442363346\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x5239a625dEb44bF3EeAc2CD5366ba24b8e9DB63F\"\n                                },\n                                \"id\": 8495,\n                                \"name\": \"Literal\",\n                                \"src\": \"14997:42:35\"\n                              }\n                            ],\n                            \"id\": 8496,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"14975:65:35\"\n                          }\n                        ],\n                        \"id\": 8497,\n                        \"name\": \"Assignment\",\n                        \"src\": \"14915:125:35\"\n                      }\n                    ],\n                    \"id\": 8498,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"14915:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8499,\n                                \"name\": \"Identifier\",\n                                \"src\": \"15065:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307865414241434438343441313936443746616633434535393665646542463939303033343142343230\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xeABACD844A196D7Faf3CE596edeBF9900341B420\"\n                                },\n                                \"id\": 8500,\n                                \"name\": \"Literal\",\n                                \"src\": \"15079:42:35\"\n                              }\n                            ],\n                            \"id\": 8501,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"15065:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8502,\n                                \"name\": \"Identifier\",\n                                \"src\": \"15125:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307832383344343333343335634643416266303032363362654546364133363262376363356564396632\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x283D433435cFCAbf00263beEF6A362b7cc5ed9f2\"\n                                },\n                                \"id\": 8503,\n                                \"name\": \"Literal\",\n                                \"src\": \"15147:42:35\"\n                              }\n                            ],\n                            \"id\": 8504,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"15125:65:35\"\n                          }\n                        ],\n                        \"id\": 8505,\n                        \"name\": \"Assignment\",\n                        \"src\": \"15065:125:35\"\n                      }\n                    ],\n                    \"id\": 8506,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"15065:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7765,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"usdPriceFeeds\"\n                                },\n                                \"id\": 8507,\n                                \"name\": \"Identifier\",\n                                \"src\": \"15209:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307865316146653146643736466438386637386342663539396561313834363233314238624133423642\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B\"\n                                },\n                                \"id\": 8508,\n                                \"name\": \"Literal\",\n                                \"src\": \"15223:42:35\"\n                              }\n                            ],\n                            \"id\": 8509,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"15209:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8510,\n                                \"name\": \"Identifier\",\n                                \"src\": \"15269:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307861384538373546393431333842304335623531643165316435644533356262446464323845413837\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xa8E875F94138B0C5b51d1e1d5dE35bbDdd28EA87\"\n                                },\n                                \"id\": 8511,\n                                \"name\": \"Literal\",\n                                \"src\": \"15291:42:35\"\n                              }\n                            ],\n                            \"id\": 8512,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"15269:65:35\"\n                          }\n                        ],\n                        \"id\": 8513,\n                        \"name\": \"Assignment\",\n                        \"src\": \"15209:125:35\"\n                      }\n                    ],\n                    \"id\": 8514,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"15209:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7770,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"btcPriceFeeds\"\n                                },\n                                \"id\": 8515,\n                                \"name\": \"Identifier\",\n                                \"src\": \"15384:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837393844316245383431613832613237333732304345333163383232433631613637613630314333\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x798D1bE841a82a273720CE31c822C61a67a601C3\"\n                                },\n                                \"id\": 8516,\n                                \"name\": \"Literal\",\n                                \"src\": \"15398:42:35\"\n                              }\n                            ],\n                            \"id\": 8517,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"15384:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8518,\n                                \"name\": \"Identifier\",\n                                \"src\": \"15444:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307834313861364339384344354238323735393535663038463062384331633638333863386231363835\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x418a6C98CD5B8275955f08F0b8C1c6838c8b1685\"\n                                },\n                                \"id\": 8519,\n                                \"name\": \"Literal\",\n                                \"src\": \"15466:42:35\"\n                              }\n                            ],\n                            \"id\": 8520,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"15444:65:35\"\n                          }\n                        ],\n                        \"id\": 8521,\n                        \"name\": \"Assignment\",\n                        \"src\": \"15384:125:35\"\n                      }\n                    ],\n                    \"id\": 8522,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"15384:125:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract AggregatorV3Interface\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"contract AggregatorV3Interface\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 7770,\n                                  \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                  \"value\": \"btcPriceFeeds\"\n                                },\n                                \"id\": 8523,\n                                \"name\": \"Identifier\",\n                                \"src\": \"15528:13:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307846393730623845333665323346376643334644373532456541383666384265384438333337354136\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xF970b8E36e23F7fC3FD752EeA86f8Be8D83375A6\"\n                                },\n                                \"id\": 8524,\n                                \"name\": \"Literal\",\n                                \"src\": \"15542:42:35\"\n                              }\n                            ],\n                            \"id\": 8525,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"15528:57:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract AggregatorV3Interface\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address_payable\",\n                                      \"typeString\": \"address payable\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 5700,\n                                  \"type\": \"type(contract AggregatorV3Interface)\",\n                                  \"value\": \"AggregatorV3Interface\"\n                                },\n                                \"id\": 8526,\n                                \"name\": \"Identifier\",\n                                \"src\": \"15588:21:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307845613062334443613633356634613445373744393635344335633138383336454537373135363665\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xEa0b3DCa635f4a4E77D9654C5c18836EE771566e\"\n                                },\n                                \"id\": 8527,\n                                \"name\": \"Literal\",\n                                \"src\": \"15610:42:35\"\n                              }\n                            ],\n                            \"id\": 8528,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"15588:65:35\"\n                          }\n                        ],\n                        \"id\": 8529,\n                        \"name\": \"Assignment\",\n                        \"src\": \"15528:125:35\"\n                      }\n                    ],\n                    \"id\": 8530,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"15528:125:35\"\n                  }\n                ],\n                \"id\": 8531,\n                \"name\": \"Block\",\n                \"src\": \"2086:13582:35\"\n              }\n            ],\n            \"id\": 8532,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"2028:13640:35\"\n          },\n          {\n            \"attributes\": {\n              \"functionSelector\": \"0b7983a2\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"hasPriceFeed\",\n              \"overrides\": null,\n              \"scope\": 8905,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns a boolean indicating if a price feed exists for the underlying asset.\"\n                },\n                \"id\": 8533,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"15676:103:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"overrides\": null,\n                      \"scope\": 8577,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 8534,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"15807:7:35\"\n                      }\n                    ],\n                    \"id\": 8535,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"15807:18:35\"\n                  }\n                ],\n                \"id\": 8536,\n                \"name\": \"ParameterList\",\n                \"src\": \"15806:20:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 8577,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"bool\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"bool\",\n                          \"type\": \"bool\"\n                        },\n                        \"id\": 8537,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"15850:4:35\"\n                      }\n                    ],\n                    \"id\": 8538,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"15850:4:35\"\n                  }\n                ],\n                \"id\": 8539,\n                \"name\": \"ParameterList\",\n                \"src\": \"15849:6:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 8539\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"||\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"||\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"!=\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                              \"typeString\": \"contract AggregatorV3Interface\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8540,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"15874:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8541,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"15874:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": true,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"contract AggregatorV3Interface\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7760,\n                                              \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                              \"value\": \"ethPriceFeeds\"\n                                            },\n                                            \"id\": 8542,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"15882:13:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 8535,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 8543,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"15896:10:35\"\n                                          }\n                                        ],\n                                        \"id\": 8544,\n                                        \"name\": \"IndexAccess\",\n                                        \"src\": \"15882:25:35\"\n                                      }\n                                    ],\n                                    \"id\": 8545,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"15874:34:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address payable\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                                              \"typeString\": \"int_const 0\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8546,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"15912:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8547,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"15912:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"30\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 0\",\n                                          \"value\": \"0\"\n                                        },\n                                        \"id\": 8548,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"15920:1:35\"\n                                      }\n                                    ],\n                                    \"id\": 8549,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"15912:10:35\"\n                                  }\n                                ],\n                                \"id\": 8550,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"15874:48:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"!=\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                              \"typeString\": \"contract AggregatorV3Interface\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8551,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"15926:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8552,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"15926:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": true,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"contract AggregatorV3Interface\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7765,\n                                              \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                              \"value\": \"usdPriceFeeds\"\n                                            },\n                                            \"id\": 8553,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"15934:13:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 8535,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 8554,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"15948:10:35\"\n                                          }\n                                        ],\n                                        \"id\": 8555,\n                                        \"name\": \"IndexAccess\",\n                                        \"src\": \"15934:25:35\"\n                                      }\n                                    ],\n                                    \"id\": 8556,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"15926:34:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address payable\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                                              \"typeString\": \"int_const 0\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8557,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"15964:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8558,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"15964:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"30\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 0\",\n                                          \"value\": \"0\"\n                                        },\n                                        \"id\": 8559,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"15972:1:35\"\n                                      }\n                                    ],\n                                    \"id\": 8560,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"15964:10:35\"\n                                  }\n                                ],\n                                \"id\": 8561,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"15926:48:35\"\n                              }\n                            ],\n                            \"id\": 8562,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"15874:100:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"!=\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                          \"typeString\": \"contract AggregatorV3Interface\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 8563,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"15978:7:35\"\n                                      }\n                                    ],\n                                    \"id\": 8564,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"15978:7:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": true,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"contract AggregatorV3Interface\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7770,\n                                          \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                          \"value\": \"btcPriceFeeds\"\n                                        },\n                                        \"id\": 8565,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"15986:13:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8535,\n                                          \"type\": \"address\",\n                                          \"value\": \"underlying\"\n                                        },\n                                        \"id\": 8566,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"16000:10:35\"\n                                      }\n                                    ],\n                                    \"id\": 8567,\n                                    \"name\": \"IndexAccess\",\n                                    \"src\": \"15986:25:35\"\n                                  }\n                                ],\n                                \"id\": 8568,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"15978:34:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address payable\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_0_by_1\",\n                                          \"typeString\": \"int_const 0\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 8569,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"16016:7:35\"\n                                      }\n                                    ],\n                                    \"id\": 8570,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"16016:7:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 8571,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"16024:1:35\"\n                                  }\n                                ],\n                                \"id\": 8572,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"16016:10:35\"\n                              }\n                            ],\n                            \"id\": 8573,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"15978:48:35\"\n                          }\n                        ],\n                        \"id\": 8574,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"15874:152:35\"\n                      }\n                    ],\n                    \"id\": 8575,\n                    \"name\": \"Return\",\n                    \"src\": \"15867:159:35\"\n                  }\n                ],\n                \"id\": 8576,\n                \"name\": \"Block\",\n                \"src\": \"15856:178:35\"\n              }\n            ],\n            \"id\": 8577,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"15785:249:35\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"_price\",\n              \"overrides\": null,\n              \"scope\": 8905,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Internal function returning the price in ETH of `underlying`.\"\n                },\n                \"id\": 8578,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"16042:87:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"overrides\": null,\n                      \"scope\": 8817,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 8579,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"16151:7:35\"\n                      }\n                    ],\n                    \"id\": 8580,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"16151:18:35\"\n                  }\n                ],\n                \"id\": 8581,\n                \"name\": \"ParameterList\",\n                \"src\": \"16150:20:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 8817,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 8582,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"16194:4:35\"\n                      }\n                    ],\n                    \"id\": 8583,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"16194:4:35\"\n                  }\n                ],\n                \"id\": 8584,\n                \"name\": \"ParameterList\",\n                \"src\": \"16193:6:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"==\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 8580,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 8585,\n                            \"name\": \"Identifier\",\n                            \"src\": \"16248:10:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"address payable\",\n                              \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                            },\n                            \"id\": 8586,\n                            \"name\": \"Literal\",\n                            \"src\": \"16262:42:35\"\n                          }\n                        ],\n                        \"id\": 8587,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"16248:56:35\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"functionReturnParameters\": 8584\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 8588,\n                            \"name\": \"Literal\",\n                            \"src\": \"16313:4:35\"\n                          }\n                        ],\n                        \"id\": 8589,\n                        \"name\": \"Return\",\n                        \"src\": \"16306:11:35\"\n                      }\n                    ],\n                    \"id\": 8590,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"16244:73:35\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"!=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                      \"typeString\": \"contract AggregatorV3Interface\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"type(address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"address\",\n                                      \"type\": null\n                                    },\n                                    \"id\": 8591,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"16381:7:35\"\n                                  }\n                                ],\n                                \"id\": 8592,\n                                \"name\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"16381:7:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": true,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"contract AggregatorV3Interface\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7760,\n                                      \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                      \"value\": \"ethPriceFeeds\"\n                                    },\n                                    \"id\": 8593,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"16389:13:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 8580,\n                                      \"type\": \"address\",\n                                      \"value\": \"underlying\"\n                                    },\n                                    \"id\": 8594,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"16403:10:35\"\n                                  }\n                                ],\n                                \"id\": 8595,\n                                \"name\": \"IndexAccess\",\n                                \"src\": \"16389:25:35\"\n                              }\n                            ],\n                            \"id\": 8596,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"16381:34:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address payable\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_rational_0_by_1\",\n                                      \"typeString\": \"int_const 0\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"type(address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"address\",\n                                      \"type\": null\n                                    },\n                                    \"id\": 8597,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"16419:7:35\"\n                                  }\n                                ],\n                                \"id\": 8598,\n                                \"name\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"16419:7:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"30\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 0\",\n                                  \"value\": \"0\"\n                                },\n                                \"id\": 8599,\n                                \"name\": \"Literal\",\n                                \"src\": \"16427:1:35\"\n                              }\n                            ],\n                            \"id\": 8600,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"16419:10:35\"\n                          }\n                        ],\n                        \"id\": 8601,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"16381:48:35\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"assignments\": [null, 8603, null, 8605, null]\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"constant\": false,\n                                  \"mutability\": \"mutable\",\n                                  \"name\": \"tokenEthPrice\",\n                                  \"overrides\": null,\n                                  \"scope\": 8636,\n                                  \"stateVariable\": false,\n                                  \"storageLocation\": \"default\",\n                                  \"type\": \"int256\",\n                                  \"value\": null,\n                                  \"visibility\": \"internal\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"int256\",\n                                      \"type\": \"int256\"\n                                    },\n                                    \"id\": 8602,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"16449:6:35\"\n                                  }\n                                ],\n                                \"id\": 8603,\n                                \"name\": \"VariableDeclaration\",\n                                \"src\": \"16449:20:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"constant\": false,\n                                  \"mutability\": \"mutable\",\n                                  \"name\": \"updatedAt\",\n                                  \"overrides\": null,\n                                  \"scope\": 8636,\n                                  \"stateVariable\": false,\n                                  \"storageLocation\": \"default\",\n                                  \"type\": \"uint256\",\n                                  \"value\": null,\n                                  \"visibility\": \"internal\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint256\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"id\": 8604,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"16473:7:35\"\n                                  }\n                                ],\n                                \"id\": 8605,\n                                \"name\": \"VariableDeclaration\",\n                                \"src\": \"16473:17:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"tuple(uint80,int256,uint256,uint256,uint80)\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"latestRoundData\",\n                                      \"referencedDeclaration\": 5699,\n                                      \"type\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": true,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"contract AggregatorV3Interface\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7760,\n                                              \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                              \"value\": \"ethPriceFeeds\"\n                                            },\n                                            \"id\": 8606,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"16496:13:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 8580,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 8607,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"16510:10:35\"\n                                          }\n                                        ],\n                                        \"id\": 8608,\n                                        \"name\": \"IndexAccess\",\n                                        \"src\": \"16496:25:35\"\n                                      }\n                                    ],\n                                    \"id\": 8609,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"16496:41:35\"\n                                  }\n                                ],\n                                \"id\": 8610,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"16496:43:35\"\n                              }\n                            ],\n                            \"id\": 8611,\n                            \"name\": \"VariableDeclarationStatement\",\n                            \"src\": \"16446:93:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"falseBody\": null\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \">\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 7785,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"maxSecondsBeforePriceIsStale\"\n                                    },\n                                    \"id\": 8612,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"16558:28:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 8613,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"16589:1:35\"\n                                  }\n                                ],\n                                \"id\": 8614,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"16558:32:35\"\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"tuple()\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_bool\",\n                                              \"typeString\": \"bool\"\n                                            },\n                                            {\n                                              \"typeIdentifier\": \"t_stringliteral_27a2b4b94355b7148366882a3ae0a8f6bce4bc6db2c0f51fea7622324248f810\",\n                                              \"typeString\": \"literal_string \\\"Token/ETH Chainlink price is stale.\\\"\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [-18, -18],\n                                          \"referencedDeclaration\": -18,\n                                          \"type\": \"function (bool,string memory) pure\",\n                                          \"value\": \"require\"\n                                        },\n                                        \"id\": 8615,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"16592:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"<=\",\n                                          \"type\": \"bool\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"timestamp\",\n                                              \"referencedDeclaration\": null,\n                                              \"type\": \"uint256\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": -4,\n                                                  \"type\": \"block\",\n                                                  \"value\": \"block\"\n                                                },\n                                                \"id\": 8616,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"16600:5:35\"\n                                              }\n                                            ],\n                                            \"id\": 8617,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"16600:15:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"+\",\n                                              \"type\": \"uint256\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 8605,\n                                                  \"type\": \"uint256\",\n                                                  \"value\": \"updatedAt\"\n                                                },\n                                                \"id\": 8618,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"16619:9:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 7785,\n                                                  \"type\": \"uint256\",\n                                                  \"value\": \"maxSecondsBeforePriceIsStale\"\n                                                },\n                                                \"id\": 8619,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"16631:28:35\"\n                                              }\n                                            ],\n                                            \"id\": 8620,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"16619:40:35\"\n                                          }\n                                        ],\n                                        \"id\": 8621,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"16600:59:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"546f6b656e2f45544820436861696e6c696e6b207072696365206973207374616c652e\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"string\",\n                                          \"type\": \"literal_string \\\"Token/ETH Chainlink price is stale.\\\"\",\n                                          \"value\": \"Token/ETH Chainlink price is stale.\"\n                                        },\n                                        \"id\": 8622,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"16661:37:35\"\n                                      }\n                                    ],\n                                    \"id\": 8623,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"16592:107:35\"\n                                  }\n                                ],\n                                \"id\": 8624,\n                                \"name\": \"ExpressionStatement\",\n                                \"src\": \"16592:107:35\"\n                              }\n                            ],\n                            \"id\": 8625,\n                            \"name\": \"IfStatement\",\n                            \"src\": \"16554:145:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"functionReturnParameters\": 8584\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_int256\",\n                                        \"typeString\": \"int256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \">=\",\n                                      \"type\": \"bool\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8603,\n                                          \"type\": \"int256\",\n                                          \"value\": \"tokenEthPrice\"\n                                        },\n                                        \"id\": 8626,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"16721:13:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"30\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 0\",\n                                          \"value\": \"0\"\n                                        },\n                                        \"id\": 8627,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"16738:1:35\"\n                                      }\n                                    ],\n                                    \"id\": 8628,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"16721:18:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_int256\",\n                                              \"typeString\": \"int256\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"uint256\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8629,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"16742:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8630,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"16742:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8603,\n                                          \"type\": \"int256\",\n                                          \"value\": \"tokenEthPrice\"\n                                        },\n                                        \"id\": 8631,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"16750:13:35\"\n                                      }\n                                    ],\n                                    \"id\": 8632,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"16742:22:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 8633,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"16767:1:35\"\n                                  }\n                                ],\n                                \"id\": 8634,\n                                \"name\": \"Conditional\",\n                                \"src\": \"16721:47:35\"\n                              }\n                            ],\n                            \"id\": 8635,\n                            \"name\": \"Return\",\n                            \"src\": \"16714:54:35\"\n                          }\n                        ],\n                        \"id\": 8636,\n                        \"name\": \"Block\",\n                        \"src\": \"16431:349:35\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"!=\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                          \"typeString\": \"contract AggregatorV3Interface\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 8637,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"16790:7:35\"\n                                      }\n                                    ],\n                                    \"id\": 8638,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"16790:7:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": true,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"contract AggregatorV3Interface\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7765,\n                                          \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                          \"value\": \"usdPriceFeeds\"\n                                        },\n                                        \"id\": 8639,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"16798:13:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8580,\n                                          \"type\": \"address\",\n                                          \"value\": \"underlying\"\n                                        },\n                                        \"id\": 8640,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"16812:10:35\"\n                                      }\n                                    ],\n                                    \"id\": 8641,\n                                    \"name\": \"IndexAccess\",\n                                    \"src\": \"16798:25:35\"\n                                  }\n                                ],\n                                \"id\": 8642,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"16790:34:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address payable\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_0_by_1\",\n                                          \"typeString\": \"int_const 0\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 8643,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"16828:7:35\"\n                                      }\n                                    ],\n                                    \"id\": 8644,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"16828:7:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 8645,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"16836:1:35\"\n                                  }\n                                ],\n                                \"id\": 8646,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"16828:10:35\"\n                              }\n                            ],\n                            \"id\": 8647,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"16790:48:35\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"assignments\": [null, 8649, null, 8651, null]\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"constant\": false,\n                                      \"mutability\": \"mutable\",\n                                      \"name\": \"ethUsdPrice\",\n                                      \"overrides\": null,\n                                      \"scope\": 8722,\n                                      \"stateVariable\": false,\n                                      \"storageLocation\": \"default\",\n                                      \"type\": \"int256\",\n                                      \"value\": null,\n                                      \"visibility\": \"internal\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"int256\",\n                                          \"type\": \"int256\"\n                                        },\n                                        \"id\": 8648,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"16858:6:35\"\n                                      }\n                                    ],\n                                    \"id\": 8649,\n                                    \"name\": \"VariableDeclaration\",\n                                    \"src\": \"16858:18:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"constant\": false,\n                                      \"mutability\": \"mutable\",\n                                      \"name\": \"updatedAt\",\n                                      \"overrides\": null,\n                                      \"scope\": 8722,\n                                      \"stateVariable\": false,\n                                      \"storageLocation\": \"default\",\n                                      \"type\": \"uint256\",\n                                      \"value\": null,\n                                      \"visibility\": \"internal\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"uint256\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"id\": 8650,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"16880:7:35\"\n                                      }\n                                    ],\n                                    \"id\": 8651,\n                                    \"name\": \"VariableDeclaration\",\n                                    \"src\": \"16880:17:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"tuple(uint80,int256,uint256,uint256,uint80)\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"latestRoundData\",\n                                          \"referencedDeclaration\": 5699,\n                                          \"type\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7776,\n                                              \"type\": \"contract AggregatorV3Interface\",\n                                              \"value\": \"ETH_USD_PRICE_FEED\"\n                                            },\n                                            \"id\": 8652,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"16903:18:35\"\n                                          }\n                                        ],\n                                        \"id\": 8653,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"16903:34:35\"\n                                      }\n                                    ],\n                                    \"id\": 8654,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"16903:36:35\"\n                                  }\n                                ],\n                                \"id\": 8655,\n                                \"name\": \"VariableDeclarationStatement\",\n                                \"src\": \"16855:84:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"falseBody\": null\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \">\",\n                                      \"type\": \"bool\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7785,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"maxSecondsBeforePriceIsStale\"\n                                        },\n                                        \"id\": 8656,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"16958:28:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"30\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 0\",\n                                          \"value\": \"0\"\n                                        },\n                                        \"id\": 8657,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"16989:1:35\"\n                                      }\n                                    ],\n                                    \"id\": 8658,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"16958:32:35\"\n                                  },\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"tuple()\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_bool\",\n                                                  \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                  \"typeIdentifier\": \"t_stringliteral_624141b8d95880e474132a6269001d744aed5397e135db8c925bc7ddb5d8e36c\",\n                                                  \"typeString\": \"literal_string \\\"ETH/USD Chainlink price is stale.\\\"\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [\n                                                -18,\n                                                -18\n                                              ],\n                                              \"referencedDeclaration\": -18,\n                                              \"type\": \"function (bool,string memory) pure\",\n                                              \"value\": \"require\"\n                                            },\n                                            \"id\": 8659,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"16992:7:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"<=\",\n                                              \"type\": \"bool\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"timestamp\",\n                                                  \"referencedDeclaration\": null,\n                                                  \"type\": \"uint256\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": -4,\n                                                      \"type\": \"block\",\n                                                      \"value\": \"block\"\n                                                    },\n                                                    \"id\": 8660,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"17000:5:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8661,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"17000:15:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                  },\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"operator\": \"+\",\n                                                  \"type\": \"uint256\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 8651,\n                                                      \"type\": \"uint256\",\n                                                      \"value\": \"updatedAt\"\n                                                    },\n                                                    \"id\": 8662,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"17019:9:35\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 7785,\n                                                      \"type\": \"uint256\",\n                                                      \"value\": \"maxSecondsBeforePriceIsStale\"\n                                                    },\n                                                    \"id\": 8663,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"17031:28:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8664,\n                                                \"name\": \"BinaryOperation\",\n                                                \"src\": \"17019:40:35\"\n                                              }\n                                            ],\n                                            \"id\": 8665,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"17000:59:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"4554482f55534420436861696e6c696e6b207072696365206973207374616c652e\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"string\",\n                                              \"type\": \"literal_string \\\"ETH/USD Chainlink price is stale.\\\"\",\n                                              \"value\": \"ETH/USD Chainlink price is stale.\"\n                                            },\n                                            \"id\": 8666,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"17061:35:35\"\n                                          }\n                                        ],\n                                        \"id\": 8667,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"16992:105:35\"\n                                      }\n                                    ],\n                                    \"id\": 8668,\n                                    \"name\": \"ExpressionStatement\",\n                                    \"src\": \"16992:105:35\"\n                                  }\n                                ],\n                                \"id\": 8669,\n                                \"name\": \"IfStatement\",\n                                \"src\": \"16954:143:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"falseBody\": null\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_int256\",\n                                        \"typeString\": \"int256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"<=\",\n                                      \"type\": \"bool\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8649,\n                                          \"type\": \"int256\",\n                                          \"value\": \"ethUsdPrice\"\n                                        },\n                                        \"id\": 8670,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"17116:11:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"30\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 0\",\n                                          \"value\": \"0\"\n                                        },\n                                        \"id\": 8671,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"17131:1:35\"\n                                      }\n                                    ],\n                                    \"id\": 8672,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"17116:16:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"functionReturnParameters\": 8584\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"30\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 0\",\n                                          \"value\": \"0\"\n                                        },\n                                        \"id\": 8673,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"17141:1:35\"\n                                      }\n                                    ],\n                                    \"id\": 8674,\n                                    \"name\": \"Return\",\n                                    \"src\": \"17134:8:35\"\n                                  }\n                                ],\n                                \"id\": 8675,\n                                \"name\": \"IfStatement\",\n                                \"src\": \"17112:30:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"assignments\": [8677],\n                                  \"initialValue\": null\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"constant\": false,\n                                      \"mutability\": \"mutable\",\n                                      \"name\": \"tokenUsdPrice\",\n                                      \"overrides\": null,\n                                      \"scope\": 8722,\n                                      \"stateVariable\": false,\n                                      \"storageLocation\": \"default\",\n                                      \"type\": \"int256\",\n                                      \"value\": null,\n                                      \"visibility\": \"internal\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"int256\",\n                                          \"type\": \"int256\"\n                                        },\n                                        \"id\": 8676,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"17157:6:35\"\n                                      }\n                                    ],\n                                    \"id\": 8677,\n                                    \"name\": \"VariableDeclaration\",\n                                    \"src\": \"17157:20:35\"\n                                  }\n                                ],\n                                \"id\": 8678,\n                                \"name\": \"VariableDeclarationStatement\",\n                                \"src\": \"17157:20:35\"\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"=\",\n                                      \"type\": \"tuple()\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"components\": [\n                                            null,\n                                            {\n                                              \"attributes\": {\n                                                \"argumentTypes\": null,\n                                                \"overloadedDeclarations\": [\n                                                  null\n                                                ],\n                                                \"referencedDeclaration\": 8677,\n                                                \"type\": \"int256\",\n                                                \"value\": \"tokenUsdPrice\"\n                                              },\n                                              \"id\": 8679,\n                                              \"name\": \"Identifier\",\n                                              \"src\": \"17195:13:35\"\n                                            },\n                                            null,\n                                            {\n                                              \"attributes\": {\n                                                \"argumentTypes\": null,\n                                                \"overloadedDeclarations\": [\n                                                  null\n                                                ],\n                                                \"referencedDeclaration\": 8651,\n                                                \"type\": \"uint256\",\n                                                \"value\": \"updatedAt\"\n                                              },\n                                              \"id\": 8680,\n                                              \"name\": \"Identifier\",\n                                              \"src\": \"17212:9:35\"\n                                            },\n                                            null\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isInlineArray\": false,\n                                          \"isLValue\": true,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": true,\n                                          \"type\": \"tuple(,int256,,uint256,)\"\n                                        },\n                                        \"id\": 8681,\n                                        \"name\": \"TupleExpression\",\n                                        \"src\": \"17192:32:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"arguments\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"tuple(uint80,int256,uint256,uint256,uint80)\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"latestRoundData\",\n                                              \"referencedDeclaration\": 5699,\n                                              \"type\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": true,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"type\": \"contract AggregatorV3Interface\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 7765,\n                                                      \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                                      \"value\": \"usdPriceFeeds\"\n                                                    },\n                                                    \"id\": 8682,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"17227:13:35\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 8580,\n                                                      \"type\": \"address\",\n                                                      \"value\": \"underlying\"\n                                                    },\n                                                    \"id\": 8683,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"17241:10:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8684,\n                                                \"name\": \"IndexAccess\",\n                                                \"src\": \"17227:25:35\"\n                                              }\n                                            ],\n                                            \"id\": 8685,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"17227:41:35\"\n                                          }\n                                        ],\n                                        \"id\": 8686,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"17227:43:35\"\n                                      }\n                                    ],\n                                    \"id\": 8687,\n                                    \"name\": \"Assignment\",\n                                    \"src\": \"17192:78:35\"\n                                  }\n                                ],\n                                \"id\": 8688,\n                                \"name\": \"ExpressionStatement\",\n                                \"src\": \"17192:78:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"falseBody\": null\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \">\",\n                                      \"type\": \"bool\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7785,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"maxSecondsBeforePriceIsStale\"\n                                        },\n                                        \"id\": 8689,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"17289:28:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"30\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 0\",\n                                          \"value\": \"0\"\n                                        },\n                                        \"id\": 8690,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"17320:1:35\"\n                                      }\n                                    ],\n                                    \"id\": 8691,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"17289:32:35\"\n                                  },\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"tuple()\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_bool\",\n                                                  \"typeString\": \"bool\"\n                                                },\n                                                {\n                                                  \"typeIdentifier\": \"t_stringliteral_2e5dcb30070043aea2ee526bf84d6bdda9ed59ec572e870fe648eadb3504d1cf\",\n                                                  \"typeString\": \"literal_string \\\"Token/USD Chainlink price is stale.\\\"\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [\n                                                -18,\n                                                -18\n                                              ],\n                                              \"referencedDeclaration\": -18,\n                                              \"type\": \"function (bool,string memory) pure\",\n                                              \"value\": \"require\"\n                                            },\n                                            \"id\": 8692,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"17323:7:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"<=\",\n                                              \"type\": \"bool\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"timestamp\",\n                                                  \"referencedDeclaration\": null,\n                                                  \"type\": \"uint256\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": -4,\n                                                      \"type\": \"block\",\n                                                      \"value\": \"block\"\n                                                    },\n                                                    \"id\": 8693,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"17331:5:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8694,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"17331:15:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                  },\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"operator\": \"+\",\n                                                  \"type\": \"uint256\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 8651,\n                                                      \"type\": \"uint256\",\n                                                      \"value\": \"updatedAt\"\n                                                    },\n                                                    \"id\": 8695,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"17350:9:35\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 7785,\n                                                      \"type\": \"uint256\",\n                                                      \"value\": \"maxSecondsBeforePriceIsStale\"\n                                                    },\n                                                    \"id\": 8696,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"17362:28:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8697,\n                                                \"name\": \"BinaryOperation\",\n                                                \"src\": \"17350:40:35\"\n                                              }\n                                            ],\n                                            \"id\": 8698,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"17331:59:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"546f6b656e2f55534420436861696e6c696e6b207072696365206973207374616c652e\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"string\",\n                                              \"type\": \"literal_string \\\"Token/USD Chainlink price is stale.\\\"\",\n                                              \"value\": \"Token/USD Chainlink price is stale.\"\n                                            },\n                                            \"id\": 8699,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"17392:37:35\"\n                                          }\n                                        ],\n                                        \"id\": 8700,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"17323:107:35\"\n                                      }\n                                    ],\n                                    \"id\": 8701,\n                                    \"name\": \"ExpressionStatement\",\n                                    \"src\": \"17323:107:35\"\n                                  }\n                                ],\n                                \"id\": 8702,\n                                \"name\": \"IfStatement\",\n                                \"src\": \"17285:145:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"functionReturnParameters\": 8584\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_int256\",\n                                            \"typeString\": \"int256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \">=\",\n                                          \"type\": \"bool\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 8677,\n                                              \"type\": \"int256\",\n                                              \"value\": \"tokenUsdPrice\"\n                                            },\n                                            \"id\": 8703,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"17452:13:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"30\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 0\",\n                                              \"value\": \"0\"\n                                            },\n                                            \"id\": 8704,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"17469:1:35\"\n                                          }\n                                        ],\n                                        \"id\": 8705,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"17452:18:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"div\",\n                                              \"referencedDeclaration\": 10862,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"uint256\",\n                                                  \"type_conversion\": false\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [\n                                                        {\n                                                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                                          \"typeString\": \"int_const 1000000000000000000\"\n                                                        }\n                                                      ],\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"member_name\": \"mul\",\n                                                      \"referencedDeclaration\": 10845,\n                                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"isStructConstructorCall\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"names\": [null],\n                                                          \"tryCall\": false,\n                                                          \"type\": \"uint256\",\n                                                          \"type_conversion\": true\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": [\n                                                                {\n                                                                  \"typeIdentifier\": \"t_int256\",\n                                                                  \"typeString\": \"int256\"\n                                                                }\n                                                              ],\n                                                              \"isConstant\": false,\n                                                              \"isLValue\": false,\n                                                              \"isPure\": true,\n                                                              \"lValueRequested\": false,\n                                                              \"type\": \"type(uint256)\"\n                                                            },\n                                                            \"children\": [\n                                                              {\n                                                                \"attributes\": {\n                                                                  \"name\": \"uint256\",\n                                                                  \"type\": null\n                                                                },\n                                                                \"id\": 8706,\n                                                                \"name\": \"ElementaryTypeName\",\n                                                                \"src\": \"17473:7:35\"\n                                                              }\n                                                            ],\n                                                            \"id\": 8707,\n                                                            \"name\": \"ElementaryTypeNameExpression\",\n                                                            \"src\": \"17473:7:35\"\n                                                          },\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": 8677,\n                                                              \"type\": \"int256\",\n                                                              \"value\": \"tokenUsdPrice\"\n                                                            },\n                                                            \"id\": 8708,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"17481:13:35\"\n                                                          }\n                                                        ],\n                                                        \"id\": 8709,\n                                                        \"name\": \"FunctionCall\",\n                                                        \"src\": \"17473:22:35\"\n                                                      }\n                                                    ],\n                                                    \"id\": 8710,\n                                                    \"name\": \"MemberAccess\",\n                                                    \"src\": \"17473:26:35\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"hexvalue\": \"31653138\",\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": true,\n                                                      \"lValueRequested\": false,\n                                                      \"subdenomination\": null,\n                                                      \"token\": \"number\",\n                                                      \"type\": \"int_const 1000000000000000000\",\n                                                      \"value\": \"1e18\"\n                                                    },\n                                                    \"id\": 8711,\n                                                    \"name\": \"Literal\",\n                                                    \"src\": \"17500:4:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8712,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"17473:32:35\"\n                                              }\n                                            ],\n                                            \"id\": 8713,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"17473:36:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"uint256\",\n                                              \"type_conversion\": true\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_int256\",\n                                                      \"typeString\": \"int256\"\n                                                    }\n                                                  ],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"type\": \"type(uint256)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"name\": \"uint256\",\n                                                      \"type\": null\n                                                    },\n                                                    \"id\": 8714,\n                                                    \"name\": \"ElementaryTypeName\",\n                                                    \"src\": \"17510:7:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8715,\n                                                \"name\": \"ElementaryTypeNameExpression\",\n                                                \"src\": \"17510:7:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 8649,\n                                                  \"type\": \"int256\",\n                                                  \"value\": \"ethUsdPrice\"\n                                                },\n                                                \"id\": 8716,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"17518:11:35\"\n                                              }\n                                            ],\n                                            \"id\": 8717,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"17510:20:35\"\n                                          }\n                                        ],\n                                        \"id\": 8718,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"17473:58:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"30\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 0\",\n                                          \"value\": \"0\"\n                                        },\n                                        \"id\": 8719,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"17534:1:35\"\n                                      }\n                                    ],\n                                    \"id\": 8720,\n                                    \"name\": \"Conditional\",\n                                    \"src\": \"17452:83:35\"\n                                  }\n                                ],\n                                \"id\": 8721,\n                                \"name\": \"Return\",\n                                \"src\": \"17445:90:35\"\n                              }\n                            ],\n                            \"id\": 8722,\n                            \"name\": \"Block\",\n                            \"src\": \"16840:707:35\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"!=\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                              \"typeString\": \"contract AggregatorV3Interface\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8723,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"17557:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8724,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"17557:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": true,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"contract AggregatorV3Interface\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7770,\n                                              \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                              \"value\": \"btcPriceFeeds\"\n                                            },\n                                            \"id\": 8725,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"17565:13:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 8580,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 8726,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"17579:10:35\"\n                                          }\n                                        ],\n                                        \"id\": 8727,\n                                        \"name\": \"IndexAccess\",\n                                        \"src\": \"17565:25:35\"\n                                      }\n                                    ],\n                                    \"id\": 8728,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"17557:34:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address payable\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                                              \"typeString\": \"int_const 0\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8729,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"17595:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8730,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"17595:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"30\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 0\",\n                                          \"value\": \"0\"\n                                        },\n                                        \"id\": 8731,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"17603:1:35\"\n                                      }\n                                    ],\n                                    \"id\": 8732,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"17595:10:35\"\n                                  }\n                                ],\n                                \"id\": 8733,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"17557:48:35\"\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"assignments\": [\n                                        null,\n                                        8735,\n                                        null,\n                                        8737,\n                                        null\n                                      ]\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"constant\": false,\n                                          \"mutability\": \"mutable\",\n                                          \"name\": \"btcEthPrice\",\n                                          \"overrides\": null,\n                                          \"scope\": 8808,\n                                          \"stateVariable\": false,\n                                          \"storageLocation\": \"default\",\n                                          \"type\": \"int256\",\n                                          \"value\": null,\n                                          \"visibility\": \"internal\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"int256\",\n                                              \"type\": \"int256\"\n                                            },\n                                            \"id\": 8734,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"17625:6:35\"\n                                          }\n                                        ],\n                                        \"id\": 8735,\n                                        \"name\": \"VariableDeclaration\",\n                                        \"src\": \"17625:18:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"constant\": false,\n                                          \"mutability\": \"mutable\",\n                                          \"name\": \"updatedAt\",\n                                          \"overrides\": null,\n                                          \"scope\": 8808,\n                                          \"stateVariable\": false,\n                                          \"storageLocation\": \"default\",\n                                          \"type\": \"uint256\",\n                                          \"value\": null,\n                                          \"visibility\": \"internal\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"uint256\",\n                                              \"type\": \"uint256\"\n                                            },\n                                            \"id\": 8736,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"17647:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8737,\n                                        \"name\": \"VariableDeclaration\",\n                                        \"src\": \"17647:17:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"arguments\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"tuple(uint80,int256,uint256,uint256,uint80)\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"latestRoundData\",\n                                              \"referencedDeclaration\": 5699,\n                                              \"type\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 7782,\n                                                  \"type\": \"contract AggregatorV3Interface\",\n                                                  \"value\": \"BTC_ETH_PRICE_FEED\"\n                                                },\n                                                \"id\": 8738,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"17670:18:35\"\n                                              }\n                                            ],\n                                            \"id\": 8739,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"17670:34:35\"\n                                          }\n                                        ],\n                                        \"id\": 8740,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"17670:36:35\"\n                                      }\n                                    ],\n                                    \"id\": 8741,\n                                    \"name\": \"VariableDeclarationStatement\",\n                                    \"src\": \"17622:84:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"falseBody\": null\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \">\",\n                                          \"type\": \"bool\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7785,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"maxSecondsBeforePriceIsStale\"\n                                            },\n                                            \"id\": 8742,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"17725:28:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"30\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 0\",\n                                              \"value\": \"0\"\n                                            },\n                                            \"id\": 8743,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"17756:1:35\"\n                                          }\n                                        ],\n                                        \"id\": 8744,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"17725:32:35\"\n                                      },\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"tuple()\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_bool\",\n                                                      \"typeString\": \"bool\"\n                                                    },\n                                                    {\n                                                      \"typeIdentifier\": \"t_stringliteral_16b6241b84fb628c11c4dffb2766ed99511928329fa9e5190eca81686bc6a174\",\n                                                      \"typeString\": \"literal_string \\\"BTC/ETH Chainlink price is stale.\\\"\"\n                                                    }\n                                                  ],\n                                                  \"overloadedDeclarations\": [\n                                                    -18,\n                                                    -18\n                                                  ],\n                                                  \"referencedDeclaration\": -18,\n                                                  \"type\": \"function (bool,string memory) pure\",\n                                                  \"value\": \"require\"\n                                                },\n                                                \"id\": 8745,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"17759:7:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                  },\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"operator\": \"<=\",\n                                                  \"type\": \"bool\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"member_name\": \"timestamp\",\n                                                      \"referencedDeclaration\": null,\n                                                      \"type\": \"uint256\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": -4,\n                                                          \"type\": \"block\",\n                                                          \"value\": \"block\"\n                                                        },\n                                                        \"id\": 8746,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"17767:5:35\"\n                                                      }\n                                                    ],\n                                                    \"id\": 8747,\n                                                    \"name\": \"MemberAccess\",\n                                                    \"src\": \"17767:15:35\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"commonType\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                      },\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"operator\": \"+\",\n                                                      \"type\": \"uint256\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 8737,\n                                                          \"type\": \"uint256\",\n                                                          \"value\": \"updatedAt\"\n                                                        },\n                                                        \"id\": 8748,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"17786:9:35\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 7785,\n                                                          \"type\": \"uint256\",\n                                                          \"value\": \"maxSecondsBeforePriceIsStale\"\n                                                        },\n                                                        \"id\": 8749,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"17798:28:35\"\n                                                      }\n                                                    ],\n                                                    \"id\": 8750,\n                                                    \"name\": \"BinaryOperation\",\n                                                    \"src\": \"17786:40:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8751,\n                                                \"name\": \"BinaryOperation\",\n                                                \"src\": \"17767:59:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"4254432f45544820436861696e6c696e6b207072696365206973207374616c652e\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"string\",\n                                                  \"type\": \"literal_string \\\"BTC/ETH Chainlink price is stale.\\\"\",\n                                                  \"value\": \"BTC/ETH Chainlink price is stale.\"\n                                                },\n                                                \"id\": 8752,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"17828:35:35\"\n                                              }\n                                            ],\n                                            \"id\": 8753,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"17759:105:35\"\n                                          }\n                                        ],\n                                        \"id\": 8754,\n                                        \"name\": \"ExpressionStatement\",\n                                        \"src\": \"17759:105:35\"\n                                      }\n                                    ],\n                                    \"id\": 8755,\n                                    \"name\": \"IfStatement\",\n                                    \"src\": \"17721:143:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"falseBody\": null\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_int256\",\n                                            \"typeString\": \"int256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"<=\",\n                                          \"type\": \"bool\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 8735,\n                                              \"type\": \"int256\",\n                                              \"value\": \"btcEthPrice\"\n                                            },\n                                            \"id\": 8756,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"17883:11:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"30\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 0\",\n                                              \"value\": \"0\"\n                                            },\n                                            \"id\": 8757,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"17898:1:35\"\n                                          }\n                                        ],\n                                        \"id\": 8758,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"17883:16:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"functionReturnParameters\": 8584\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"30\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 0\",\n                                              \"value\": \"0\"\n                                            },\n                                            \"id\": 8759,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"17908:1:35\"\n                                          }\n                                        ],\n                                        \"id\": 8760,\n                                        \"name\": \"Return\",\n                                        \"src\": \"17901:8:35\"\n                                      }\n                                    ],\n                                    \"id\": 8761,\n                                    \"name\": \"IfStatement\",\n                                    \"src\": \"17879:30:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"assignments\": [8763],\n                                      \"initialValue\": null\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"constant\": false,\n                                          \"mutability\": \"mutable\",\n                                          \"name\": \"tokenBtcPrice\",\n                                          \"overrides\": null,\n                                          \"scope\": 8808,\n                                          \"stateVariable\": false,\n                                          \"storageLocation\": \"default\",\n                                          \"type\": \"int256\",\n                                          \"value\": null,\n                                          \"visibility\": \"internal\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"int256\",\n                                              \"type\": \"int256\"\n                                            },\n                                            \"id\": 8762,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"17924:6:35\"\n                                          }\n                                        ],\n                                        \"id\": 8763,\n                                        \"name\": \"VariableDeclaration\",\n                                        \"src\": \"17924:20:35\"\n                                      }\n                                    ],\n                                    \"id\": 8764,\n                                    \"name\": \"VariableDeclarationStatement\",\n                                    \"src\": \"17924:20:35\"\n                                  },\n                                  {\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"=\",\n                                          \"type\": \"tuple()\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"components\": [\n                                                null,\n                                                {\n                                                  \"attributes\": {\n                                                    \"argumentTypes\": null,\n                                                    \"overloadedDeclarations\": [\n                                                      null\n                                                    ],\n                                                    \"referencedDeclaration\": 8763,\n                                                    \"type\": \"int256\",\n                                                    \"value\": \"tokenBtcPrice\"\n                                                  },\n                                                  \"id\": 8765,\n                                                  \"name\": \"Identifier\",\n                                                  \"src\": \"17962:13:35\"\n                                                },\n                                                null,\n                                                {\n                                                  \"attributes\": {\n                                                    \"argumentTypes\": null,\n                                                    \"overloadedDeclarations\": [\n                                                      null\n                                                    ],\n                                                    \"referencedDeclaration\": 8737,\n                                                    \"type\": \"uint256\",\n                                                    \"value\": \"updatedAt\"\n                                                  },\n                                                  \"id\": 8766,\n                                                  \"name\": \"Identifier\",\n                                                  \"src\": \"17979:9:35\"\n                                                },\n                                                null\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isInlineArray\": false,\n                                              \"isLValue\": true,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": true,\n                                              \"type\": \"tuple(,int256,,uint256,)\"\n                                            },\n                                            \"id\": 8767,\n                                            \"name\": \"TupleExpression\",\n                                            \"src\": \"17959:32:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"arguments\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"tuple(uint80,int256,uint256,uint256,uint80)\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [null],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"latestRoundData\",\n                                                  \"referencedDeclaration\": 5699,\n                                                  \"type\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": true,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"type\": \"contract AggregatorV3Interface\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 7770,\n                                                          \"type\": \"mapping(address => contract AggregatorV3Interface)\",\n                                                          \"value\": \"btcPriceFeeds\"\n                                                        },\n                                                        \"id\": 8768,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"17994:13:35\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 8580,\n                                                          \"type\": \"address\",\n                                                          \"value\": \"underlying\"\n                                                        },\n                                                        \"id\": 8769,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"18008:10:35\"\n                                                      }\n                                                    ],\n                                                    \"id\": 8770,\n                                                    \"name\": \"IndexAccess\",\n                                                    \"src\": \"17994:25:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8771,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"17994:41:35\"\n                                              }\n                                            ],\n                                            \"id\": 8772,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"17994:43:35\"\n                                          }\n                                        ],\n                                        \"id\": 8773,\n                                        \"name\": \"Assignment\",\n                                        \"src\": \"17959:78:35\"\n                                      }\n                                    ],\n                                    \"id\": 8774,\n                                    \"name\": \"ExpressionStatement\",\n                                    \"src\": \"17959:78:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"falseBody\": null\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \">\",\n                                          \"type\": \"bool\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7785,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"maxSecondsBeforePriceIsStale\"\n                                            },\n                                            \"id\": 8775,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"18056:28:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"30\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 0\",\n                                              \"value\": \"0\"\n                                            },\n                                            \"id\": 8776,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"18087:1:35\"\n                                          }\n                                        ],\n                                        \"id\": 8777,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"18056:32:35\"\n                                      },\n                                      {\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"tuple()\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_bool\",\n                                                      \"typeString\": \"bool\"\n                                                    },\n                                                    {\n                                                      \"typeIdentifier\": \"t_stringliteral_ed35518cf424ed4189aa89ff6fcbc32c1b868e73ec9c2db7575274fd97683dc6\",\n                                                      \"typeString\": \"literal_string \\\"Token/BTC Chainlink price is stale.\\\"\"\n                                                    }\n                                                  ],\n                                                  \"overloadedDeclarations\": [\n                                                    -18,\n                                                    -18\n                                                  ],\n                                                  \"referencedDeclaration\": -18,\n                                                  \"type\": \"function (bool,string memory) pure\",\n                                                  \"value\": \"require\"\n                                                },\n                                                \"id\": 8778,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"18090:7:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"commonType\": {\n                                                    \"typeIdentifier\": \"t_uint256\",\n                                                    \"typeString\": \"uint256\"\n                                                  },\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"operator\": \"<=\",\n                                                  \"type\": \"bool\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"member_name\": \"timestamp\",\n                                                      \"referencedDeclaration\": null,\n                                                      \"type\": \"uint256\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": -4,\n                                                          \"type\": \"block\",\n                                                          \"value\": \"block\"\n                                                        },\n                                                        \"id\": 8779,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"18098:5:35\"\n                                                      }\n                                                    ],\n                                                    \"id\": 8780,\n                                                    \"name\": \"MemberAccess\",\n                                                    \"src\": \"18098:15:35\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"commonType\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                      },\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"operator\": \"+\",\n                                                      \"type\": \"uint256\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 8737,\n                                                          \"type\": \"uint256\",\n                                                          \"value\": \"updatedAt\"\n                                                        },\n                                                        \"id\": 8781,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"18117:9:35\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 7785,\n                                                          \"type\": \"uint256\",\n                                                          \"value\": \"maxSecondsBeforePriceIsStale\"\n                                                        },\n                                                        \"id\": 8782,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"18129:28:35\"\n                                                      }\n                                                    ],\n                                                    \"id\": 8783,\n                                                    \"name\": \"BinaryOperation\",\n                                                    \"src\": \"18117:40:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8784,\n                                                \"name\": \"BinaryOperation\",\n                                                \"src\": \"18098:59:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"546f6b656e2f42544320436861696e6c696e6b207072696365206973207374616c652e\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"string\",\n                                                  \"type\": \"literal_string \\\"Token/BTC Chainlink price is stale.\\\"\",\n                                                  \"value\": \"Token/BTC Chainlink price is stale.\"\n                                                },\n                                                \"id\": 8785,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"18159:37:35\"\n                                              }\n                                            ],\n                                            \"id\": 8786,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"18090:107:35\"\n                                          }\n                                        ],\n                                        \"id\": 8787,\n                                        \"name\": \"ExpressionStatement\",\n                                        \"src\": \"18090:107:35\"\n                                      }\n                                    ],\n                                    \"id\": 8788,\n                                    \"name\": \"IfStatement\",\n                                    \"src\": \"18052:145:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"functionReturnParameters\": 8584\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_int256\",\n                                                \"typeString\": \"int256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \">=\",\n                                              \"type\": \"bool\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 8763,\n                                                  \"type\": \"int256\",\n                                                  \"value\": \"tokenBtcPrice\"\n                                                },\n                                                \"id\": 8789,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"18219:13:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"30\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 0\",\n                                                  \"value\": \"0\"\n                                                },\n                                                \"id\": 8790,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"18236:1:35\"\n                                              }\n                                            ],\n                                            \"id\": 8791,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"18219:18:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"uint256\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_rational_100000000_by_1\",\n                                                      \"typeString\": \"int_const 100000000\"\n                                                    }\n                                                  ],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"div\",\n                                                  \"referencedDeclaration\": 10862,\n                                                  \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"isStructConstructorCall\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"names\": [null],\n                                                      \"tryCall\": false,\n                                                      \"type\": \"uint256\",\n                                                      \"type_conversion\": false\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": [\n                                                            {\n                                                              \"typeIdentifier\": \"t_uint256\",\n                                                              \"typeString\": \"uint256\"\n                                                            }\n                                                          ],\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"member_name\": \"mul\",\n                                                          \"referencedDeclaration\": 10845,\n                                                          \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"isConstant\": false,\n                                                              \"isLValue\": false,\n                                                              \"isPure\": false,\n                                                              \"isStructConstructorCall\": false,\n                                                              \"lValueRequested\": false,\n                                                              \"names\": [null],\n                                                              \"tryCall\": false,\n                                                              \"type\": \"uint256\",\n                                                              \"type_conversion\": true\n                                                            },\n                                                            \"children\": [\n                                                              {\n                                                                \"attributes\": {\n                                                                  \"argumentTypes\": [\n                                                                    {\n                                                                      \"typeIdentifier\": \"t_int256\",\n                                                                      \"typeString\": \"int256\"\n                                                                    }\n                                                                  ],\n                                                                  \"isConstant\": false,\n                                                                  \"isLValue\": false,\n                                                                  \"isPure\": true,\n                                                                  \"lValueRequested\": false,\n                                                                  \"type\": \"type(uint256)\"\n                                                                },\n                                                                \"children\": [\n                                                                  {\n                                                                    \"attributes\": {\n                                                                      \"name\": \"uint256\",\n                                                                      \"type\": null\n                                                                    },\n                                                                    \"id\": 8792,\n                                                                    \"name\": \"ElementaryTypeName\",\n                                                                    \"src\": \"18240:7:35\"\n                                                                  }\n                                                                ],\n                                                                \"id\": 8793,\n                                                                \"name\": \"ElementaryTypeNameExpression\",\n                                                                \"src\": \"18240:7:35\"\n                                                              },\n                                                              {\n                                                                \"attributes\": {\n                                                                  \"argumentTypes\": null,\n                                                                  \"overloadedDeclarations\": [\n                                                                    null\n                                                                  ],\n                                                                  \"referencedDeclaration\": 8763,\n                                                                  \"type\": \"int256\",\n                                                                  \"value\": \"tokenBtcPrice\"\n                                                                },\n                                                                \"id\": 8794,\n                                                                \"name\": \"Identifier\",\n                                                                \"src\": \"18248:13:35\"\n                                                              }\n                                                            ],\n                                                            \"id\": 8795,\n                                                            \"name\": \"FunctionCall\",\n                                                            \"src\": \"18240:22:35\"\n                                                          }\n                                                        ],\n                                                        \"id\": 8796,\n                                                        \"name\": \"MemberAccess\",\n                                                        \"src\": \"18240:26:35\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"isStructConstructorCall\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"names\": [null],\n                                                          \"tryCall\": false,\n                                                          \"type\": \"uint256\",\n                                                          \"type_conversion\": true\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": [\n                                                                {\n                                                                  \"typeIdentifier\": \"t_int256\",\n                                                                  \"typeString\": \"int256\"\n                                                                }\n                                                              ],\n                                                              \"isConstant\": false,\n                                                              \"isLValue\": false,\n                                                              \"isPure\": true,\n                                                              \"lValueRequested\": false,\n                                                              \"type\": \"type(uint256)\"\n                                                            },\n                                                            \"children\": [\n                                                              {\n                                                                \"attributes\": {\n                                                                  \"name\": \"uint256\",\n                                                                  \"type\": null\n                                                                },\n                                                                \"id\": 8797,\n                                                                \"name\": \"ElementaryTypeName\",\n                                                                \"src\": \"18267:7:35\"\n                                                              }\n                                                            ],\n                                                            \"id\": 8798,\n                                                            \"name\": \"ElementaryTypeNameExpression\",\n                                                            \"src\": \"18267:7:35\"\n                                                          },\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": 8735,\n                                                              \"type\": \"int256\",\n                                                              \"value\": \"btcEthPrice\"\n                                                            },\n                                                            \"id\": 8799,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"18275:11:35\"\n                                                          }\n                                                        ],\n                                                        \"id\": 8800,\n                                                        \"name\": \"FunctionCall\",\n                                                        \"src\": \"18267:20:35\"\n                                                      }\n                                                    ],\n                                                    \"id\": 8801,\n                                                    \"name\": \"FunctionCall\",\n                                                    \"src\": \"18240:48:35\"\n                                                  }\n                                                ],\n                                                \"id\": 8802,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"18240:52:35\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"316538\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 100000000\",\n                                                  \"value\": \"1e8\"\n                                                },\n                                                \"id\": 8803,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"18293:3:35\"\n                                              }\n                                            ],\n                                            \"id\": 8804,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"18240:57:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"30\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 0\",\n                                              \"value\": \"0\"\n                                            },\n                                            \"id\": 8805,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"18300:1:35\"\n                                          }\n                                        ],\n                                        \"id\": 8806,\n                                        \"name\": \"Conditional\",\n                                        \"src\": \"18219:82:35\"\n                                      }\n                                    ],\n                                    \"id\": 8807,\n                                    \"name\": \"Return\",\n                                    \"src\": \"18212:89:35\"\n                                  }\n                                ],\n                                \"id\": 8808,\n                                \"name\": \"Block\",\n                                \"src\": \"17607:706:35\"\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"tuple()\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_stringliteral_6ea4dc2be735532b49fd9464811d10b2852cc0da31857543f13ea792d11eb3d6\",\n                                              \"typeString\": \"literal_string \\\"No Chainlink price feed found for this underlying ERC20 token.\\\"\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [-19, -19],\n                                          \"referencedDeclaration\": -19,\n                                          \"type\": \"function (string memory) pure\",\n                                          \"value\": \"revert\"\n                                        },\n                                        \"id\": 8809,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"18319:6:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"4e6f20436861696e6c696e6b207072696365206665656420666f756e6420666f72207468697320756e6465726c79696e6720455243323020746f6b656e2e\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"string\",\n                                          \"type\": \"literal_string \\\"No Chainlink price feed found for this underlying ERC20 token.\\\"\",\n                                          \"value\": \"No Chainlink price feed found for this underlying ERC20 token.\"\n                                        },\n                                        \"id\": 8810,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"18326:64:35\"\n                                      }\n                                    ],\n                                    \"id\": 8811,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"18319:72:35\"\n                                  }\n                                ],\n                                \"id\": 8812,\n                                \"name\": \"ExpressionStatement\",\n                                \"src\": \"18319:72:35\"\n                              }\n                            ],\n                            \"id\": 8813,\n                            \"name\": \"IfStatement\",\n                            \"src\": \"17553:838:35\"\n                          }\n                        ],\n                        \"id\": 8814,\n                        \"name\": \"IfStatement\",\n                        \"src\": \"16786:1605:35\"\n                      }\n                    ],\n                    \"id\": 8815,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"16377:2014:35\"\n                  }\n                ],\n                \"id\": 8816,\n                \"name\": \"Block\",\n                \"src\": \"16200:2199:35\"\n              }\n            ],\n            \"id\": 8817,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"16135:2264:35\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [7737],\n              \"functionSelector\": \"aea91078\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"price\",\n              \"scope\": 8905,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\"\n                },\n                \"id\": 8818,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"18407:98:35\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 8822,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"18555:8:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"overrides\": null,\n                      \"scope\": 8831,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 8819,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"18526:7:35\"\n                      }\n                    ],\n                    \"id\": 8820,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"18526:18:35\"\n                  }\n                ],\n                \"id\": 8821,\n                \"name\": \"ParameterList\",\n                \"src\": \"18525:20:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 8831,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 8823,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"18578:4:35\"\n                      }\n                    ],\n                    \"id\": 8824,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"18578:4:35\"\n                  }\n                ],\n                \"id\": 8825,\n                \"name\": \"ParameterList\",\n                \"src\": \"18577:6:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 8825\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 8817,\n                              \"type\": \"function (address) view returns (uint256)\",\n                              \"value\": \"_price\"\n                            },\n                            \"id\": 8826,\n                            \"name\": \"Identifier\",\n                            \"src\": \"18602:6:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 8820,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 8827,\n                            \"name\": \"Identifier\",\n                            \"src\": \"18609:10:35\"\n                          }\n                        ],\n                        \"id\": 8828,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"18602:18:35\"\n                      }\n                    ],\n                    \"id\": 8829,\n                    \"name\": \"Return\",\n                    \"src\": \"18595:25:35\"\n                  }\n                ],\n                \"id\": 8830,\n                \"name\": \"Block\",\n                \"src\": \"18584:44:35\"\n              }\n            ],\n            \"id\": 8831,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"18511:117:35\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 8905,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n                },\n                \"id\": 8832,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"18636:111:35\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 8836,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"18805:8:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 8904,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 8833,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"18781:6:35\"\n                      }\n                    ],\n                    \"id\": 8834,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"18781:13:35\"\n                  }\n                ],\n                \"id\": 8835,\n                \"name\": \"ParameterList\",\n                \"src\": \"18780:15:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 8904,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 8837,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"18828:4:35\"\n                      }\n                    ],\n                    \"id\": 8838,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"18828:4:35\"\n                  }\n                ],\n                \"id\": 8839,\n                \"name\": \"ParameterList\",\n                \"src\": \"18827:6:35\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"bool\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"isCEther\",\n                              \"referencedDeclaration\": 5805,\n                              \"type\": \"function () view external returns (bool)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 8834,\n                                  \"type\": \"contract CToken\",\n                                  \"value\": \"cToken\"\n                                },\n                                \"id\": 8840,\n                                \"name\": \"Identifier\",\n                                \"src\": \"18881:6:35\"\n                              }\n                            ],\n                            \"id\": 8841,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"18881:15:35\"\n                          }\n                        ],\n                        \"id\": 8842,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"18881:17:35\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"functionReturnParameters\": 8839\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 8843,\n                            \"name\": \"Literal\",\n                            \"src\": \"18907:4:35\"\n                          }\n                        ],\n                        \"id\": 8844,\n                        \"name\": \"Return\",\n                        \"src\": \"18900:11:35\"\n                      }\n                    ],\n                    \"id\": 8845,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"18877:34:35\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [8847]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlying\",\n                          \"overrides\": null,\n                          \"scope\": 8903,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 8846,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"18965:7:35\"\n                          }\n                        ],\n                        \"id\": 8847,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"18965:18:35\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"underlying\",\n                              \"referencedDeclaration\": 5711,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract CErc20\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 5723,\n                                      \"type\": \"type(contract CErc20)\",\n                                      \"value\": \"CErc20\"\n                                    },\n                                    \"id\": 8848,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"18986:6:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                              \"typeString\": \"contract CToken\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8849,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"18993:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8850,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"18993:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8834,\n                                          \"type\": \"contract CToken\",\n                                          \"value\": \"cToken\"\n                                        },\n                                        \"id\": 8851,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"19001:6:35\"\n                                      }\n                                    ],\n                                    \"id\": 8852,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"18993:15:35\"\n                                  }\n                                ],\n                                \"id\": 8853,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"18986:23:35\"\n                              }\n                            ],\n                            \"id\": 8854,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"18986:34:35\"\n                          }\n                        ],\n                        \"id\": 8855,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"18986:36:35\"\n                      }\n                    ],\n                    \"id\": 8856,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"18965:57:35\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [8858]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"chainlinkPrice\",\n                          \"overrides\": null,\n                          \"scope\": 8903,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 8857,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"19057:7:35\"\n                          }\n                        ],\n                        \"id\": 8858,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"19057:22:35\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 8817,\n                              \"type\": \"function (address) view returns (uint256)\",\n                              \"value\": \"_price\"\n                            },\n                            \"id\": 8859,\n                            \"name\": \"Identifier\",\n                            \"src\": \"19082:6:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 8847,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 8860,\n                            \"name\": \"Identifier\",\n                            \"src\": \"19089:10:35\"\n                          }\n                        ],\n                        \"id\": 8861,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"19082:18:35\"\n                      }\n                    ],\n                    \"id\": 8862,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"19057:43:35\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [8864]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlyingDecimals\",\n                          \"overrides\": null,\n                          \"scope\": 8903,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 8863,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"19149:7:35\"\n                          }\n                        ],\n                        \"id\": 8864,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"19149:26:35\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint8\",\n                                  \"typeString\": \"uint8\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"type\": \"type(uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"uint256\",\n                                  \"type\": null\n                                },\n                                \"id\": 8865,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"19178:7:35\"\n                              }\n                            ],\n                            \"id\": 8866,\n                            \"name\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"19178:7:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint8\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"decimals\",\n                                  \"referencedDeclaration\": 11105,\n                                  \"type\": \"function () view external returns (uint8)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract ERC20Upgradeable\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 11533,\n                                          \"type\": \"type(contract ERC20Upgradeable)\",\n                                          \"value\": \"ERC20Upgradeable\"\n                                        },\n                                        \"id\": 8867,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"19186:16:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8847,\n                                          \"type\": \"address\",\n                                          \"value\": \"underlying\"\n                                        },\n                                        \"id\": 8868,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"19203:10:35\"\n                                      }\n                                    ],\n                                    \"id\": 8869,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"19186:28:35\"\n                                  }\n                                ],\n                                \"id\": 8870,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"19186:37:35\"\n                              }\n                            ],\n                            \"id\": 8871,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"19186:39:35\"\n                          }\n                        ],\n                        \"id\": 8872,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"19178:48:35\"\n                      }\n                    ],\n                    \"id\": 8873,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"19149:77:35\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 8839\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"<=\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 8864,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"underlyingDecimals\"\n                                },\n                                \"id\": 8874,\n                                \"name\": \"Identifier\",\n                                \"src\": \"19244:18:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"3138\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 18\",\n                                  \"value\": \"18\"\n                                },\n                                \"id\": 8875,\n                                \"name\": \"Literal\",\n                                \"src\": \"19266:2:35\"\n                              }\n                            ],\n                            \"id\": 8876,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"19244:24:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"mul\",\n                                  \"referencedDeclaration\": 10845,\n                                  \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"uint256\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8877,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"19271:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8878,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"19271:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8858,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"chainlinkPrice\"\n                                        },\n                                        \"id\": 8879,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"19279:14:35\"\n                                      }\n                                    ],\n                                    \"id\": 8880,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"19271:23:35\"\n                                  }\n                                ],\n                                \"id\": 8881,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"19271:27:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"**\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3130\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 10\",\n                                      \"value\": \"10\"\n                                    },\n                                    \"id\": 8882,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"19299:2:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isInlineArray\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"-\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"3138\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 18\",\n                                              \"value\": \"18\"\n                                            },\n                                            \"id\": 8883,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"19306:2:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 8864,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"underlyingDecimals\"\n                                            },\n                                            \"id\": 8884,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"19311:18:35\"\n                                          }\n                                        ],\n                                        \"id\": 8885,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"19306:23:35\"\n                                      }\n                                    ],\n                                    \"id\": 8886,\n                                    \"name\": \"TupleExpression\",\n                                    \"src\": \"19305:25:35\"\n                                  }\n                                ],\n                                \"id\": 8887,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"19299:31:35\"\n                              }\n                            ],\n                            \"id\": 8888,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"19271:60:35\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"div\",\n                                  \"referencedDeclaration\": 10862,\n                                  \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"uint256\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8889,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"19334:7:35\"\n                                          }\n                                        ],\n                                        \"id\": 8890,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"19334:7:35\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8858,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"chainlinkPrice\"\n                                        },\n                                        \"id\": 8891,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"19342:14:35\"\n                                      }\n                                    ],\n                                    \"id\": 8892,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"19334:23:35\"\n                                  }\n                                ],\n                                \"id\": 8893,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"19334:27:35\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"**\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3130\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 10\",\n                                      \"value\": \"10\"\n                                    },\n                                    \"id\": 8894,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"19362:2:35\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isInlineArray\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"-\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 8864,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"underlyingDecimals\"\n                                            },\n                                            \"id\": 8895,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"19369:18:35\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"3138\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 18\",\n                                              \"value\": \"18\"\n                                            },\n                                            \"id\": 8896,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"19390:2:35\"\n                                          }\n                                        ],\n                                        \"id\": 8897,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"19369:23:35\"\n                                      }\n                                    ],\n                                    \"id\": 8898,\n                                    \"name\": \"TupleExpression\",\n                                    \"src\": \"19368:25:35\"\n                                  }\n                                ],\n                                \"id\": 8899,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"19362:31:35\"\n                              }\n                            ],\n                            \"id\": 8900,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"19334:60:35\"\n                          }\n                        ],\n                        \"id\": 8901,\n                        \"name\": \"Conditional\",\n                        \"src\": \"19244:150:35\"\n                      }\n                    ],\n                    \"id\": 8902,\n                    \"name\": \"Return\",\n                    \"src\": \"19237:157:35\"\n                  }\n                ],\n                \"id\": 8903,\n                \"name\": \"Block\",\n                \"src\": \"18834:568:35\"\n              }\n            ],\n            \"id\": 8904,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"18753:649:35\"\n          }\n        ],\n        \"id\": 8905,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"614:18791:35\"\n      }\n    ],\n    \"id\": 8906,\n    \"name\": \"SourceUnit\",\n    \"src\": \"0:19407:35\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.126Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements `PriceOracle`.\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Constructor to set `maxSecondsBeforePriceIsStale` as well as all Chainlink price feeds.\"\n      },\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n      },\n      \"hasPriceFeed(address)\": {\n        \"details\": \"Returns a boolean indicating if a price feed exists for the underlying asset.\"\n      },\n      \"price(address)\": {\n        \"details\": \"Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\"\n      }\n    },\n    \"title\": \"PreferredPriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"BTC_ETH_PRICE_FEED()\": {\n        \"notice\": \"Chainlink BTC/ETH price feed contracts.\"\n      },\n      \"ETH_USD_PRICE_FEED()\": {\n        \"notice\": \"Chainlink ETH/USD price feed contracts.\"\n      },\n      \"btcPriceFeeds(address)\": {\n        \"notice\": \"Maps ERC20 token addresses to BTC-based Chainlink price feed contracts.\"\n      },\n      \"ethPriceFeeds(address)\": {\n        \"notice\": \"Maps ERC20 token addresses to ETH-based Chainlink price feed contracts.\"\n      },\n      \"maxSecondsBeforePriceIsStale()\": {\n        \"notice\": \"The maxmimum number of seconds elapsed since the round was last updated before the price is considered stale. If set to 0, no limit is enforced.\"\n      },\n      \"usdPriceFeeds(address)\": {\n        \"notice\": \"Maps ERC20 token addresses to USD-based Chainlink price feed contracts.\"\n      }\n    },\n    \"notice\": \"Returns prices from Chainlink.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/CurveLpTokenPriceOracle.json",
    "content": "{\n  \"contractName\": \"CurveLpTokenPriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"poolOf\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"registry\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ICurveRegistry\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"name\": \"underlyingTokens\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"underlying\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"price\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"lpToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"registerPool\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"poolOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"lpToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"registerPool\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"registry\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ICurveRegistry\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"underlyingTokens\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the PriceOracle interface for Fuse pools (and Compound v2).\\\",\\\"params\\\":{\\\"cToken\\\":\\\"The cToken address for price retrieval.\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals, for the given cToken address.\\\"}},\\\"price(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The underlying token address for which to get the price (set to zero address for ETH).\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH (scaled by 1e18).\\\"}},\\\"registerPool(address)\\\":{\\\"details\\\":\\\"Register the pool given LP token address and set the pool info.\\\",\\\"params\\\":{\\\"lpToken\\\":\\\"LP token to find the corresponding pool.\\\"}}},\\\"stateVariables\\\":{\\\"poolOf\\\":{\\\"details\\\":\\\"Maps Curve LP token addresses to pool addresses.\\\"},\\\"registry\\\":{\\\"details\\\":\\\"The Curve registry.\\\"},\\\"underlyingTokens\\\":{\\\"details\\\":\\\"Maps Curve LP token addresses to underlying token addresses.\\\"}},\\\"title\\\":\\\"CurveLpTokenPriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Get the underlying price of a cToken.\\\"},\\\"price(address)\\\":{\\\"notice\\\":\\\"Get the LP token price price for an underlying token address.\\\"}},\\\"notice\\\":\\\"CurveLpTokenPriceOracle is a price oracle for Curve LP tokens.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/CurveLpTokenPriceOracle.sol\\\":\\\"CurveLpTokenPriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/curve/ICurvePool.sol\\\":{\\\"keccak256\\\":\\\"0x7c6c4de8e711b230faf80dd0b59ba5af1143e7adbabd294c9dca6ae732a07432\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://675cdc6a7632e0370272ce31c259cb15b7f55d2f5289e8104fbb0803752aac61\\\",\\\"dweb:/ipfs/QmWYhn4p5STC1EASu3y36b3aA2avRF7Dtmiq7X1Bmfjd9h\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/curve/ICurveRegistry.sol\\\":{\\\"keccak256\\\":\\\"0xe63b7437b2ee510fd3738b6d14f388079f50e856812bda30c7888c360329d595\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://432627d11b61b2d56d46f36a80ef9d3ffb6870cc07f51162d0a7f6b809dbb1cd\\\",\\\"dweb:/ipfs/QmaQk671BtrDoC32NYSx1FxK4Lh2Rnw8yiY5x74hMvRHSV\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xf267cd7f597c43c528b18543849347126d814357a0c3e262ac657f3054260a89\\\",\\\"urls\\\":[\\\"bzz-raw://d315fcc20e26f6378189167f4ab86893819903823ea18a485588f355aab5e036\\\",\\\"dweb:/ipfs/QmYG9oa8Rti6u7bAoBWJC8TtSqM1V8QsBiivsQo9y4wkAF\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/CurveLpTokenPriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x6b5f20a34f366e622e6dc87b37b0b8646ece28e423d7079a0ceaf77b3cec523f\\\",\\\"urls\\\":[\\\"bzz-raw://d40832ca441ef43a62776d37e6b16b126770ca71f61ddf6e3a3a29f2f9f4b6bc\\\",\\\"dweb:/ipfs/QmTrXMugVzjv2oRg7jn2B97bWQK1sR6PsTRAF7agoUnJna\\\"]},\\\"@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\\\",\\\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\\\",\\\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x9e71cf53c2ee5c9e4f183e168028fc208560493aaf48668bca0981bb2c8359c2\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7cb9d29f7bc76b077649ccef2043e1492a462afcb2410f443e63233f206a95dd\\\",\\\"dweb:/ipfs/QmRDXEro4hh2E6rTUAWvBkHzivAS1TBmtSLP1mRGAHVnnL\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50610a73806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301eadec4146100675780637b103999146100af578063988b1fa7146100b7578063abd90846146100dd578063aea9107814610105578063fc57d4df1461013d575b600080fd5b6100936004803603604081101561007d57600080fd5b506001600160a01b038135169060200135610163565b604080516001600160a01b039092168252519081900360200190f35b610093610198565b610093600480360360208110156100cd57600080fd5b50356001600160a01b03166101b0565b610103600480360360208110156100f357600080fd5b50356001600160a01b03166101cb565b005b61012b6004803603602081101561011b57600080fd5b50356001600160a01b03166104b7565b60408051918252519081900360200190f35b61012b6004803603602081101561015357600080fd5b50356001600160a01b03166104c8565b6000602052816000526040600020818154811061017c57fe5b6000918252602090912001546001600160a01b03169150829050565b737d86446ddb609ed0f5f8684acf30380a356b2b4c81565b6001602052600090815260409020546001600160a01b031681565b6001600160a01b038082166000908152600160205260409020541680156102235760405162461bcd60e51b8152600401808060200182810382526024815260200180610a1a6024913960400191505060405180910390fd5b6040805163bdf475c360e01b81526001600160a01b03841660048201529051737d86446ddb609ed0f5f8684acf30380a356b2b4c9163bdf475c3916024808301926020929190829003018186803b15801561027d57600080fd5b505afa158015610291573d6000803e3d6000fd5b505050506040513d60208110156102a757600080fd5b505190506001600160a01b0381166102f05760405162461bcd60e51b81526004018080602001828103825260448152602001806109d66044913960600191505060405180910390fd5b6001600160a01b03828116600090815260016020908152604080832080546001600160a01b0319169486169485179055805163940494f160e01b81526004810194909452519192737d86446ddb609ed0f5f8684acf30380a356b2b4c9263940494f192602480840193919291829003018186803b15801561037057600080fd5b505afa158015610384573d6000803e3d6000fd5b505050506040513d602081101561039a57600080fd5b505190506103a661096d565b60408051639ac90d3d60e01b81526001600160a01b03851660048201529051737d86446ddb609ed0f5f8684acf30380a356b2b4c91639ac90d3d91602480830192610100929190829003018186803b15801561040157600080fd5b505afa158015610415573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061010081101561043b57600080fd5b50905060005b828110156104b0576001600160a01b038516600090815260208190526040902082826008811061046d57fe5b6020908102919091015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610441565b5050505050565b60006104c2826105d1565b92915050565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561050457600080fd5b505afa158015610518573d6000803e3d6000fd5b505050506040513d602081101561052e57600080fd5b50516040805163313ce56760e01b815290519192506105ca916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561057757600080fd5b505afa15801561058b573d6000803e3d6000fd5b505050506040513d60208110156105a157600080fd5b505160ff16600a0a6105c4670de0b6b3a76400006105be856105d1565b90610835565b9061088e565b9392505050565b6001600160a01b0380821660009081526001602052604081205490911680610640576040805162461bcd60e51b815260206004820152601b60248201527f4c5020746f6b656e206973206e6f7420726567697374657265642e0000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260208181526040918290208054835181840281018401909452808452606093928301828280156106a857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161068a575b5050835193945060001993925060009150505b8181101561076e5760008482815181106106d157fe5b602002602001015190506000336001600160a01b031663aea91078836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561072a57600080fd5b505afa15801561073e573d6000803e3d6000fd5b505050506040513d602081101561075457600080fd5b5051905084811015610764578094505b50506001016106bb565b506000198214156107b05760405162461bcd60e51b815260040180806020018281038252602881526020018061098d6028913960400191505060405180910390fd5b61082b670de0b6b3a76400006105c4866001600160a01b031663bb7b8b806040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f857600080fd5b505afa15801561080c573d6000803e3d6000fd5b505050506040513d602081101561082257600080fd5b50518590610835565b9695505050505050565b600082610844575060006104c2565b8282028284828161085157fe5b04146105ca5760405162461bcd60e51b81526004018080602001828103825260218152602001806109b56021913960400191505060405180910390fd5b60006105ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836109575760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561091c578181015183820152602001610904565b50505050905090810190601f1680156109495780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161096357fe5b0495945050505050565b604051806101000160405280600890602082028036833750919291505056fe4e6f206d696e696d756d20756e6465726c79696e6720746f6b656e20707269636520666f756e642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774e6f20636f72726573706f6e64696e6720706f6f6c20666f756e6420666f722074686973204c5020746f6b656e20696e207468652043757276652072656769737472792e54686973204c5020746f6b656e20697320616c726561647920726567697374657265642ea2646970667358221220be984d6c7d5eb53d2be72274d782de9aad54b4ccf5e8ac1691ac00197e9cbeb664736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100625760003560e01c806301eadec4146100675780637b103999146100af578063988b1fa7146100b7578063abd90846146100dd578063aea9107814610105578063fc57d4df1461013d575b600080fd5b6100936004803603604081101561007d57600080fd5b506001600160a01b038135169060200135610163565b604080516001600160a01b039092168252519081900360200190f35b610093610198565b610093600480360360208110156100cd57600080fd5b50356001600160a01b03166101b0565b610103600480360360208110156100f357600080fd5b50356001600160a01b03166101cb565b005b61012b6004803603602081101561011b57600080fd5b50356001600160a01b03166104b7565b60408051918252519081900360200190f35b61012b6004803603602081101561015357600080fd5b50356001600160a01b03166104c8565b6000602052816000526040600020818154811061017c57fe5b6000918252602090912001546001600160a01b03169150829050565b737d86446ddb609ed0f5f8684acf30380a356b2b4c81565b6001602052600090815260409020546001600160a01b031681565b6001600160a01b038082166000908152600160205260409020541680156102235760405162461bcd60e51b8152600401808060200182810382526024815260200180610a1a6024913960400191505060405180910390fd5b6040805163bdf475c360e01b81526001600160a01b03841660048201529051737d86446ddb609ed0f5f8684acf30380a356b2b4c9163bdf475c3916024808301926020929190829003018186803b15801561027d57600080fd5b505afa158015610291573d6000803e3d6000fd5b505050506040513d60208110156102a757600080fd5b505190506001600160a01b0381166102f05760405162461bcd60e51b81526004018080602001828103825260448152602001806109d66044913960600191505060405180910390fd5b6001600160a01b03828116600090815260016020908152604080832080546001600160a01b0319169486169485179055805163940494f160e01b81526004810194909452519192737d86446ddb609ed0f5f8684acf30380a356b2b4c9263940494f192602480840193919291829003018186803b15801561037057600080fd5b505afa158015610384573d6000803e3d6000fd5b505050506040513d602081101561039a57600080fd5b505190506103a661096d565b60408051639ac90d3d60e01b81526001600160a01b03851660048201529051737d86446ddb609ed0f5f8684acf30380a356b2b4c91639ac90d3d91602480830192610100929190829003018186803b15801561040157600080fd5b505afa158015610415573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061010081101561043b57600080fd5b50905060005b828110156104b0576001600160a01b038516600090815260208190526040902082826008811061046d57fe5b6020908102919091015182546001808201855560009485529290932090920180546001600160a01b0319166001600160a01b039093169290921790915501610441565b5050505050565b60006104c2826105d1565b92915050565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561050457600080fd5b505afa158015610518573d6000803e3d6000fd5b505050506040513d602081101561052e57600080fd5b50516040805163313ce56760e01b815290519192506105ca916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561057757600080fd5b505afa15801561058b573d6000803e3d6000fd5b505050506040513d60208110156105a157600080fd5b505160ff16600a0a6105c4670de0b6b3a76400006105be856105d1565b90610835565b9061088e565b9392505050565b6001600160a01b0380821660009081526001602052604081205490911680610640576040805162461bcd60e51b815260206004820152601b60248201527f4c5020746f6b656e206973206e6f7420726567697374657265642e0000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260208181526040918290208054835181840281018401909452808452606093928301828280156106a857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161068a575b5050835193945060001993925060009150505b8181101561076e5760008482815181106106d157fe5b602002602001015190506000336001600160a01b031663aea91078836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561072a57600080fd5b505afa15801561073e573d6000803e3d6000fd5b505050506040513d602081101561075457600080fd5b5051905084811015610764578094505b50506001016106bb565b506000198214156107b05760405162461bcd60e51b815260040180806020018281038252602881526020018061098d6028913960400191505060405180910390fd5b61082b670de0b6b3a76400006105c4866001600160a01b031663bb7b8b806040518163ffffffff1660e01b815260040160206040518083038186803b1580156107f857600080fd5b505afa15801561080c573d6000803e3d6000fd5b505050506040513d602081101561082257600080fd5b50518590610835565b9695505050505050565b600082610844575060006104c2565b8282028284828161085157fe5b04146105ca5760405162461bcd60e51b81526004018080602001828103825260218152602001806109b56021913960400191505060405180910390fd5b60006105ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836109575760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561091c578181015183820152602001610904565b50505050905090810190601f1680156109495780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161096357fe5b0495945050505050565b604051806101000160405280600890602082028036833750919291505056fe4e6f206d696e696d756d20756e6465726c79696e6720746f6b656e20707269636520666f756e642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774e6f20636f72726573706f6e64696e6720706f6f6c20666f756e6420666f722074686973204c5020746f6b656e20696e207468652043757276652072656769737472792e54686973204c5020746f6b656e20697320616c726561647920726567697374657265642ea2646970667358221220be984d6c7d5eb53d2be72274d782de9aad54b4ccf5e8ac1691ac00197e9cbeb664736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"733:3263:36:-:0;;;;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"733:3263:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3074:53;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3074:53:36;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3074:53:36;;;;;;;;;;;;;;2873:100;;;:::i;3216:41::-;;;;;;;;;;;;;;;;-1:-1:-1;3216:41:36;-1:-1:-1;;;;;3216:41:36;;:::i;3425:568::-;;;;;;;;;;;;;;;;-1:-1:-1;3425:568:36;-1:-1:-1;;;;;3425:568:36;;:::i;:::-;;1102:108;;;;;;;;;;;;;;;;-1:-1:-1;1102:108:36;-1:-1:-1;;;;;1102:108:36;;:::i;:::-;;;;;;;;;;;;;;;;1526:444;;;;;;;;;;;;;;;;-1:-1:-1;1526:444:36;-1:-1:-1;;;;;1526:444:36;;:::i;3074:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3074:53:36;;-1:-1:-1;3074:53:36;;-1:-1:-1;3074:53:36:o;2873:100::-;2930:42;2873:100;:::o;3216:41::-;;;;;;;;;;;;-1:-1:-1;;;;;3216:41:36;;:::o;3425:568::-;-1:-1:-1;;;;;3499:15:36;;;3484:12;3499:15;;;:6;:15;;;;;;;3533:18;;3525:67;;;;-1:-1:-1;;;3525:67:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3610:40;;;-1:-1:-1;;;3610:40:36;;-1:-1:-1;;;;;3610:40:36;;;;;;;;2930:42;;3610:31;;:40;;;;;;;;;;;;;;2930:42;3610:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3610:40:36;;-1:-1:-1;;;;;;3669:18:36;;3661:99;;;;-1:-1:-1;;;3661:99:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3771:15:36;;;;;;;:6;:15;;;;;;;;:22;;-1:-1:-1;;;;;;3771:22:36;;;;;;;;;3813:26;;-1:-1:-1;;;3813:26:36;;;;;;;;;;3771:15;;2930:42;;3813:20;;:26;;;;;3771:15;;3813:26;;;;;;2930:42;3813:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3813:26:36;;-1:-1:-1;3850:24:36;;:::i;:::-;3877;;;-1:-1:-1;;;3877:24:36;;-1:-1:-1;;;;;3877:24:36;;;;;;;;2930:42;;3877:18;;:24;;;;;;;;;;;;;;2930:42;3877:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3877:24:36;-1:-1:-1;3917:9:36;3912:73;3936:1;3932;:5;3912:73;;;-1:-1:-1;;;;;3944:25:36;;:16;:25;;;;;;;;;;3975:6;3982:1;3975:9;;;;;;;;;;;;;;;;3944:41;;;;;;;;-1:-1:-1;3944:41:36;;;;;;;;;;;;-1:-1:-1;;;;;;3944:41:36;-1:-1:-1;;;;;3944:41:36;;;;;;;;;;3939:3;3912:73;;;;3425:568;;;;:::o;1102:108::-;1160:4;1184:18;1191:10;1184:6;:18::i;:::-;1177:25;1102:108;-1:-1:-1;;1102:108:36:o;1526:444::-;1601:4;1618:18;1654:6;-1:-1:-1;;;;;1639:34:36;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1639:36:36;1921:39;;;-1:-1:-1;;;1921:39:36;;;;1639:36;;-1:-1:-1;1874:88:36;;-1:-1:-1;;;;;1921:37:36;;;;;:39;;;;;1639:36;;1921:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1921:39:36;1913:48;;1907:2;:54;1874:28;1897:4;1874:18;1881:10;1874:6;:18::i;:::-;:22;;:28::i;:::-;:32;;:88::i;:::-;1867:95;1526:444;-1:-1:-1;;;1526:444:36:o;2088:726::-;-1:-1:-1;;;;;2182:15:36;;;2152:4;2182:15;;;:6;:15;;;;;;2152:4;;2182:15;2214:18;2206:58;;;;;-1:-1:-1;;;2206:58:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2299:25:36;;:16;:25;;;;;;;;;;;;2273:51;;;;;;;;;;;;;;;;;:23;;:51;;;2299:25;2273:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2273:51:36;;;;;;;;;;;;;;;;-1:-1:-1;;2381:13:36;;2273:51;;-1:-1:-1;;;2357:2:36;2381:13;-1:-1:-1;2333:13:36;;-1:-1:-1;;2405:204:36;2429:1;2425;:5;2405:204;;;2450:15;2468:6;2475:1;2468:9;;;;;;;;;;;;;;2450:27;;2490:15;2524:10;-1:-1:-1;;;;;2508:33:36;;2542:7;2508:42;;;;;;;;;;;;;-1:-1:-1;;;;;2508:42:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2508:42:36;;-1:-1:-1;2567:15:36;;;2563:36;;;2592:7;2584:15;;2563:36;-1:-1:-1;;2432:3:36;;2405:204;;;;-1:-1:-1;;2627:5:36;:20;;2619:73;;;;-1:-1:-1;;;2619:73:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2714:57;2766:4;2714:47;2735:4;-1:-1:-1;;;;;2724:34:36;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2724:36:36;2714:5;;:9;:47::i;:57::-;2707:64;2088:726;-1:-1:-1;;;;;;2088:726:36:o;2199:459:47:-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:47;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3120:130;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:47:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o\",\n  \"source\": \"pragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CToken.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"../external/curve/ICurveRegistry.sol\\\";\\r\\nimport \\\"../external/curve/ICurvePool.sol\\\";\\r\\n\\r\\nimport \\\"./BasePriceOracle.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title CurveLpTokenPriceOracle\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n * @notice CurveLpTokenPriceOracle is a price oracle for Curve LP tokens.\\r\\n * @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\\r\\n */\\r\\ncontract CurveLpTokenPriceOracle is PriceOracle {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @notice Get the LP token price price for an underlying token address.\\r\\n     * @param underlying The underlying token address for which to get the price (set to zero address for ETH).\\r\\n     * @return Price denominated in ETH (scaled by 1e18).\\r\\n     */\\r\\n    function price(address underlying) external view returns (uint) {\\r\\n        return _price(underlying);\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @notice Get the underlying price of a cToken.\\r\\n     * @dev Implements the PriceOracle interface for Fuse pools (and Compound v2).\\r\\n     * @param cToken The cToken address for price retrieval.\\r\\n     * @return Price denominated in ETH, with 18 decimals, for the given cToken address.\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        address underlying = CErc20(address(cToken)).underlying();\\r\\n        // Comptroller needs prices to be scaled by 1e(36 - decimals)\\r\\n        // Since `_price` returns prices scaled by 18 decimals, we must scale them by 1e(36 - 18 - decimals)\\r\\n        return _price(underlying).mul(1e18).div(10 ** uint256(ERC20Upgradeable(underlying).decimals()));\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Fetches the fair LP token/ETH price from Curve, with 18 decimals of precision.\\r\\n     */\\r\\n    function _price(address lpToken) internal view virtual returns (uint) {\\r\\n      address pool = poolOf[lpToken];\\r\\n      require(pool != address(0), \\\"LP token is not registered.\\\");\\r\\n      address[] memory tokens = underlyingTokens[lpToken];\\r\\n      uint256 minPx = uint256(-1);\\r\\n      uint256 n = tokens.length;\\r\\n\\r\\n      for (uint256 i = 0; i < n; i++) {\\r\\n          address ulToken = tokens[i];\\r\\n          uint256 tokenPx = BasePriceOracle(msg.sender).price(ulToken);\\r\\n          if (tokenPx < minPx) minPx = tokenPx;\\r\\n      }\\r\\n\\r\\n      require(minPx != uint256(-1), \\\"No minimum underlying token price found.\\\");      \\r\\n      return minPx.mul(ICurvePool(pool).get_virtual_price()).div(1e18); // Use min underlying token prices\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev The Curve registry.\\r\\n     */\\r\\n    ICurveRegistry public constant registry = ICurveRegistry(0x7D86446dDb609eD0F5f8684AcF30380a356b2B4c);\\r\\n\\r\\n    /**\\r\\n     * @dev Maps Curve LP token addresses to underlying token addresses.\\r\\n     */\\r\\n    mapping(address => address[]) public underlyingTokens;\\r\\n\\r\\n    /**\\r\\n     * @dev Maps Curve LP token addresses to pool addresses.\\r\\n     */\\r\\n    mapping(address => address) public poolOf;\\r\\n\\r\\n    /**\\r\\n     * @dev Register the pool given LP token address and set the pool info.\\r\\n     * @param lpToken LP token to find the corresponding pool.\\r\\n     */\\r\\n    function registerPool(address lpToken) external {\\r\\n        address pool = poolOf[lpToken];\\r\\n        require(pool == address(0), \\\"This LP token is already registered.\\\");\\r\\n        pool = registry.get_pool_from_lp_token(lpToken);\\r\\n        require(pool != address(0), \\\"No corresponding pool found for this LP token in the Curve registry.\\\");\\r\\n        poolOf[lpToken] = pool;\\r\\n        uint n = registry.get_n_coins(pool);\\r\\n        address[8] memory tokens = registry.get_coins(pool);\\r\\n        for (uint256 i = 0; i < n; i++) underlyingTokens[lpToken].push(tokens[i]);\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/CurveLpTokenPriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/CurveLpTokenPriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"CurveLpTokenPriceOracle\": [9182]\n    },\n    \"id\": 9183,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 8907,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:36\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 8908,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9183,\n        \"sourceUnit\": 10933,\n        \"src\": \"27:74:36\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"id\": 8909,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9183,\n        \"sourceUnit\": 11534,\n        \"src\": \"103:78:36\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 8910,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9183,\n        \"sourceUnit\": 6024,\n        \"src\": \"185:46:36\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 8911,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9183,\n        \"sourceUnit\": 5867,\n        \"src\": \"233:41:36\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 8912,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9183,\n        \"sourceUnit\": 5724,\n        \"src\": \"276:41:36\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/curve/ICurveRegistry.sol\",\n        \"file\": \"../external/curve/ICurveRegistry.sol\",\n        \"id\": 8913,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9183,\n        \"sourceUnit\": 6076,\n        \"src\": \"321:46:36\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/curve/ICurvePool.sol\",\n        \"file\": \"../external/curve/ICurvePool.sol\",\n        \"id\": 8914,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9183,\n        \"sourceUnit\": 6050,\n        \"src\": \"369:42:36\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n        \"file\": \"./BasePriceOracle.sol\",\n        \"id\": 8915,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9183,\n        \"sourceUnit\": 7739,\n        \"src\": \"415:31:36\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 8917,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"769:11:36\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 8918,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"769:11:36\"\n          }\n        ],\n        \"contractDependencies\": [6023],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 8916,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"450:281:36\",\n          \"text\": \" @title CurveLpTokenPriceOracle\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\n @notice CurveLpTokenPriceOracle is a price oracle for Curve LP tokens.\\n @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 9182,\n        \"linearizedBaseContracts\": [9182, 6023],\n        \"name\": \"CurveLpTokenPriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 8921,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 8919,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 10932,\n              \"src\": \"794:19:36\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$10932\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"788:38:36\",\n            \"typeName\": {\n              \"id\": 8920,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"818:7:36\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"body\": {\n              \"id\": 8933,\n              \"nodeType\": \"Block\",\n              \"src\": \"1166:44:36\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 8930,\n                        \"name\": \"underlying\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 8924,\n                        \"src\": \"1191:10:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 8929,\n                      \"name\": \"_price\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9080,\n                      \"src\": \"1184:6:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 8931,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1184:18:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 8928,\n                  \"id\": 8932,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1177:25:36\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 8922,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"834:262:36\",\n              \"text\": \" @notice Get the LP token price price for an underlying token address.\\n @param underlying The underlying token address for which to get the price (set to zero address for ETH).\\n @return Price denominated in ETH (scaled by 1e18).\"\n            },\n            \"functionSelector\": \"aea91078\",\n            \"id\": 8934,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 8925,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8924,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8934,\n                  \"src\": \"1117:18:36\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8923,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1117:7:36\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1116:20:36\"\n            },\n            \"returnParameters\": {\n              \"id\": 8928,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8927,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8934,\n                  \"src\": \"1160:4:36\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8926,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1160:4:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1159:6:36\"\n            },\n            \"scope\": 9182,\n            \"src\": \"1102:108:36\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 8973,\n              \"nodeType\": \"Block\",\n              \"src\": \"1607:363:36\",\n              \"statements\": [\n                {\n                  \"assignments\": [8944],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 8944,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 8973,\n                      \"src\": \"1618:18:36\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 8943,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1618:7:36\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 8953,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 8948,\n                                \"name\": \"cToken\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8937,\n                                \"src\": \"1654:6:36\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              ],\n                              \"id\": 8947,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"ElementaryTypeNameExpression\",\n                              \"src\": \"1646:7:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_address_$\",\n                                \"typeString\": \"type(address)\"\n                              },\n                              \"typeName\": {\n                                \"id\": 8946,\n                                \"name\": \"address\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"1646:7:36\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": null,\n                                  \"typeString\": null\n                                }\n                              }\n                            },\n                            \"id\": 8949,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1646:15:36\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 8945,\n                          \"name\": \"CErc20\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 5723,\n                          \"src\": \"1639:6:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                            \"typeString\": \"type(contract CErc20)\"\n                          }\n                        },\n                        \"id\": 8950,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1639:23:36\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                          \"typeString\": \"contract CErc20\"\n                        }\n                      },\n                      \"id\": 8951,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"underlying\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5711,\n                      \"src\": \"1639:34:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 8952,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1639:36:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1618:57:36\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 8970,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"3130\",\n                          \"id\": 8961,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1907:2:36\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_10_by_1\",\n                            \"typeString\": \"int_const 10\"\n                          },\n                          \"value\": \"10\"\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"**\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [],\n                              \"expression\": {\n                                \"argumentTypes\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"id\": 8965,\n                                      \"name\": \"underlying\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 8944,\n                                      \"src\": \"1938:10:36\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                      }\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                      }\n                                    ],\n                                    \"id\": 8964,\n                                    \"name\": \"ERC20Upgradeable\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 11533,\n                                    \"src\": \"1921:16:36\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11533_$\",\n                                      \"typeString\": \"type(contract ERC20Upgradeable)\"\n                                    }\n                                  },\n                                  \"id\": 8966,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"1921:28:36\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11533\",\n                                    \"typeString\": \"contract ERC20Upgradeable\"\n                                  }\n                                },\n                                \"id\": 8967,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"decimals\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 11105,\n                                \"src\": \"1921:37:36\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                                  \"typeString\": \"function () view external returns (uint8)\"\n                                }\n                              },\n                              \"id\": 8968,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"1921:39:36\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint8\",\n                                \"typeString\": \"uint8\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_uint8\",\n                                \"typeString\": \"uint8\"\n                              }\n                            ],\n                            \"id\": 8963,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1913:7:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                              \"typeString\": \"type(uint256)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8962,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1913:7:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8969,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1913:48:36\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"1907:54:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"31653138\",\n                            \"id\": 8958,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1897:4:36\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            },\n                            \"value\": \"1e18\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 8955,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 8944,\n                                \"src\": \"1881:10:36\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 8954,\n                              \"name\": \"_price\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9080,\n                              \"src\": \"1874:6:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (address) view returns (uint256)\"\n                              }\n                            },\n                            \"id\": 8956,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1874:18:36\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 8957,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"1874:22:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 8959,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1874:28:36\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 8960,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"1874:32:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 8971,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1874:88:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 8942,\n                  \"id\": 8972,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1867:95:36\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 8935,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1218:302:36\",\n              \"text\": \" @notice Get the underlying price of a cToken.\\n @dev Implements the PriceOracle interface for Fuse pools (and Compound v2).\\n @param cToken The cToken address for price retrieval.\\n @return Price denominated in ETH, with 18 decimals, for the given cToken address.\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 8974,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 8939,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"1578:8:36\"\n            },\n            \"parameters\": {\n              \"id\": 8938,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8937,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8974,\n                  \"src\": \"1554:13:36\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 8936,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"1554:6:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1553:15:36\"\n            },\n            \"returnParameters\": {\n              \"id\": 8942,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8941,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 8974,\n                  \"src\": \"1601:4:36\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8940,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1601:4:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1600:6:36\"\n            },\n            \"scope\": 9182,\n            \"src\": \"1526:444:36\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 9079,\n              \"nodeType\": \"Block\",\n              \"src\": \"2158:656:36\",\n              \"statements\": [\n                {\n                  \"assignments\": [8983],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 8983,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pool\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9079,\n                      \"src\": \"2167:12:36\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 8982,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2167:7:36\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 8987,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"baseExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 8984,\n                      \"name\": \"poolOf\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9097,\n                      \"src\": \"2182:6:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_mapping$_t_address_$_t_address_$\",\n                        \"typeString\": \"mapping(address => address)\"\n                      }\n                    },\n                    \"id\": 8986,\n                    \"indexExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 8985,\n                      \"name\": \"lpToken\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 8977,\n                      \"src\": \"2189:7:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"IndexAccess\",\n                    \"src\": \"2182:15:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2167:30:36\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 8994,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 8989,\n                          \"name\": \"pool\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 8983,\n                          \"src\": \"2214:4:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 8992,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2230:1:36\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 8991,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"2222:7:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 8990,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"2222:7:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 8993,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2222:10:36\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"2214:18:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4c5020746f6b656e206973206e6f7420726567697374657265642e\",\n                        \"id\": 8995,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2234:29:36\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_be0ed1662ac3a48a64c60570ca7771fd1c8dcad44d1949fb0afe34f094ad4b48\",\n                          \"typeString\": \"literal_string \\\"LP token is not registered.\\\"\"\n                        },\n                        \"value\": \"LP token is not registered.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_be0ed1662ac3a48a64c60570ca7771fd1c8dcad44d1949fb0afe34f094ad4b48\",\n                          \"typeString\": \"literal_string \\\"LP token is not registered.\\\"\"\n                        }\n                      ],\n                      \"id\": 8988,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"2206:7:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 8996,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2206:58:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 8997,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2206:58:36\"\n                },\n                {\n                  \"assignments\": [9002],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9002,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"tokens\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9079,\n                      \"src\": \"2273:23:36\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                        \"typeString\": \"address[]\"\n                      },\n                      \"typeName\": {\n                        \"baseType\": {\n                          \"id\": 9000,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2273:7:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"id\": 9001,\n                        \"length\": null,\n                        \"nodeType\": \"ArrayTypeName\",\n                        \"src\": \"2273:9:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_address_$dyn_storage_ptr\",\n                          \"typeString\": \"address[]\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9006,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"baseExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9003,\n                      \"name\": \"underlyingTokens\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9092,\n                      \"src\": \"2299:16:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$\",\n                        \"typeString\": \"mapping(address => address[] storage ref)\"\n                      }\n                    },\n                    \"id\": 9005,\n                    \"indexExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9004,\n                      \"name\": \"lpToken\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 8977,\n                      \"src\": \"2316:7:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"IndexAccess\",\n                    \"src\": \"2299:25:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_address_$dyn_storage\",\n                      \"typeString\": \"address[] storage ref\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2273:51:36\"\n                },\n                {\n                  \"assignments\": [9008],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9008,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"minPx\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9079,\n                      \"src\": \"2333:13:36\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9007,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2333:7:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9014,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9012,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"UnaryOperation\",\n                        \"operator\": \"-\",\n                        \"prefix\": true,\n                        \"src\": \"2357:2:36\",\n                        \"subExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"31\",\n                          \"id\": 9011,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2358:1:36\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_1_by_1\",\n                            \"typeString\": \"int_const 1\"\n                          },\n                          \"value\": \"1\"\n                        },\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_minus_1_by_1\",\n                          \"typeString\": \"int_const -1\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_rational_minus_1_by_1\",\n                          \"typeString\": \"int_const -1\"\n                        }\n                      ],\n                      \"id\": 9010,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"2349:7:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                        \"typeString\": \"type(uint256)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9009,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2349:7:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 9013,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": true,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2349:11:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2333:27:36\"\n                },\n                {\n                  \"assignments\": [9016],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9016,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"n\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9079,\n                      \"src\": \"2369:9:36\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9015,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2369:7:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9019,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9017,\n                      \"name\": \"tokens\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9002,\n                      \"src\": \"2381:6:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                        \"typeString\": \"address[] memory\"\n                      }\n                    },\n                    \"id\": 9018,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"memberName\": \"length\",\n                    \"nodeType\": \"MemberAccess\",\n                    \"referencedDeclaration\": null,\n                    \"src\": \"2381:13:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2369:25:36\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 9054,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2437:172:36\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [9031],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 9031,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"ulToken\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 9054,\n                            \"src\": \"2450:15:36\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9030,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"2450:7:36\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 9035,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9032,\n                            \"name\": \"tokens\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9002,\n                            \"src\": \"2468:6:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                              \"typeString\": \"address[] memory\"\n                            }\n                          },\n                          \"id\": 9034,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9033,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9021,\n                            \"src\": \"2475:1:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2468:9:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"2450:27:36\"\n                      },\n                      {\n                        \"assignments\": [9037],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 9037,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"tokenPx\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 9054,\n                            \"src\": \"2490:15:36\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9036,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"2490:7:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 9045,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 9043,\n                              \"name\": \"ulToken\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9031,\n                              \"src\": \"2542:7:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 9039,\n                                    \"name\": \"msg\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": -15,\n                                    \"src\": \"2524:3:36\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_magic_message\",\n                                      \"typeString\": \"msg\"\n                                    }\n                                  },\n                                  \"id\": 9040,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"sender\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": null,\n                                  \"src\": \"2524:10:36\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                ],\n                                \"id\": 9038,\n                                \"name\": \"BasePriceOracle\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 7738,\n                                \"src\": \"2508:15:36\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$7738_$\",\n                                  \"typeString\": \"type(contract BasePriceOracle)\"\n                                }\n                              },\n                              \"id\": 9041,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2508:27:36\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_BasePriceOracle_$7738\",\n                                \"typeString\": \"contract BasePriceOracle\"\n                              }\n                            },\n                            \"id\": 9042,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"price\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 7737,\n                            \"src\": \"2508:33:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                              \"typeString\": \"function (address) view external returns (uint256)\"\n                            }\n                          },\n                          \"id\": 9044,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2508:42:36\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"2490:60:36\"\n                      },\n                      {\n                        \"condition\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 9048,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9046,\n                            \"name\": \"tokenPx\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9037,\n                            \"src\": \"2567:7:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"<\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9047,\n                            \"name\": \"minPx\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9008,\n                            \"src\": \"2577:5:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"2567:15:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"falseBody\": null,\n                        \"id\": 9053,\n                        \"nodeType\": \"IfStatement\",\n                        \"src\": \"2563:36:36\",\n                        \"trueBody\": {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9051,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftHandSide\": {\n                              \"argumentTypes\": null,\n                              \"id\": 9049,\n                              \"name\": \"minPx\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9008,\n                              \"src\": \"2584:5:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"Assignment\",\n                            \"operator\": \"=\",\n                            \"rightHandSide\": {\n                              \"argumentTypes\": null,\n                              \"id\": 9050,\n                              \"name\": \"tokenPx\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9037,\n                              \"src\": \"2592:7:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"2584:15:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 9052,\n                          \"nodeType\": \"ExpressionStatement\",\n                          \"src\": \"2584:15:36\"\n                        }\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9026,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9024,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9021,\n                      \"src\": \"2425:1:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9025,\n                      \"name\": \"n\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9016,\n                      \"src\": \"2429:1:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2425:5:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 9055,\n                  \"initializationExpression\": {\n                    \"assignments\": [9021],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 9021,\n                        \"mutability\": \"mutable\",\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"overrides\": null,\n                        \"scope\": 9055,\n                        \"src\": \"2410:9:36\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 9020,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2410:7:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 9023,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 9022,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2422:1:36\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"2410:13:36\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9028,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"2432:3:36\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9027,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9021,\n                        \"src\": \"2432:1:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 9029,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"2432:3:36\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"2405:204:36\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 9063,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9057,\n                          \"name\": \"minPx\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9008,\n                          \"src\": \"2627:5:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 9061,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"UnaryOperation\",\n                              \"operator\": \"-\",\n                              \"prefix\": true,\n                              \"src\": \"2644:2:36\",\n                              \"subExpression\": {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"31\",\n                                \"id\": 9060,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"number\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"2645:1:36\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_1_by_1\",\n                                  \"typeString\": \"int_const 1\"\n                                },\n                                \"value\": \"1\"\n                              },\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_minus_1_by_1\",\n                                \"typeString\": \"int_const -1\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_minus_1_by_1\",\n                                \"typeString\": \"int_const -1\"\n                              }\n                            ],\n                            \"id\": 9059,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"2636:7:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                              \"typeString\": \"type(uint256)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9058,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"2636:7:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 9062,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2636:11:36\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"2627:20:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4e6f206d696e696d756d20756e6465726c79696e6720746f6b656e20707269636520666f756e642e\",\n                        \"id\": 9064,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2649:42:36\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_2063429c0417fda341efb05044277300bf24fdb0790beeda1fd79d40f2ab20ca\",\n                          \"typeString\": \"literal_string \\\"No minimum underlying token price found.\\\"\"\n                        },\n                        \"value\": \"No minimum underlying token price found.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_2063429c0417fda341efb05044277300bf24fdb0790beeda1fd79d40f2ab20ca\",\n                          \"typeString\": \"literal_string \\\"No minimum underlying token price found.\\\"\"\n                        }\n                      ],\n                      \"id\": 9056,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"2619:7:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 9065,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2619:73:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 9066,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2619:73:36\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"31653138\",\n                        \"id\": 9076,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2766:4:36\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                          \"typeString\": \"int_const 1000000000000000000\"\n                        },\n                        \"value\": \"1e18\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                          \"typeString\": \"int_const 1000000000000000000\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [],\n                            \"expression\": {\n                              \"argumentTypes\": [],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 9070,\n                                    \"name\": \"pool\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 8983,\n                                    \"src\": \"2735:4:36\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"id\": 9069,\n                                  \"name\": \"ICurvePool\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 6049,\n                                  \"src\": \"2724:10:36\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_type$_t_contract$_ICurvePool_$6049_$\",\n                                    \"typeString\": \"type(contract ICurvePool)\"\n                                  }\n                                },\n                                \"id\": 9071,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"typeConversion\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"2724:16:36\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_ICurvePool_$6049\",\n                                  \"typeString\": \"contract ICurvePool\"\n                                }\n                              },\n                              \"id\": 9072,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"get_virtual_price\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 6048,\n                              \"src\": \"2724:34:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                                \"typeString\": \"function () view external returns (uint256)\"\n                              }\n                            },\n                            \"id\": 9073,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"2724:36:36\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9067,\n                            \"name\": \"minPx\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9008,\n                            \"src\": \"2714:5:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 9068,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"2714:9:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 9074,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2714:47:36\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 9075,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"2714:51:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9077,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2714:57:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 8981,\n                  \"id\": 9078,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2707:64:36\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 8975,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1978:104:36\",\n              \"text\": \" @dev Fetches the fair LP token/ETH price from Curve, with 18 decimals of precision.\"\n            },\n            \"id\": 9080,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 8978,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8977,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"lpToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9080,\n                  \"src\": \"2104:15:36\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8976,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2104:7:36\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2103:17:36\"\n            },\n            \"returnParameters\": {\n              \"id\": 8981,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 8980,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9080,\n                  \"src\": \"2152:4:36\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 8979,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2152:4:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2151:6:36\"\n            },\n            \"scope\": 9182,\n            \"src\": \"2088:726:36\",\n            \"stateMutability\": \"view\",\n            \"virtual\": true,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 9081,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"2822:45:36\",\n              \"text\": \" @dev The Curve registry.\"\n            },\n            \"functionSelector\": \"7b103999\",\n            \"id\": 9086,\n            \"mutability\": \"constant\",\n            \"name\": \"registry\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9182,\n            \"src\": \"2873:100:36\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_ICurveRegistry_$6075\",\n              \"typeString\": \"contract ICurveRegistry\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 9082,\n              \"name\": \"ICurveRegistry\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6075,\n              \"src\": \"2873:14:36\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_ICurveRegistry_$6075\",\n                \"typeString\": \"contract ICurveRegistry\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"arguments\": [\n                {\n                  \"argumentTypes\": null,\n                  \"hexValue\": \"307837443836343436644462363039654430463566383638344163463330333830613335366232423463\",\n                  \"id\": 9084,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"kind\": \"number\",\n                  \"lValueRequested\": false,\n                  \"nodeType\": \"Literal\",\n                  \"src\": \"2930:42:36\",\n                  \"subdenomination\": null,\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"value\": \"0x7D86446dDb609eD0F5f8684AcF30380a356b2B4c\"\n                }\n              ],\n              \"expression\": {\n                \"argumentTypes\": [\n                  {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  }\n                ],\n                \"id\": 9083,\n                \"name\": \"ICurveRegistry\",\n                \"nodeType\": \"Identifier\",\n                \"overloadedDeclarations\": [],\n                \"referencedDeclaration\": 6075,\n                \"src\": \"2915:14:36\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_type$_t_contract$_ICurveRegistry_$6075_$\",\n                  \"typeString\": \"type(contract ICurveRegistry)\"\n                }\n              },\n              \"id\": 9085,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"typeConversion\",\n              \"lValueRequested\": false,\n              \"names\": [],\n              \"nodeType\": \"FunctionCall\",\n              \"src\": \"2915:58:36\",\n              \"tryCall\": false,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_ICurveRegistry_$6075\",\n                \"typeString\": \"contract ICurveRegistry\"\n              }\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 9087,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"2982:86:36\",\n              \"text\": \" @dev Maps Curve LP token addresses to underlying token addresses.\"\n            },\n            \"functionSelector\": \"01eadec4\",\n            \"id\": 9092,\n            \"mutability\": \"mutable\",\n            \"name\": \"underlyingTokens\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9182,\n            \"src\": \"3074:53:36\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$\",\n              \"typeString\": \"mapping(address => address[])\"\n            },\n            \"typeName\": {\n              \"id\": 9091,\n              \"keyType\": {\n                \"id\": 9088,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"3082:7:36\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"3074:29:36\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$\",\n                \"typeString\": \"mapping(address => address[])\"\n              },\n              \"valueType\": {\n                \"baseType\": {\n                  \"id\": 9089,\n                  \"name\": \"address\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"3093:7:36\",\n                  \"stateMutability\": \"nonpayable\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  }\n                },\n                \"id\": 9090,\n                \"length\": null,\n                \"nodeType\": \"ArrayTypeName\",\n                \"src\": \"3093:9:36\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_array$_t_address_$dyn_storage_ptr\",\n                  \"typeString\": \"address[]\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 9093,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"3136:74:36\",\n              \"text\": \" @dev Maps Curve LP token addresses to pool addresses.\"\n            },\n            \"functionSelector\": \"988b1fa7\",\n            \"id\": 9097,\n            \"mutability\": \"mutable\",\n            \"name\": \"poolOf\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9182,\n            \"src\": \"3216:41:36\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_address_$\",\n              \"typeString\": \"mapping(address => address)\"\n            },\n            \"typeName\": {\n              \"id\": 9096,\n              \"keyType\": {\n                \"id\": 9094,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"3224:7:36\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"3216:27:36\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_address_$\",\n                \"typeString\": \"mapping(address => address)\"\n              },\n              \"valueType\": {\n                \"id\": 9095,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"3235:7:36\",\n                \"stateMutability\": \"nonpayable\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 9180,\n              \"nodeType\": \"Block\",\n              \"src\": \"3473:520:36\",\n              \"statements\": [\n                {\n                  \"assignments\": [9104],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9104,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pool\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9180,\n                      \"src\": \"3484:12:36\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9103,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3484:7:36\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9108,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"baseExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9105,\n                      \"name\": \"poolOf\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9097,\n                      \"src\": \"3499:6:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_mapping$_t_address_$_t_address_$\",\n                        \"typeString\": \"mapping(address => address)\"\n                      }\n                    },\n                    \"id\": 9107,\n                    \"indexExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9106,\n                      \"name\": \"lpToken\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9100,\n                      \"src\": \"3506:7:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"IndexAccess\",\n                    \"src\": \"3499:15:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3484:30:36\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 9115,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9110,\n                          \"name\": \"pool\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9104,\n                          \"src\": \"3533:4:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 9113,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"3549:1:36\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 9112,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"3541:7:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9111,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"3541:7:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 9114,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3541:10:36\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"3533:18:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"54686973204c5020746f6b656e20697320616c726561647920726567697374657265642e\",\n                        \"id\": 9116,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3553:38:36\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_fdef014ad10efeb962488cd9b20cf6db7d0a8078cd840803ec6ec6d65fb46414\",\n                          \"typeString\": \"literal_string \\\"This LP token is already registered.\\\"\"\n                        },\n                        \"value\": \"This LP token is already registered.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_fdef014ad10efeb962488cd9b20cf6db7d0a8078cd840803ec6ec6d65fb46414\",\n                          \"typeString\": \"literal_string \\\"This LP token is already registered.\\\"\"\n                        }\n                      ],\n                      \"id\": 9109,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"3525:7:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 9117,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3525:67:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 9118,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3525:67:36\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 9124,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9119,\n                      \"name\": \"pool\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9104,\n                      \"src\": \"3603:4:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 9122,\n                          \"name\": \"lpToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9100,\n                          \"src\": \"3642:7:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9120,\n                          \"name\": \"registry\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9086,\n                          \"src\": \"3610:8:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_ICurveRegistry_$6075\",\n                            \"typeString\": \"contract ICurveRegistry\"\n                          }\n                        },\n                        \"id\": 9121,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"get_pool_from_lp_token\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 6074,\n                        \"src\": \"3610:31:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_address_$\",\n                          \"typeString\": \"function (address) view external returns (address)\"\n                        }\n                      },\n                      \"id\": 9123,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3610:40:36\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"3603:47:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 9125,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3603:47:36\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 9132,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9127,\n                          \"name\": \"pool\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9104,\n                          \"src\": \"3669:4:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 9130,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"3685:1:36\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 9129,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"3677:7:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9128,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"3677:7:36\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 9131,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3677:10:36\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"3669:18:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4e6f20636f72726573706f6e64696e6720706f6f6c20666f756e6420666f722074686973204c5020746f6b656e20696e207468652043757276652072656769737472792e\",\n                        \"id\": 9133,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3689:70:36\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_9459c4bdc77b7082b19d168d8c1aaea3c663bd13191f951d54849545d842dad7\",\n                          \"typeString\": \"literal_string \\\"No corresponding pool found for this LP token in the Curve registry.\\\"\"\n                        },\n                        \"value\": \"No corresponding pool found for this LP token in the Curve registry.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_9459c4bdc77b7082b19d168d8c1aaea3c663bd13191f951d54849545d842dad7\",\n                          \"typeString\": \"literal_string \\\"No corresponding pool found for this LP token in the Curve registry.\\\"\"\n                        }\n                      ],\n                      \"id\": 9126,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"3661:7:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 9134,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3661:99:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 9135,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3661:99:36\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 9140,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9136,\n                        \"name\": \"poolOf\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9097,\n                        \"src\": \"3771:6:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_address_$\",\n                          \"typeString\": \"mapping(address => address)\"\n                        }\n                      },\n                      \"id\": 9138,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9137,\n                        \"name\": \"lpToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9100,\n                        \"src\": \"3778:7:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"3771:15:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9139,\n                      \"name\": \"pool\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9104,\n                      \"src\": \"3789:4:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"3771:22:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 9141,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3771:22:36\"\n                },\n                {\n                  \"assignments\": [9143],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9143,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"n\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9180,\n                      \"src\": \"3804:6:36\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9142,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3804:4:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9148,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9146,\n                        \"name\": \"pool\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9104,\n                        \"src\": \"3834:4:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9144,\n                        \"name\": \"registry\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9086,\n                        \"src\": \"3813:8:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_ICurveRegistry_$6075\",\n                          \"typeString\": \"contract ICurveRegistry\"\n                        }\n                      },\n                      \"id\": 9145,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"get_n_coins\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6058,\n                      \"src\": \"3813:20:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view external returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9147,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3813:26:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3804:35:36\"\n                },\n                {\n                  \"assignments\": [9154],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9154,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"tokens\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9180,\n                      \"src\": \"3850:24:36\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_array$_t_address_$8_memory_ptr\",\n                        \"typeString\": \"address[8]\"\n                      },\n                      \"typeName\": {\n                        \"baseType\": {\n                          \"id\": 9152,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"3850:7:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"id\": 9153,\n                        \"length\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"38\",\n                          \"id\": 9151,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3858:1:36\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_8_by_1\",\n                            \"typeString\": \"int_const 8\"\n                          },\n                          \"value\": \"8\"\n                        },\n                        \"nodeType\": \"ArrayTypeName\",\n                        \"src\": \"3850:10:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_address_$8_storage_ptr\",\n                          \"typeString\": \"address[8]\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9159,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9157,\n                        \"name\": \"pool\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9104,\n                        \"src\": \"3896:4:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9155,\n                        \"name\": \"registry\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9086,\n                        \"src\": \"3877:8:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_ICurveRegistry_$6075\",\n                          \"typeString\": \"contract ICurveRegistry\"\n                        }\n                      },\n                      \"id\": 9156,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"get_coins\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6067,\n                      \"src\": \"3877:18:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_array$_t_address_$8_memory_ptr_$\",\n                        \"typeString\": \"function (address) view external returns (address[8] memory)\"\n                      }\n                    },\n                    \"id\": 9158,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3877:24:36\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_address_$8_memory_ptr\",\n                      \"typeString\": \"address[8] memory\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3850:51:36\"\n                },\n                {\n                  \"body\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9174,\n                            \"name\": \"tokens\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9154,\n                            \"src\": \"3975:6:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_address_$8_memory_ptr\",\n                              \"typeString\": \"address[8] memory\"\n                            }\n                          },\n                          \"id\": 9176,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9175,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9161,\n                            \"src\": \"3982:1:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"3975:9:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9170,\n                            \"name\": \"underlyingTokens\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9092,\n                            \"src\": \"3944:16:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_mapping$_t_address_$_t_array$_t_address_$dyn_storage_$\",\n                              \"typeString\": \"mapping(address => address[] storage ref)\"\n                            }\n                          },\n                          \"id\": 9172,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9171,\n                            \"name\": \"lpToken\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9100,\n                            \"src\": \"3961:7:36\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"3944:25:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_array$_t_address_$dyn_storage\",\n                            \"typeString\": \"address[] storage ref\"\n                          }\n                        },\n                        \"id\": 9173,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"push\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": null,\n                        \"src\": \"3944:30:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_arraypush_nonpayable$_t_address_$returns$__$\",\n                          \"typeString\": \"function (address)\"\n                        }\n                      },\n                      \"id\": 9177,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3944:41:36\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_tuple$__$\",\n                        \"typeString\": \"tuple()\"\n                      }\n                    },\n                    \"id\": 9178,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"3944:41:36\"\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9166,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9164,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9161,\n                      \"src\": \"3932:1:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9165,\n                      \"name\": \"n\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9143,\n                      \"src\": \"3936:1:36\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"3932:5:36\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 9179,\n                  \"initializationExpression\": {\n                    \"assignments\": [9161],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 9161,\n                        \"mutability\": \"mutable\",\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"overrides\": null,\n                        \"scope\": 9179,\n                        \"src\": \"3917:9:36\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 9160,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"3917:7:36\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 9163,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 9162,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"3929:1:36\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"3917:13:36\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9168,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"3939:3:36\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9167,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9161,\n                        \"src\": \"3939:1:36\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 9169,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"3939:3:36\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"3912:73:36\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9098,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"3266:153:36\",\n              \"text\": \" @dev Register the pool given LP token address and set the pool info.\\n @param lpToken LP token to find the corresponding pool.\"\n            },\n            \"functionSelector\": \"abd90846\",\n            \"id\": 9181,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"registerPool\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9101,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9100,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"lpToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9181,\n                  \"src\": \"3447:15:36\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9099,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3447:7:36\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3446:17:36\"\n            },\n            \"returnParameters\": {\n              \"id\": 9102,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"3473:0:36\"\n            },\n            \"scope\": 9182,\n            \"src\": \"3425:568:36\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 9183,\n        \"src\": \"733:3263:36\"\n      }\n    ],\n    \"src\": \"0:3998:36\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/CurveLpTokenPriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"CurveLpTokenPriceOracle\": [9182]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 8907,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"0:23:36\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 10933,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 9183,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 8908,\n        \"name\": \"ImportDirective\",\n        \"src\": \"27:74:36\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 11534,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"scope\": 9183,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 8909,\n        \"name\": \"ImportDirective\",\n        \"src\": \"103:78:36\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 9183,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 8910,\n        \"name\": \"ImportDirective\",\n        \"src\": \"185:46:36\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5867,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n          \"file\": \"../external/compound/CToken.sol\",\n          \"scope\": 9183,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 8911,\n        \"name\": \"ImportDirective\",\n        \"src\": \"233:41:36\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 9183,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 8912,\n        \"name\": \"ImportDirective\",\n        \"src\": \"276:41:36\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6076,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/curve/ICurveRegistry.sol\",\n          \"file\": \"../external/curve/ICurveRegistry.sol\",\n          \"scope\": 9183,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 8913,\n        \"name\": \"ImportDirective\",\n        \"src\": \"321:46:36\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6050,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/curve/ICurvePool.sol\",\n          \"file\": \"../external/curve/ICurvePool.sol\",\n          \"scope\": 9183,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 8914,\n        \"name\": \"ImportDirective\",\n        \"src\": \"369:42:36\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 7739,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n          \"file\": \"./BasePriceOracle.sol\",\n          \"scope\": 9183,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 8915,\n        \"name\": \"ImportDirective\",\n        \"src\": \"415:31:36\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [9182, 6023],\n          \"name\": \"CurveLpTokenPriceOracle\",\n          \"scope\": 9183\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title CurveLpTokenPriceOracle\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\n @notice CurveLpTokenPriceOracle is a price oracle for Curve LP tokens.\\n @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\"\n            },\n            \"id\": 8916,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"450:281:36\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 8917,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"769:11:36\"\n              }\n            ],\n            \"id\": 8918,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"769:11:36\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 10932,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 8919,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"794:19:36\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 8920,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"818:7:36\"\n              }\n            ],\n            \"id\": 8921,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"788:38:36\"\n          },\n          {\n            \"attributes\": {\n              \"functionSelector\": \"aea91078\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"price\",\n              \"overrides\": null,\n              \"scope\": 9182,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Get the LP token price price for an underlying token address.\\n @param underlying The underlying token address for which to get the price (set to zero address for ETH).\\n @return Price denominated in ETH (scaled by 1e18).\"\n                },\n                \"id\": 8922,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"834:262:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"overrides\": null,\n                      \"scope\": 8934,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 8923,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1117:7:36\"\n                      }\n                    ],\n                    \"id\": 8924,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1117:18:36\"\n                  }\n                ],\n                \"id\": 8925,\n                \"name\": \"ParameterList\",\n                \"src\": \"1116:20:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 8934,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 8926,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1160:4:36\"\n                      }\n                    ],\n                    \"id\": 8927,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1160:4:36\"\n                  }\n                ],\n                \"id\": 8928,\n                \"name\": \"ParameterList\",\n                \"src\": \"1159:6:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 8928\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9080,\n                              \"type\": \"function (address) view returns (uint256)\",\n                              \"value\": \"_price\"\n                            },\n                            \"id\": 8929,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1184:6:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 8924,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 8930,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1191:10:36\"\n                          }\n                        ],\n                        \"id\": 8931,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1184:18:36\"\n                      }\n                    ],\n                    \"id\": 8932,\n                    \"name\": \"Return\",\n                    \"src\": \"1177:25:36\"\n                  }\n                ],\n                \"id\": 8933,\n                \"name\": \"Block\",\n                \"src\": \"1166:44:36\"\n              }\n            ],\n            \"id\": 8934,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1102:108:36\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 9182,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Get the underlying price of a cToken.\\n @dev Implements the PriceOracle interface for Fuse pools (and Compound v2).\\n @param cToken The cToken address for price retrieval.\\n @return Price denominated in ETH, with 18 decimals, for the given cToken address.\"\n                },\n                \"id\": 8935,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1218:302:36\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 8939,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"1578:8:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 8974,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 8936,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"1554:6:36\"\n                      }\n                    ],\n                    \"id\": 8937,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1554:13:36\"\n                  }\n                ],\n                \"id\": 8938,\n                \"name\": \"ParameterList\",\n                \"src\": \"1553:15:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 8974,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 8940,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1601:4:36\"\n                      }\n                    ],\n                    \"id\": 8941,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1601:4:36\"\n                  }\n                ],\n                \"id\": 8942,\n                \"name\": \"ParameterList\",\n                \"src\": \"1600:6:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [8944]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlying\",\n                          \"overrides\": null,\n                          \"scope\": 8973,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 8943,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1618:7:36\"\n                          }\n                        ],\n                        \"id\": 8944,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1618:18:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"underlying\",\n                              \"referencedDeclaration\": 5711,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract CErc20\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 5723,\n                                      \"type\": \"type(contract CErc20)\",\n                                      \"value\": \"CErc20\"\n                                    },\n                                    \"id\": 8945,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"1639:6:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                              \"typeString\": \"contract CToken\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 8946,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"1646:7:36\"\n                                          }\n                                        ],\n                                        \"id\": 8947,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"1646:7:36\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 8937,\n                                          \"type\": \"contract CToken\",\n                                          \"value\": \"cToken\"\n                                        },\n                                        \"id\": 8948,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1654:6:36\"\n                                      }\n                                    ],\n                                    \"id\": 8949,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1646:15:36\"\n                                  }\n                                ],\n                                \"id\": 8950,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1639:23:36\"\n                              }\n                            ],\n                            \"id\": 8951,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1639:34:36\"\n                          }\n                        ],\n                        \"id\": 8952,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1639:36:36\"\n                      }\n                    ],\n                    \"id\": 8953,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1618:57:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 8942\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                          \"typeString\": \"int_const 1000000000000000000\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_address\",\n                                                  \"typeString\": \"address\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9080,\n                                              \"type\": \"function (address) view returns (uint256)\",\n                                              \"value\": \"_price\"\n                                            },\n                                            \"id\": 8954,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1874:6:36\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 8944,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 8955,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1881:10:36\"\n                                          }\n                                        ],\n                                        \"id\": 8956,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1874:18:36\"\n                                      }\n                                    ],\n                                    \"id\": 8957,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1874:22:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"31653138\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 1000000000000000000\",\n                                      \"value\": \"1e18\"\n                                    },\n                                    \"id\": 8958,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"1897:4:36\"\n                                  }\n                                ],\n                                \"id\": 8959,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1874:28:36\"\n                              }\n                            ],\n                            \"id\": 8960,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1874:32:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"**\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"3130\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 10\",\n                                  \"value\": \"10\"\n                                },\n                                \"id\": 8961,\n                                \"name\": \"Literal\",\n                                \"src\": \"1907:2:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"uint256\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 8962,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"1913:7:36\"\n                                      }\n                                    ],\n                                    \"id\": 8963,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"1913:7:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint8\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"decimals\",\n                                          \"referencedDeclaration\": 11105,\n                                          \"type\": \"function () view external returns (uint8)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"contract ERC20Upgradeable\",\n                                              \"type_conversion\": true\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_address\",\n                                                      \"typeString\": \"address\"\n                                                    }\n                                                  ],\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 11533,\n                                                  \"type\": \"type(contract ERC20Upgradeable)\",\n                                                  \"value\": \"ERC20Upgradeable\"\n                                                },\n                                                \"id\": 8964,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1921:16:36\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 8944,\n                                                  \"type\": \"address\",\n                                                  \"value\": \"underlying\"\n                                                },\n                                                \"id\": 8965,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1938:10:36\"\n                                              }\n                                            ],\n                                            \"id\": 8966,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"1921:28:36\"\n                                          }\n                                        ],\n                                        \"id\": 8967,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"1921:37:36\"\n                                      }\n                                    ],\n                                    \"id\": 8968,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1921:39:36\"\n                                  }\n                                ],\n                                \"id\": 8969,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1913:48:36\"\n                              }\n                            ],\n                            \"id\": 8970,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"1907:54:36\"\n                          }\n                        ],\n                        \"id\": 8971,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1874:88:36\"\n                      }\n                    ],\n                    \"id\": 8972,\n                    \"name\": \"Return\",\n                    \"src\": \"1867:95:36\"\n                  }\n                ],\n                \"id\": 8973,\n                \"name\": \"Block\",\n                \"src\": \"1607:363:36\"\n              }\n            ],\n            \"id\": 8974,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1526:444:36\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"_price\",\n              \"overrides\": null,\n              \"scope\": 9182,\n              \"stateMutability\": \"view\",\n              \"virtual\": true,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Fetches the fair LP token/ETH price from Curve, with 18 decimals of precision.\"\n                },\n                \"id\": 8975,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1978:104:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"lpToken\",\n                      \"overrides\": null,\n                      \"scope\": 9080,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 8976,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2104:7:36\"\n                      }\n                    ],\n                    \"id\": 8977,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2104:15:36\"\n                  }\n                ],\n                \"id\": 8978,\n                \"name\": \"ParameterList\",\n                \"src\": \"2103:17:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9080,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 8979,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2152:4:36\"\n                      }\n                    ],\n                    \"id\": 8980,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2152:4:36\"\n                  }\n                ],\n                \"id\": 8981,\n                \"name\": \"ParameterList\",\n                \"src\": \"2151:6:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [8983]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"pool\",\n                          \"overrides\": null,\n                          \"scope\": 9079,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 8982,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2167:7:36\"\n                          }\n                        ],\n                        \"id\": 8983,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2167:12:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"address\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9097,\n                              \"type\": \"mapping(address => address)\",\n                              \"value\": \"poolOf\"\n                            },\n                            \"id\": 8984,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2182:6:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 8977,\n                              \"type\": \"address\",\n                              \"value\": \"lpToken\"\n                            },\n                            \"id\": 8985,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2189:7:36\"\n                          }\n                        ],\n                        \"id\": 8986,\n                        \"name\": \"IndexAccess\",\n                        \"src\": \"2182:15:36\"\n                      }\n                    ],\n                    \"id\": 8987,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2167:30:36\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_be0ed1662ac3a48a64c60570ca7771fd1c8dcad44d1949fb0afe34f094ad4b48\",\n                                  \"typeString\": \"literal_string \\\"LP token is not registered.\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 8988,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2206:7:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"!=\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 8983,\n                                  \"type\": \"address\",\n                                  \"value\": \"pool\"\n                                },\n                                \"id\": 8989,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2214:4:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address payable\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_0_by_1\",\n                                          \"typeString\": \"int_const 0\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 8990,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"2222:7:36\"\n                                      }\n                                    ],\n                                    \"id\": 8991,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"2222:7:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 8992,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"2230:1:36\"\n                                  }\n                                ],\n                                \"id\": 8993,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2222:10:36\"\n                              }\n                            ],\n                            \"id\": 8994,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"2214:18:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"4c5020746f6b656e206973206e6f7420726567697374657265642e\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"LP token is not registered.\\\"\",\n                              \"value\": \"LP token is not registered.\"\n                            },\n                            \"id\": 8995,\n                            \"name\": \"Literal\",\n                            \"src\": \"2234:29:36\"\n                          }\n                        ],\n                        \"id\": 8996,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2206:58:36\"\n                      }\n                    ],\n                    \"id\": 8997,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2206:58:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9002]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"tokens\",\n                          \"overrides\": null,\n                          \"scope\": 9079,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"memory\",\n                          \"type\": \"address[]\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"length\": null,\n                              \"type\": \"address[]\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"address\",\n                                  \"type\": \"address\"\n                                },\n                                \"id\": 9000,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"2273:7:36\"\n                              }\n                            ],\n                            \"id\": 9001,\n                            \"name\": \"ArrayTypeName\",\n                            \"src\": \"2273:9:36\"\n                          }\n                        ],\n                        \"id\": 9002,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2273:23:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"address[] storage ref\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9092,\n                              \"type\": \"mapping(address => address[] storage ref)\",\n                              \"value\": \"underlyingTokens\"\n                            },\n                            \"id\": 9003,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2299:16:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 8977,\n                              \"type\": \"address\",\n                              \"value\": \"lpToken\"\n                            },\n                            \"id\": 9004,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2316:7:36\"\n                          }\n                        ],\n                        \"id\": 9005,\n                        \"name\": \"IndexAccess\",\n                        \"src\": \"2299:25:36\"\n                      }\n                    ],\n                    \"id\": 9006,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2273:51:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9008]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"minPx\",\n                          \"overrides\": null,\n                          \"scope\": 9079,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9007,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2333:7:36\"\n                          }\n                        ],\n                        \"id\": 9008,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2333:13:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_rational_minus_1_by_1\",\n                                  \"typeString\": \"int_const -1\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"type\": \"type(uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"uint256\",\n                                  \"type\": null\n                                },\n                                \"id\": 9009,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"2349:7:36\"\n                              }\n                            ],\n                            \"id\": 9010,\n                            \"name\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"2349:7:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"operator\": \"-\",\n                              \"prefix\": true,\n                              \"type\": \"int_const -1\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 9011,\n                                \"name\": \"Literal\",\n                                \"src\": \"2358:1:36\"\n                              }\n                            ],\n                            \"id\": 9012,\n                            \"name\": \"UnaryOperation\",\n                            \"src\": \"2357:2:36\"\n                          }\n                        ],\n                        \"id\": 9013,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2349:11:36\"\n                      }\n                    ],\n                    \"id\": 9014,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2333:27:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9016]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"n\",\n                          \"overrides\": null,\n                          \"scope\": 9079,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9015,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2369:7:36\"\n                          }\n                        ],\n                        \"id\": 9016,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2369:9:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"member_name\": \"length\",\n                          \"referencedDeclaration\": null,\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9002,\n                              \"type\": \"address[] memory\",\n                              \"value\": \"tokens\"\n                            },\n                            \"id\": 9017,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2381:6:36\"\n                          }\n                        ],\n                        \"id\": 9018,\n                        \"name\": \"MemberAccess\",\n                        \"src\": \"2381:13:36\"\n                      }\n                    ],\n                    \"id\": 9019,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2369:25:36\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"assignments\": [9021]\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"constant\": false,\n                              \"mutability\": \"mutable\",\n                              \"name\": \"i\",\n                              \"overrides\": null,\n                              \"scope\": 9055,\n                              \"stateVariable\": false,\n                              \"storageLocation\": \"default\",\n                              \"type\": \"uint256\",\n                              \"value\": null,\n                              \"visibility\": \"internal\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"uint256\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"id\": 9020,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"2410:7:36\"\n                              }\n                            ],\n                            \"id\": 9021,\n                            \"name\": \"VariableDeclaration\",\n                            \"src\": \"2410:9:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 0\",\n                              \"value\": \"0\"\n                            },\n                            \"id\": 9022,\n                            \"name\": \"Literal\",\n                            \"src\": \"2422:1:36\"\n                          }\n                        ],\n                        \"id\": 9023,\n                        \"name\": \"VariableDeclarationStatement\",\n                        \"src\": \"2410:13:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"<\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9021,\n                              \"type\": \"uint256\",\n                              \"value\": \"i\"\n                            },\n                            \"id\": 9024,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2425:1:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9016,\n                              \"type\": \"uint256\",\n                              \"value\": \"n\"\n                            },\n                            \"id\": 9025,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2429:1:36\"\n                          }\n                        ],\n                        \"id\": 9026,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"2425:5:36\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"++\",\n                              \"prefix\": false,\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9021,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"i\"\n                                },\n                                \"id\": 9027,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2432:1:36\"\n                              }\n                            ],\n                            \"id\": 9028,\n                            \"name\": \"UnaryOperation\",\n                            \"src\": \"2432:3:36\"\n                          }\n                        ],\n                        \"id\": 9029,\n                        \"name\": \"ExpressionStatement\",\n                        \"src\": \"2432:3:36\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"assignments\": [9031]\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"constant\": false,\n                                  \"mutability\": \"mutable\",\n                                  \"name\": \"ulToken\",\n                                  \"overrides\": null,\n                                  \"scope\": 9054,\n                                  \"stateVariable\": false,\n                                  \"storageLocation\": \"default\",\n                                  \"type\": \"address\",\n                                  \"value\": null,\n                                  \"visibility\": \"internal\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"address\",\n                                      \"stateMutability\": \"nonpayable\",\n                                      \"type\": \"address\"\n                                    },\n                                    \"id\": 9030,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"2450:7:36\"\n                                  }\n                                ],\n                                \"id\": 9031,\n                                \"name\": \"VariableDeclaration\",\n                                \"src\": \"2450:15:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": true,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"address\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9002,\n                                      \"type\": \"address[] memory\",\n                                      \"value\": \"tokens\"\n                                    },\n                                    \"id\": 9032,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2468:6:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9021,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"i\"\n                                    },\n                                    \"id\": 9033,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2475:1:36\"\n                                  }\n                                ],\n                                \"id\": 9034,\n                                \"name\": \"IndexAccess\",\n                                \"src\": \"2468:9:36\"\n                              }\n                            ],\n                            \"id\": 9035,\n                            \"name\": \"VariableDeclarationStatement\",\n                            \"src\": \"2450:27:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"assignments\": [9037]\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"constant\": false,\n                                  \"mutability\": \"mutable\",\n                                  \"name\": \"tokenPx\",\n                                  \"overrides\": null,\n                                  \"scope\": 9054,\n                                  \"stateVariable\": false,\n                                  \"storageLocation\": \"default\",\n                                  \"type\": \"uint256\",\n                                  \"value\": null,\n                                  \"visibility\": \"internal\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint256\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"id\": 9036,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"2490:7:36\"\n                                  }\n                                ],\n                                \"id\": 9037,\n                                \"name\": \"VariableDeclaration\",\n                                \"src\": \"2490:15:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"price\",\n                                      \"referencedDeclaration\": 7737,\n                                      \"type\": \"function (address) view external returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"contract BasePriceOracle\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_address_payable\",\n                                                  \"typeString\": \"address payable\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 7738,\n                                              \"type\": \"type(contract BasePriceOracle)\",\n                                              \"value\": \"BasePriceOracle\"\n                                            },\n                                            \"id\": 9038,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2508:15:36\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"sender\",\n                                              \"referencedDeclaration\": null,\n                                              \"type\": \"address payable\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": -15,\n                                                  \"type\": \"msg\",\n                                                  \"value\": \"msg\"\n                                                },\n                                                \"id\": 9039,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"2524:3:36\"\n                                              }\n                                            ],\n                                            \"id\": 9040,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"2524:10:36\"\n                                          }\n                                        ],\n                                        \"id\": 9041,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"2508:27:36\"\n                                      }\n                                    ],\n                                    \"id\": 9042,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2508:33:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9031,\n                                      \"type\": \"address\",\n                                      \"value\": \"ulToken\"\n                                    },\n                                    \"id\": 9043,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2542:7:36\"\n                                  }\n                                ],\n                                \"id\": 9044,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2508:42:36\"\n                              }\n                            ],\n                            \"id\": 9045,\n                            \"name\": \"VariableDeclarationStatement\",\n                            \"src\": \"2490:60:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"falseBody\": null\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9037,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"tokenPx\"\n                                    },\n                                    \"id\": 9046,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2567:7:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9008,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"minPx\"\n                                    },\n                                    \"id\": 9047,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2577:5:36\"\n                                  }\n                                ],\n                                \"id\": 9048,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"2567:15:36\"\n                              },\n                              {\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"=\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9008,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"minPx\"\n                                        },\n                                        \"id\": 9049,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2584:5:36\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9037,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"tokenPx\"\n                                        },\n                                        \"id\": 9050,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2592:7:36\"\n                                      }\n                                    ],\n                                    \"id\": 9051,\n                                    \"name\": \"Assignment\",\n                                    \"src\": \"2584:15:36\"\n                                  }\n                                ],\n                                \"id\": 9052,\n                                \"name\": \"ExpressionStatement\",\n                                \"src\": \"2584:15:36\"\n                              }\n                            ],\n                            \"id\": 9053,\n                            \"name\": \"IfStatement\",\n                            \"src\": \"2563:36:36\"\n                          }\n                        ],\n                        \"id\": 9054,\n                        \"name\": \"Block\",\n                        \"src\": \"2437:172:36\"\n                      }\n                    ],\n                    \"id\": 9055,\n                    \"name\": \"ForStatement\",\n                    \"src\": \"2405:204:36\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_2063429c0417fda341efb05044277300bf24fdb0790beeda1fd79d40f2ab20ca\",\n                                  \"typeString\": \"literal_string \\\"No minimum underlying token price found.\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 9056,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2619:7:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"!=\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9008,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"minPx\"\n                                },\n                                \"id\": 9057,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2627:5:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_minus_1_by_1\",\n                                          \"typeString\": \"int_const -1\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"uint256\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 9058,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"2636:7:36\"\n                                      }\n                                    ],\n                                    \"id\": 9059,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"2636:7:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"-\",\n                                      \"prefix\": true,\n                                      \"type\": \"int_const -1\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"31\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 1\",\n                                          \"value\": \"1\"\n                                        },\n                                        \"id\": 9060,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"2645:1:36\"\n                                      }\n                                    ],\n                                    \"id\": 9061,\n                                    \"name\": \"UnaryOperation\",\n                                    \"src\": \"2644:2:36\"\n                                  }\n                                ],\n                                \"id\": 9062,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2636:11:36\"\n                              }\n                            ],\n                            \"id\": 9063,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"2627:20:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"4e6f206d696e696d756d20756e6465726c79696e6720746f6b656e20707269636520666f756e642e\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"No minimum underlying token price found.\\\"\",\n                              \"value\": \"No minimum underlying token price found.\"\n                            },\n                            \"id\": 9064,\n                            \"name\": \"Literal\",\n                            \"src\": \"2649:42:36\"\n                          }\n                        ],\n                        \"id\": 9065,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2619:73:36\"\n                      }\n                    ],\n                    \"id\": 9066,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2619:73:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 8981\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                  \"typeString\": \"int_const 1000000000000000000\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9008,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"minPx\"\n                                        },\n                                        \"id\": 9067,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2714:5:36\"\n                                      }\n                                    ],\n                                    \"id\": 9068,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2714:9:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"get_virtual_price\",\n                                          \"referencedDeclaration\": 6048,\n                                          \"type\": \"function () view external returns (uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"contract ICurvePool\",\n                                              \"type_conversion\": true\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_address\",\n                                                      \"typeString\": \"address\"\n                                                    }\n                                                  ],\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 6049,\n                                                  \"type\": \"type(contract ICurvePool)\",\n                                                  \"value\": \"ICurvePool\"\n                                                },\n                                                \"id\": 9069,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"2724:10:36\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 8983,\n                                                  \"type\": \"address\",\n                                                  \"value\": \"pool\"\n                                                },\n                                                \"id\": 9070,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"2735:4:36\"\n                                              }\n                                            ],\n                                            \"id\": 9071,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"2724:16:36\"\n                                          }\n                                        ],\n                                        \"id\": 9072,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"2724:34:36\"\n                                      }\n                                    ],\n                                    \"id\": 9073,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2724:36:36\"\n                                  }\n                                ],\n                                \"id\": 9074,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2714:47:36\"\n                              }\n                            ],\n                            \"id\": 9075,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2714:51:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 9076,\n                            \"name\": \"Literal\",\n                            \"src\": \"2766:4:36\"\n                          }\n                        ],\n                        \"id\": 9077,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2714:57:36\"\n                      }\n                    ],\n                    \"id\": 9078,\n                    \"name\": \"Return\",\n                    \"src\": \"2707:64:36\"\n                  }\n                ],\n                \"id\": 9079,\n                \"name\": \"Block\",\n                \"src\": \"2158:656:36\"\n              }\n            ],\n            \"id\": 9080,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"2088:726:36\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"7b103999\",\n              \"mutability\": \"constant\",\n              \"name\": \"registry\",\n              \"overrides\": null,\n              \"scope\": 9182,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"contract ICurveRegistry\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"ICurveRegistry\",\n                  \"referencedDeclaration\": 6075,\n                  \"type\": \"contract ICurveRegistry\"\n                },\n                \"id\": 9082,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"2873:14:36\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"isStructConstructorCall\": false,\n                  \"lValueRequested\": false,\n                  \"names\": [null],\n                  \"tryCall\": false,\n                  \"type\": \"contract ICurveRegistry\",\n                  \"type_conversion\": true\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"overloadedDeclarations\": [null],\n                      \"referencedDeclaration\": 6075,\n                      \"type\": \"type(contract ICurveRegistry)\",\n                      \"value\": \"ICurveRegistry\"\n                    },\n                    \"id\": 9083,\n                    \"name\": \"Identifier\",\n                    \"src\": \"2915:14:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": null,\n                      \"hexvalue\": \"307837443836343436644462363039654430463566383638344163463330333830613335366232423463\",\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"subdenomination\": null,\n                      \"token\": \"number\",\n                      \"type\": \"address payable\",\n                      \"value\": \"0x7D86446dDb609eD0F5f8684AcF30380a356b2B4c\"\n                    },\n                    \"id\": 9084,\n                    \"name\": \"Literal\",\n                    \"src\": \"2930:42:36\"\n                  }\n                ],\n                \"id\": 9085,\n                \"name\": \"FunctionCall\",\n                \"src\": \"2915:58:36\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev The Curve registry.\"\n                },\n                \"id\": 9081,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"2822:45:36\"\n              }\n            ],\n            \"id\": 9086,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"2873:100:36\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"01eadec4\",\n              \"mutability\": \"mutable\",\n              \"name\": \"underlyingTokens\",\n              \"overrides\": null,\n              \"scope\": 9182,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"mapping(address => address[])\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"type\": \"mapping(address => address[])\"\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"name\": \"address\",\n                      \"type\": \"address\"\n                    },\n                    \"id\": 9088,\n                    \"name\": \"ElementaryTypeName\",\n                    \"src\": \"3082:7:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"length\": null,\n                      \"type\": \"address[]\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 9089,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"3093:7:36\"\n                      }\n                    ],\n                    \"id\": 9090,\n                    \"name\": \"ArrayTypeName\",\n                    \"src\": \"3093:9:36\"\n                  }\n                ],\n                \"id\": 9091,\n                \"name\": \"Mapping\",\n                \"src\": \"3074:29:36\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Maps Curve LP token addresses to underlying token addresses.\"\n                },\n                \"id\": 9087,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"2982:86:36\"\n              }\n            ],\n            \"id\": 9092,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"3074:53:36\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"988b1fa7\",\n              \"mutability\": \"mutable\",\n              \"name\": \"poolOf\",\n              \"overrides\": null,\n              \"scope\": 9182,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"mapping(address => address)\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"type\": \"mapping(address => address)\"\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"name\": \"address\",\n                      \"type\": \"address\"\n                    },\n                    \"id\": 9094,\n                    \"name\": \"ElementaryTypeName\",\n                    \"src\": \"3224:7:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"name\": \"address\",\n                      \"stateMutability\": \"nonpayable\",\n                      \"type\": \"address\"\n                    },\n                    \"id\": 9095,\n                    \"name\": \"ElementaryTypeName\",\n                    \"src\": \"3235:7:36\"\n                  }\n                ],\n                \"id\": 9096,\n                \"name\": \"Mapping\",\n                \"src\": \"3216:27:36\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Maps Curve LP token addresses to pool addresses.\"\n                },\n                \"id\": 9093,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"3136:74:36\"\n              }\n            ],\n            \"id\": 9097,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"3216:41:36\"\n          },\n          {\n            \"attributes\": {\n              \"functionSelector\": \"abd90846\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"registerPool\",\n              \"overrides\": null,\n              \"scope\": 9182,\n              \"stateMutability\": \"nonpayable\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Register the pool given LP token address and set the pool info.\\n @param lpToken LP token to find the corresponding pool.\"\n                },\n                \"id\": 9098,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"3266:153:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"lpToken\",\n                      \"overrides\": null,\n                      \"scope\": 9181,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 9099,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"3447:7:36\"\n                      }\n                    ],\n                    \"id\": 9100,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"3447:15:36\"\n                  }\n                ],\n                \"id\": 9101,\n                \"name\": \"ParameterList\",\n                \"src\": \"3446:17:36\"\n              },\n              {\n                \"attributes\": {\n                  \"parameters\": [null]\n                },\n                \"children\": [],\n                \"id\": 9102,\n                \"name\": \"ParameterList\",\n                \"src\": \"3473:0:36\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9104]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"pool\",\n                          \"overrides\": null,\n                          \"scope\": 9180,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 9103,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3484:7:36\"\n                          }\n                        ],\n                        \"id\": 9104,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3484:12:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"address\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9097,\n                              \"type\": \"mapping(address => address)\",\n                              \"value\": \"poolOf\"\n                            },\n                            \"id\": 9105,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3499:6:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9100,\n                              \"type\": \"address\",\n                              \"value\": \"lpToken\"\n                            },\n                            \"id\": 9106,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3506:7:36\"\n                          }\n                        ],\n                        \"id\": 9107,\n                        \"name\": \"IndexAccess\",\n                        \"src\": \"3499:15:36\"\n                      }\n                    ],\n                    \"id\": 9108,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3484:30:36\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_fdef014ad10efeb962488cd9b20cf6db7d0a8078cd840803ec6ec6d65fb46414\",\n                                  \"typeString\": \"literal_string \\\"This LP token is already registered.\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 9109,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3525:7:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"==\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9104,\n                                  \"type\": \"address\",\n                                  \"value\": \"pool\"\n                                },\n                                \"id\": 9110,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3533:4:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address payable\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_0_by_1\",\n                                          \"typeString\": \"int_const 0\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 9111,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"3541:7:36\"\n                                      }\n                                    ],\n                                    \"id\": 9112,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"3541:7:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 9113,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"3549:1:36\"\n                                  }\n                                ],\n                                \"id\": 9114,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3541:10:36\"\n                              }\n                            ],\n                            \"id\": 9115,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3533:18:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"54686973204c5020746f6b656e20697320616c726561647920726567697374657265642e\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"This LP token is already registered.\\\"\",\n                              \"value\": \"This LP token is already registered.\"\n                            },\n                            \"id\": 9116,\n                            \"name\": \"Literal\",\n                            \"src\": \"3553:38:36\"\n                          }\n                        ],\n                        \"id\": 9117,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3525:67:36\"\n                      }\n                    ],\n                    \"id\": 9118,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3525:67:36\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"address\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9104,\n                              \"type\": \"address\",\n                              \"value\": \"pool\"\n                            },\n                            \"id\": 9119,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3603:4:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"get_pool_from_lp_token\",\n                                  \"referencedDeclaration\": 6074,\n                                  \"type\": \"function (address) view external returns (address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9086,\n                                      \"type\": \"contract ICurveRegistry\",\n                                      \"value\": \"registry\"\n                                    },\n                                    \"id\": 9120,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3610:8:36\"\n                                  }\n                                ],\n                                \"id\": 9121,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"3610:31:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9100,\n                                  \"type\": \"address\",\n                                  \"value\": \"lpToken\"\n                                },\n                                \"id\": 9122,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3642:7:36\"\n                              }\n                            ],\n                            \"id\": 9123,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3610:40:36\"\n                          }\n                        ],\n                        \"id\": 9124,\n                        \"name\": \"Assignment\",\n                        \"src\": \"3603:47:36\"\n                      }\n                    ],\n                    \"id\": 9125,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3603:47:36\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_9459c4bdc77b7082b19d168d8c1aaea3c663bd13191f951d54849545d842dad7\",\n                                  \"typeString\": \"literal_string \\\"No corresponding pool found for this LP token in the Curve registry.\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 9126,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3661:7:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"!=\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9104,\n                                  \"type\": \"address\",\n                                  \"value\": \"pool\"\n                                },\n                                \"id\": 9127,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3669:4:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address payable\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_0_by_1\",\n                                          \"typeString\": \"int_const 0\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 9128,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"3677:7:36\"\n                                      }\n                                    ],\n                                    \"id\": 9129,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"3677:7:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 9130,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"3685:1:36\"\n                                  }\n                                ],\n                                \"id\": 9131,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3677:10:36\"\n                              }\n                            ],\n                            \"id\": 9132,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3669:18:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"4e6f20636f72726573706f6e64696e6720706f6f6c20666f756e6420666f722074686973204c5020746f6b656e20696e207468652043757276652072656769737472792e\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"No corresponding pool found for this LP token in the Curve registry.\\\"\",\n                              \"value\": \"No corresponding pool found for this LP token in the Curve registry.\"\n                            },\n                            \"id\": 9133,\n                            \"name\": \"Literal\",\n                            \"src\": \"3689:70:36\"\n                          }\n                        ],\n                        \"id\": 9134,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3661:99:36\"\n                      }\n                    ],\n                    \"id\": 9135,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3661:99:36\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"address\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": true,\n                              \"type\": \"address\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9097,\n                                  \"type\": \"mapping(address => address)\",\n                                  \"value\": \"poolOf\"\n                                },\n                                \"id\": 9136,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3771:6:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9100,\n                                  \"type\": \"address\",\n                                  \"value\": \"lpToken\"\n                                },\n                                \"id\": 9137,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3778:7:36\"\n                              }\n                            ],\n                            \"id\": 9138,\n                            \"name\": \"IndexAccess\",\n                            \"src\": \"3771:15:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9104,\n                              \"type\": \"address\",\n                              \"value\": \"pool\"\n                            },\n                            \"id\": 9139,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3789:4:36\"\n                          }\n                        ],\n                        \"id\": 9140,\n                        \"name\": \"Assignment\",\n                        \"src\": \"3771:22:36\"\n                      }\n                    ],\n                    \"id\": 9141,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3771:22:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9143]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"n\",\n                          \"overrides\": null,\n                          \"scope\": 9180,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9142,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3804:4:36\"\n                          }\n                        ],\n                        \"id\": 9143,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3804:6:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"get_n_coins\",\n                              \"referencedDeclaration\": 6058,\n                              \"type\": \"function (address) view external returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9086,\n                                  \"type\": \"contract ICurveRegistry\",\n                                  \"value\": \"registry\"\n                                },\n                                \"id\": 9144,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3813:8:36\"\n                              }\n                            ],\n                            \"id\": 9145,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"3813:20:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9104,\n                              \"type\": \"address\",\n                              \"value\": \"pool\"\n                            },\n                            \"id\": 9146,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3834:4:36\"\n                          }\n                        ],\n                        \"id\": 9147,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3813:26:36\"\n                      }\n                    ],\n                    \"id\": 9148,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3804:35:36\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9154]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"tokens\",\n                          \"overrides\": null,\n                          \"scope\": 9180,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"memory\",\n                          \"type\": \"address[8]\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"type\": \"address[8]\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"address\",\n                                  \"type\": \"address\"\n                                },\n                                \"id\": 9152,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"3850:7:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"38\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 8\",\n                                  \"value\": \"8\"\n                                },\n                                \"id\": 9151,\n                                \"name\": \"Literal\",\n                                \"src\": \"3858:1:36\"\n                              }\n                            ],\n                            \"id\": 9153,\n                            \"name\": \"ArrayTypeName\",\n                            \"src\": \"3850:10:36\"\n                          }\n                        ],\n                        \"id\": 9154,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3850:24:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address[8] memory\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"get_coins\",\n                              \"referencedDeclaration\": 6067,\n                              \"type\": \"function (address) view external returns (address[8] memory)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9086,\n                                  \"type\": \"contract ICurveRegistry\",\n                                  \"value\": \"registry\"\n                                },\n                                \"id\": 9155,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3877:8:36\"\n                              }\n                            ],\n                            \"id\": 9156,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"3877:18:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9104,\n                              \"type\": \"address\",\n                              \"value\": \"pool\"\n                            },\n                            \"id\": 9157,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3896:4:36\"\n                          }\n                        ],\n                        \"id\": 9158,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3877:24:36\"\n                      }\n                    ],\n                    \"id\": 9159,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3850:51:36\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"assignments\": [9161]\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"constant\": false,\n                              \"mutability\": \"mutable\",\n                              \"name\": \"i\",\n                              \"overrides\": null,\n                              \"scope\": 9179,\n                              \"stateVariable\": false,\n                              \"storageLocation\": \"default\",\n                              \"type\": \"uint256\",\n                              \"value\": null,\n                              \"visibility\": \"internal\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"uint256\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"id\": 9160,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"3917:7:36\"\n                              }\n                            ],\n                            \"id\": 9161,\n                            \"name\": \"VariableDeclaration\",\n                            \"src\": \"3917:9:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 0\",\n                              \"value\": \"0\"\n                            },\n                            \"id\": 9162,\n                            \"name\": \"Literal\",\n                            \"src\": \"3929:1:36\"\n                          }\n                        ],\n                        \"id\": 9163,\n                        \"name\": \"VariableDeclarationStatement\",\n                        \"src\": \"3917:13:36\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"<\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9161,\n                              \"type\": \"uint256\",\n                              \"value\": \"i\"\n                            },\n                            \"id\": 9164,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3932:1:36\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9143,\n                              \"type\": \"uint256\",\n                              \"value\": \"n\"\n                            },\n                            \"id\": 9165,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3936:1:36\"\n                          }\n                        ],\n                        \"id\": 9166,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"3932:5:36\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"++\",\n                              \"prefix\": false,\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9161,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"i\"\n                                },\n                                \"id\": 9167,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3939:1:36\"\n                              }\n                            ],\n                            \"id\": 9168,\n                            \"name\": \"UnaryOperation\",\n                            \"src\": \"3939:3:36\"\n                          }\n                        ],\n                        \"id\": 9169,\n                        \"name\": \"ExpressionStatement\",\n                        \"src\": \"3939:3:36\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"tuple()\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"push\",\n                                  \"referencedDeclaration\": null,\n                                  \"type\": \"function (address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": true,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"address[] storage ref\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9092,\n                                          \"type\": \"mapping(address => address[] storage ref)\",\n                                          \"value\": \"underlyingTokens\"\n                                        },\n                                        \"id\": 9170,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3944:16:36\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9100,\n                                          \"type\": \"address\",\n                                          \"value\": \"lpToken\"\n                                        },\n                                        \"id\": 9171,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3961:7:36\"\n                                      }\n                                    ],\n                                    \"id\": 9172,\n                                    \"name\": \"IndexAccess\",\n                                    \"src\": \"3944:25:36\"\n                                  }\n                                ],\n                                \"id\": 9173,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"3944:30:36\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": true,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"address\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9154,\n                                      \"type\": \"address[8] memory\",\n                                      \"value\": \"tokens\"\n                                    },\n                                    \"id\": 9174,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3975:6:36\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9161,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"i\"\n                                    },\n                                    \"id\": 9175,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3982:1:36\"\n                                  }\n                                ],\n                                \"id\": 9176,\n                                \"name\": \"IndexAccess\",\n                                \"src\": \"3975:9:36\"\n                              }\n                            ],\n                            \"id\": 9177,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3944:41:36\"\n                          }\n                        ],\n                        \"id\": 9178,\n                        \"name\": \"ExpressionStatement\",\n                        \"src\": \"3944:41:36\"\n                      }\n                    ],\n                    \"id\": 9179,\n                    \"name\": \"ForStatement\",\n                    \"src\": \"3912:73:36\"\n                  }\n                ],\n                \"id\": 9180,\n                \"name\": \"Block\",\n                \"src\": \"3473:520:36\"\n              }\n            ],\n            \"id\": 9181,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"3425:568:36\"\n          }\n        ],\n        \"id\": 9182,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"733:3263:36\"\n      }\n    ],\n    \"id\": 9183,\n    \"name\": \"SourceUnit\",\n    \"src\": \"0:3998:36\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.142Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Implements the PriceOracle interface for Fuse pools (and Compound v2).\",\n        \"params\": {\n          \"cToken\": \"The cToken address for price retrieval.\"\n        },\n        \"returns\": {\n          \"_0\": \"Price denominated in ETH, with 18 decimals, for the given cToken address.\"\n        }\n      },\n      \"price(address)\": {\n        \"params\": {\n          \"underlying\": \"The underlying token address for which to get the price (set to zero address for ETH).\"\n        },\n        \"returns\": {\n          \"_0\": \"Price denominated in ETH (scaled by 1e18).\"\n        }\n      },\n      \"registerPool(address)\": {\n        \"details\": \"Register the pool given LP token address and set the pool info.\",\n        \"params\": {\n          \"lpToken\": \"LP token to find the corresponding pool.\"\n        }\n      }\n    },\n    \"stateVariables\": {\n      \"poolOf\": {\n        \"details\": \"Maps Curve LP token addresses to pool addresses.\"\n      },\n      \"registry\": {\n        \"details\": \"The Curve registry.\"\n      },\n      \"underlyingTokens\": {\n        \"details\": \"Maps Curve LP token addresses to underlying token addresses.\"\n      }\n    },\n    \"title\": \"CurveLpTokenPriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"notice\": \"Get the underlying price of a cToken.\"\n      },\n      \"price(address)\": {\n        \"notice\": \"Get the LP token price price for an underlying token address.\"\n      }\n    },\n    \"notice\": \"CurveLpTokenPriceOracle is a price oracle for Curve LP tokens.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/Keep3rPriceOracle.json",
    "content": "{\n  \"contractName\": \"Keep3rPriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"sushiSwap\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MAX_TWAP_TIME\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"MIN_TWAP_TIME\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WETH_ADDRESS\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"rootOracle\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract Keep3rV1Oracle\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"uniswapV2Factory\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract IUniswapV2Factory\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"underlying\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"price\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"sushiSwap\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MAX_TWAP_TIME\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"MIN_TWAP_TIME\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WETH_ADDRESS\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"rootOracle\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract Keep3rV1Oracle\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"uniswapV2Factory\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract IUniswapV2Factory\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements `PriceOracle`.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Constructor that sets the Keep3rV1Oracle or SushiswapV1Oracle.\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`). Prices are expected to be scaled by `10 ** (36 - underlyingDecimals)`.\\\"},\\\"price(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\\\"}},\\\"stateVariables\\\":{\\\"MAX_TWAP_TIME\\\":{\\\"details\\\":\\\"Maximum TWAP interval.\\\"},\\\"MIN_TWAP_TIME\\\":{\\\"details\\\":\\\"Minimum TWAP interval.\\\"},\\\"WETH_ADDRESS\\\":{\\\"details\\\":\\\"WETH token contract address.\\\"},\\\"rootOracle\\\":{\\\"details\\\":\\\"Keep3rV1Oracle token contract object.\\\"},\\\"uniswapV2Factory\\\":{\\\"details\\\":\\\"UniswapV2Factory contract address.\\\"}},\\\"title\\\":\\\"Keep3rPriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"notice\\\":\\\"Returns prices from `Keep3rV1Oracle` or `SushiswapV1Oracle`.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/Keep3rPriceOracle.sol\\\":\\\"Keep3rPriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/keep3r/Keep3rV1Oracle.sol\\\":{\\\"keccak256\\\":\\\"0xfdc4e44ae3e368aff381fe35b0629b98b420839d3a7a84a04a1aa3e56f4d7f34\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://05cd78190de0ac093f1017e6bb664b97b8d4cc2480ed6d8dbba81a510d84866f\\\",\\\"dweb:/ipfs/QmTNT1S9nriF2emcyrpGnF1Rc3w7CEbtrs8BR3xZDzAE3T\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Factory.sol\\\":{\\\"keccak256\\\":\\\"0x84be3de80873887ab7b27a8a13f38b6b66c2cb88ee8eff0515a5df1237f54ed8\\\",\\\"urls\\\":[\\\"bzz-raw://6605e86a5e9602acb30a770b414ffd01d300eecc69254f7645efd77c4b0105d9\\\",\\\"dweb:/ipfs/QmfK1Jt7XmiQ2FmagJ4JfrktU3BM8aiPP42ajn3CXxnF58\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Pair.sol\\\":{\\\"keccak256\\\":\\\"0x32f2ac1a04860ddedb880798a86ebb9b672007a32088a0a26c4f2d84991dff31\\\",\\\"license\\\":\\\"GPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://fa9242659aea58bca561a8d1d1aeb435b70da1fab187518457929f9237e8f36b\\\",\\\"dweb:/ipfs/QmVkafRYyXjEmoii7k8aYzqWwoPPpYe4nE8c78aAERKpMC\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xb203a3fb12dc594c98df03dc2ffa5687383785f30d3508e2c72546cc8c356110\\\",\\\"urls\\\":[\\\"bzz-raw://7a4556b82d5476ce90614ba9cfbf77e170f55f77d39d994b818efcb369e06f6a\\\",\\\"dweb:/ipfs/QmYE6ijaeGgXErf28UGYAvbBrttEbKNw4szB4uJ163yNHv\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/Keep3rPriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x48f516faf0821485b0e250baa80822c7c3b5218ca92362efdceccf10fea8b5a1\\\",\\\"urls\\\":[\\\"bzz-raw://827fcacb55dbeb5b7df054f9d0d95469d4b7d8ecc421d8441f8e5e85b93887da\\\",\\\"dweb:/ipfs/QmYTjS9g6a77XAv9iE5Bv3PNjxvPFSMVZXa7WCznkTWwxv\\\"]},\\\"@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\\\",\\\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\\\",\\\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x9e71cf53c2ee5c9e4f183e168028fc208560493aaf48668bca0981bb2c8359c2\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7cb9d29f7bc76b077649ccef2043e1492a462afcb2410f443e63233f206a95dd\\\",\\\"dweb:/ipfs/QmRDXEro4hh2E6rTUAWvBkHzivAS1TBmtSLP1mRGAHVnnL\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60c060405234801561001057600080fd5b506040516110603803806110608339818101604052602081101561003357600080fd5b5051600081610056577373353801921417f465377c8d898c6f4c0270282c61006c565b73f67ab1c914dee06ba0f264031885ea7b276a7cda5b9050806001600160a01b03166080816001600160a01b031660601b81525050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156100c457600080fd5b505afa1580156100d8573d6000803e3d6000fd5b505050506040513d60208110156100ee57600080fd5b5051606081811b6001600160601b03191660a052608051901c92506001600160a01b03169050610f0c6101546000398061014452806103a15250806101815280610585528061066f528061077b52806108ae52806109985280610aa45250610f0c6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063aea910781161005b578063aea91078146100c8578063af8a9ba5146100ee578063e3cb23a5146100f6578063fc57d4df146100fe5761007d565b8063040141e51461008257806309cd510e146100a657806359d0f713146100c0575b600080fd5b61008a610124565b604080516001600160a01b039092168252519081900360200190f35b6100ae61013c565b60408051918252519081900360200190f35b61008a610142565b6100ae600480360360208110156100de57600080fd5b50356001600160a01b0316610166565b6100ae610179565b61008a61017f565b6100ae6004803603602081101561011457600080fd5b50356001600160a01b03166101a3565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b610e1081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006101718261032c565b90505b919050565b61038481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101de57600080fd5b505afa1580156101f2573d6000803e3d6000fd5b505050506040513d602081101561020857600080fd5b50511561021e5750670de0b6b3a7640000610174565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561025957600080fd5b505afa15801561026d573d6000803e3d6000fd5b505050506040513d602081101561028357600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0384169163313ce567916004808301926020929190829003018186803b1580156102cb57600080fd5b505afa1580156102df573d6000803e3d6000fd5b505050506040513d60208110156102f557600080fd5b505160ff16600a0a90506103248161031e670de0b6b3a76400006103188661032c565b906104dc565b9061053e565b949350505050565b60006001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214156103625750670de0b6b3a7640000610174565b6040805163e6a4390560e01b81526001600160a01b03848116600483015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602483015291516000927f0000000000000000000000000000000000000000000000000000000000000000169163e6a43905916044808301926020929190829003018186803b1580156103e757600080fd5b505afa1580156103fb573d6000803e3d6000fd5b505050506040513d602081101561041157600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0386169163313ce567916004808301926020929190829003018186803b15801561045957600080fd5b505afa15801561046d573d6000803e3d6000fd5b505050506040513d602081101561048357600080fd5b505160ff16600a0a905061032467010000000000000061031e836103188373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b038b16106104d3576104ce88610580565b61031e565b61031e886108a9565b6000826104eb57506000610538565b828202828482816104f857fe5b04146105355760405162461bcd60e51b8152600401808060200182810382526021815260200180610eb66021913960400191505060405180910390fd5b90505b92915050565b600061053583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610bb7565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381bfb885846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156105f057600080fd5b505afa158015610604573d6000803e3d6000fd5b505050506040513d602081101561061a57600080fd5b505190508061066a576040805162461bcd60e51b81526020600482015260176024820152763737903632b733ba3416989037b139b2b93b30ba34b7b760491b604482015290519081900360640190fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630245996686600186036040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060606040518083038186803b1580156106e557600080fd5b505afa1580156106f9573d6000803e3d6000fd5b505050506040513d606081101561070f57600080fd5b508051604090910151909250905061038319420182111561082a5760018311610779576040805162461bcd60e51b81526020600482015260176024820152763737903632b733ba3416991037b139b2b93b30ba34b7b760491b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630245996686600286036040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060606040518083038186803b1580156107f157600080fd5b505afa158015610805573d6000803e3d6000fd5b505050506040513d606081101561081b57600080fd5b50805160409091015190925090505b4282900361038481108015906108425750610e108111155b610883576040805162461bcd60e51b815260206004820152600d60248201526c62616420545741502074696d6560981b604482015290519081900360640190fd5b600061088e87610c59565b90508342038382038161089d57fe5b04979650505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381bfb885846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561091957600080fd5b505afa15801561092d573d6000803e3d6000fd5b505050506040513d602081101561094357600080fd5b5051905080610993576040805162461bcd60e51b81526020600482015260176024820152763737903632b733ba3416989037b139b2b93b30ba34b7b760491b604482015290519081900360640190fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630245996686600186036040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060606040518083038186803b158015610a0e57600080fd5b505afa158015610a22573d6000803e3d6000fd5b505050506040513d6060811015610a3857600080fd5b5080516020909101519092509050610383194201821115610b535760018311610aa2576040805162461bcd60e51b81526020600482015260176024820152763737903632b733ba3416991037b139b2b93b30ba34b7b760491b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630245996686600286036040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060606040518083038186803b158015610b1a57600080fd5b505afa158015610b2e573d6000803e3d6000fd5b505050506040513d6060811015610b4457600080fd5b50805160209091015190925090505b428290036103848110801590610b6b5750610e108111155b610bac576040805162461bcd60e51b815260206004820152600d60248201526c62616420545741502074696d6560981b604482015290519081900360640190fd5b600061088e87610d91565b60008183610c435760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c08578181015183820152602001610bf0565b50505050905090810190601f168015610c355780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610c4f57fe5b0495945050505050565b600080429050826001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9857600080fd5b505afa158015610cac573d6000803e3d6000fd5b505050506040513d6020811015610cc257600080fd5b505160408051630240bc6b60e21b81529051919350600091829182916001600160a01b03881691630902f1ac916004808301926060929190829003018186803b158015610d0e57600080fd5b505afa158015610d22573d6000803e3d6000fd5b505050506040513d6060811015610d3857600080fd5b50805160208201516040909201516001600160701b03918216955091169250905063ffffffff80821690851614610d885780840363ffffffff811683607086901b81610d8057fe5b040286019550505b50505050919050565b600080429050826001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd057600080fd5b505afa158015610de4573d6000803e3d6000fd5b505050506040513d6020811015610dfa57600080fd5b505160408051630240bc6b60e21b81529051919350600091829182916001600160a01b03881691630902f1ac916004808301926060929190829003018186803b158015610e4657600080fd5b505afa158015610e5a573d6000803e3d6000fd5b505050506040513d6060811015610e7057600080fd5b50805160208201516040909201516001600160701b03918216955091169250905063ffffffff81164214610d885780840363ffffffff811684607085901b81610d8057fefe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220792fbe5a96c26d9b5024fd50a2500120c373deb53572fc95e501e4430ba0c65764736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063aea910781161005b578063aea91078146100c8578063af8a9ba5146100ee578063e3cb23a5146100f6578063fc57d4df146100fe5761007d565b8063040141e51461008257806309cd510e146100a657806359d0f713146100c0575b600080fd5b61008a610124565b604080516001600160a01b039092168252519081900360200190f35b6100ae61013c565b60408051918252519081900360200190f35b61008a610142565b6100ae600480360360208110156100de57600080fd5b50356001600160a01b0316610166565b6100ae610179565b61008a61017f565b6100ae6004803603602081101561011457600080fd5b50356001600160a01b03166101a3565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b610e1081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006101718261032c565b90505b919050565b61038481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101de57600080fd5b505afa1580156101f2573d6000803e3d6000fd5b505050506040513d602081101561020857600080fd5b50511561021e5750670de0b6b3a7640000610174565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561025957600080fd5b505afa15801561026d573d6000803e3d6000fd5b505050506040513d602081101561028357600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0384169163313ce567916004808301926020929190829003018186803b1580156102cb57600080fd5b505afa1580156102df573d6000803e3d6000fd5b505050506040513d60208110156102f557600080fd5b505160ff16600a0a90506103248161031e670de0b6b3a76400006103188661032c565b906104dc565b9061053e565b949350505050565b60006001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc214156103625750670de0b6b3a7640000610174565b6040805163e6a4390560e01b81526001600160a01b03848116600483015273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2602483015291516000927f0000000000000000000000000000000000000000000000000000000000000000169163e6a43905916044808301926020929190829003018186803b1580156103e757600080fd5b505afa1580156103fb573d6000803e3d6000fd5b505050506040513d602081101561041157600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0386169163313ce567916004808301926020929190829003018186803b15801561045957600080fd5b505afa15801561046d573d6000803e3d6000fd5b505050506040513d602081101561048357600080fd5b505160ff16600a0a905061032467010000000000000061031e836103188373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b038b16106104d3576104ce88610580565b61031e565b61031e886108a9565b6000826104eb57506000610538565b828202828482816104f857fe5b04146105355760405162461bcd60e51b8152600401808060200182810382526021815260200180610eb66021913960400191505060405180910390fd5b90505b92915050565b600061053583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610bb7565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381bfb885846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156105f057600080fd5b505afa158015610604573d6000803e3d6000fd5b505050506040513d602081101561061a57600080fd5b505190508061066a576040805162461bcd60e51b81526020600482015260176024820152763737903632b733ba3416989037b139b2b93b30ba34b7b760491b604482015290519081900360640190fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630245996686600186036040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060606040518083038186803b1580156106e557600080fd5b505afa1580156106f9573d6000803e3d6000fd5b505050506040513d606081101561070f57600080fd5b508051604090910151909250905061038319420182111561082a5760018311610779576040805162461bcd60e51b81526020600482015260176024820152763737903632b733ba3416991037b139b2b93b30ba34b7b760491b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630245996686600286036040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060606040518083038186803b1580156107f157600080fd5b505afa158015610805573d6000803e3d6000fd5b505050506040513d606081101561081b57600080fd5b50805160409091015190925090505b4282900361038481108015906108425750610e108111155b610883576040805162461bcd60e51b815260206004820152600d60248201526c62616420545741502074696d6560981b604482015290519081900360640190fd5b600061088e87610c59565b90508342038382038161089d57fe5b04979650505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166381bfb885846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561091957600080fd5b505afa15801561092d573d6000803e3d6000fd5b505050506040513d602081101561094357600080fd5b5051905080610993576040805162461bcd60e51b81526020600482015260176024820152763737903632b733ba3416989037b139b2b93b30ba34b7b760491b604482015290519081900360640190fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630245996686600186036040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060606040518083038186803b158015610a0e57600080fd5b505afa158015610a22573d6000803e3d6000fd5b505050506040513d6060811015610a3857600080fd5b5080516020909101519092509050610383194201821115610b535760018311610aa2576040805162461bcd60e51b81526020600482015260176024820152763737903632b733ba3416991037b139b2b93b30ba34b7b760491b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630245996686600286036040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060606040518083038186803b158015610b1a57600080fd5b505afa158015610b2e573d6000803e3d6000fd5b505050506040513d6060811015610b4457600080fd5b50805160209091015190925090505b428290036103848110801590610b6b5750610e108111155b610bac576040805162461bcd60e51b815260206004820152600d60248201526c62616420545741502074696d6560981b604482015290519081900360640190fd5b600061088e87610d91565b60008183610c435760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610c08578181015183820152602001610bf0565b50505050905090810190601f168015610c355780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610c4f57fe5b0495945050505050565b600080429050826001600160a01b0316635a3d54936040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9857600080fd5b505afa158015610cac573d6000803e3d6000fd5b505050506040513d6020811015610cc257600080fd5b505160408051630240bc6b60e21b81529051919350600091829182916001600160a01b03881691630902f1ac916004808301926060929190829003018186803b158015610d0e57600080fd5b505afa158015610d22573d6000803e3d6000fd5b505050506040513d6060811015610d3857600080fd5b50805160208201516040909201516001600160701b03918216955091169250905063ffffffff80821690851614610d885780840363ffffffff811683607086901b81610d8057fe5b040286019550505b50505050919050565b600080429050826001600160a01b0316635909c0d56040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd057600080fd5b505afa158015610de4573d6000803e3d6000fd5b505050506040513d6020811015610dfa57600080fd5b505160408051630240bc6b60e21b81529051919350600091829182916001600160a01b03881691630902f1ac916004808301926060929190829003018186803b158015610e4657600080fd5b505afa158015610e5a573d6000803e3d6000fd5b505050506040513d6060811015610e7057600080fd5b50805160208201516040909201516001600160701b03918216955091169250905063ffffffff81164214610d885780840363ffffffff811684607085901b81610d8057fefe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220792fbe5a96c26d9b5024fd50a2500120c373deb53572fc95e501e4430ba0c65764736f6c634300060c0033\",\n  \"immutableReferences\": {\n    \"9308\": [\n      {\n        \"length\": 32,\n        \"start\": 385\n      },\n      {\n        \"length\": 32,\n        \"start\": 1413\n      },\n      {\n        \"length\": 32,\n        \"start\": 1647\n      },\n      {\n        \"length\": 32,\n        \"start\": 1915\n      },\n      {\n        \"length\": 32,\n        \"start\": 2222\n      },\n      {\n        \"length\": 32,\n        \"start\": 2456\n      },\n      {\n        \"length\": 32,\n        \"start\": 2724\n      }\n    ],\n    \"9315\": [\n      {\n        \"length\": 32,\n        \"start\": 324\n      },\n      {\n        \"length\": 32,\n        \"start\": 929\n      }\n    ]\n  },\n  \"sourceMap\": \"1048:6343:38:-:0;;;1254:304;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1254:304:38;1301:26;1254:304;1345:99;;1402:42;1345:99;;;1357:42;1345:99;1301:144;;1469:11;-1:-1:-1;;;;;1456:24:38;;;-1:-1:-1;;;;;1456:24:38;;;;;;;1528:11;-1:-1:-1;;;;;1528:19:38;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1528:21:38;1491:59;;;;-1:-1:-1;;;;;;1491:59:38;;;1048:6343;;;;;-1:-1:-1;;;;;;1048:6343:38;;-1:-1:-1;1048:6343:38;;;;;;;;\",\n  \"deployedSourceMap\": \"1048:6343:38:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1746:81;;;:::i;:::-;;;;-1:-1:-1;;;;;1746:81:38;;;;;;;;;;;;;;2129:50;;;:::i;:::-;;;;;;;;;;;;;;;;1902:51;;;:::i;7271:117::-;;;;;;;;;;;;;;;;-1:-1:-1;7271:117:38;-1:-1:-1;;;;;7271:117:38;;:::i;2016:50::-;;;:::i;1635:42::-;;;:::i;6051:471::-;;;;;;;;;;;;;;;;-1:-1:-1;6051:471:38;-1:-1:-1;;;;;6051:471:38;;:::i;1746:81::-;1785:42;1746:81;:::o;2129:50::-;2169:10;2129:50;:::o;1902:51::-;;;:::o;7271:117::-;7338:4;7362:18;7369:10;7362:6;:18::i;:::-;7355:25;;7271:117;;;;:::o;2016:50::-;2056:10;2016:50;:::o;1635:42::-;;;:::o;6051:471::-;6126:4;6179:6;-1:-1:-1;;;;;6179:15:38;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6179:17:38;6175:34;;;-1:-1:-1;6205:4:38;6198:11;;6175:34;6269:18;6305:6;-1:-1:-1;;;;;6290:34:38;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6290:36:38;6414:39;;;-1:-1:-1;;;6414:39:38;;;;6290:36;;-1:-1:-1;6381:16:38;;-1:-1:-1;;;;;6414:37:38;;;;;:39;;;;;6290:36;;6414:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6414:39:38;6406:48;;6400:2;:54;;-1:-1:-1;6472:42:38;6400:54;6472:28;6495:4;6472:18;6479:10;6472:6;:18::i;:::-;:22;;:28::i;:::-;:32;;:42::i;:::-;6465:49;6051:471;-1:-1:-1;;;;6051:471:38:o;6627:532::-;6686:4;-1:-1:-1;;;;;6740:26:38;;1785:42;6740:26;6736:43;;;-1:-1:-1;6775:4:38;6768:11;;6736:43;6862:50;;;-1:-1:-1;;;6862:50:38;;-1:-1:-1;;;;;6862:50:38;;;;;;;1785:42;6862:50;;;;;;6847:12;;6862:16;:24;;;;:50;;;;;;;;;;;;;;:24;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6862:50:38;6956:39;;;-1:-1:-1;;;6956:39:38;;;;6862:50;;-1:-1:-1;6923:16:38;;-1:-1:-1;;;;;6956:37:38;;;;;:39;;;;;6862:50;;6956:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6956:39:38;6948:48;;6942:2;:54;;-1:-1:-1;7014:105:38;7111:7;7014:92;6942:54;7014:78;7111:7;1785:42;-1:-1:-1;;;;;7015:25:38;;;:63;;7062:16;7073:4;7062:10;:16::i;:::-;7015:63;;;7043:16;7054:4;7043:10;:16::i;2199:459:48:-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:48;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:1;-1:-1:-1;2199:459:48;;;;;:::o;3120:130::-;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;:3;:39::i;3514:758:38:-;3571:4;3588:11;3602:10;-1:-1:-1;;;;;3602:28:38;;3631:4;3602:34;;;;;;;;;;;;;-1:-1:-1;;;;;3602:34:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3602:34:38;;-1:-1:-1;3655:10:38;3647:46;;;;;-1:-1:-1;;;3647:46:38;;;;;;;;;;;;-1:-1:-1;;;3647:46:38;;;;;;;;;;;;;;;3705:13;3722:16;3742:10;-1:-1:-1;;;;;3742:23:38;;3766:4;3781:1;3772:6;:10;3742:41;;;;;;;;;;;;;-1:-1:-1;;;;;3742:41:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3742:41:38;;;;;;;;;-1:-1:-1;3742:41:38;-1:-1:-1;;;3809:3:38;:19;3798:30;;3794:193;;;3862:1;3853:6;:10;3845:46;;;;;-1:-1:-1;;;3845:46:38;;;;;;;;;;;;-1:-1:-1;;;3845:46:38;;;;;;;;;;;;;;;3934:10;-1:-1:-1;;;;;3934:23:38;;3958:4;3973:1;3964:6;:10;3934:41;;;;;;;;;;;;;-1:-1:-1;;;;;3934:41:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3934:41:38;;;;;;;;;-1:-1:-1;3934:41:38;-1:-1:-1;3794:193:38;4016:3;:14;;;2056:10;4049:28;;;;;:60;;;2169:10;4081:11;:28;;4049:60;4041:86;;;;;-1:-1:-1;;;4041:86:38;;;;;;;;;;;;-1:-1:-1;;;4041:86:38;;;;;;;;;;;;;;;4138:16;4157:20;4172:4;4157:14;:20::i;:::-;4138:39;;4232:8;4226:3;:14;4210:11;4196;:25;4195:46;;;;;;;3514:758;-1:-1:-1;;;;;;;3514:758:38:o;2468:::-;2525:4;2542:11;2556:10;-1:-1:-1;;;;;2556:28:38;;2585:4;2556:34;;;;;;;;;;;;;-1:-1:-1;;;;;2556:34:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2556:34:38;;-1:-1:-1;2609:10:38;2601:46;;;;;-1:-1:-1;;;2601:46:38;;;;;;;;;;;;-1:-1:-1;;;2601:46:38;;;;;;;;;;;;;;;2659:13;2674:16;2696:10;-1:-1:-1;;;;;2696:23:38;;2720:4;2735:1;2726:6;:10;2696:41;;;;;;;;;;;;;-1:-1:-1;;;;;2696:41:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2696:41:38;;;;;;;;;-1:-1:-1;2696:41:38;-1:-1:-1;;;2763:3:38;:19;2752:30;;2748:193;;;2816:1;2807:6;:10;2799:46;;;;;-1:-1:-1;;;2799:46:38;;;;;;;;;;;;-1:-1:-1;;;2799:46:38;;;;;;;;;;;;;;;2888:10;-1:-1:-1;;;;;2888:23:38;;2912:4;2927:1;2918:6;:10;2888:41;;;;;;;;;;;;;-1:-1:-1;;;;;2888:41:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2888:41:38;;;;;;;;;-1:-1:-1;2888:41:38;-1:-1:-1;2748:193:38;2970:3;:14;;;2056:10;3003:28;;;;;:60;;;2169:10;3035:11;:28;;3003:60;2995:86;;;;;-1:-1:-1;;;2995:86:38;;;;;;;;;;;;-1:-1:-1;;;2995:86:38;;;;;;;;;;;;;;;3092:16;3111:20;3126:4;3111:14;:20::i;3732:272:48:-;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:48:o;5338:505:38:-;5399:12;5424:15;5449:3;5424:29;;5489:4;-1:-1:-1;;;;;5474:41:38;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5474:43:38;5578:34;;;-1:-1:-1;;;5578:34:38;;;;5474:43;;-1:-1:-1;5529:13:38;;;;;;-1:-1:-1;;;;;5578:32:38;;;;;:34;;;;;;;;;;;;;;:32;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5578:34:38;;;;;;;;;;;-1:-1:-1;;;;;5528:84:38;;;;-1:-1:-1;5528:84:38;;;-1:-1:-1;5578:34:38;-1:-1:-1;5627:20:38;;;;;;;;5623:213;;5685:19;;;5753:48;;;5778:8;5771:3;5759:15;;;5778:8;5758:28;;;;;5753:48;5742:59;;;;5623:213;;5338:505;;;;;;;:::o;4555:500::-;4616:12;4641:15;4666:3;4641:29;;4706:4;-1:-1:-1;;;;;4691:41:38;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4691:43:38;4795:34;;;-1:-1:-1;;;4795:34:38;;;;4691:43;;-1:-1:-1;4746:13:38;;;;;;-1:-1:-1;;;;;4795:32:38;;;;;:34;;;;;;;;;;;;;;:32;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4795:34:38;;;;;;;;;;;-1:-1:-1;;;;;4745:84:38;;;;-1:-1:-1;4745:84:38;;;-1:-1:-1;4795:34:38;-1:-1:-1;4844:15:38;;;4856:3;4844:15;4840:208;;4897:19;;;4965:48;;;4990:8;4983:3;4971:15;;;4990:8;4970:28;;\",\n  \"source\": \"/**\\r\\n * COPYRIGHT © 2020 RARI CAPITAL, INC. ALL RIGHTS RESERVED.\\r\\n * No one is permitted to use the software for any purpose without the explicit permission of David Lucid of Rari Capital, Inc.\\r\\n * This license is liable to change at any time at the sole discretion of David Lucid of Rari Capital, Inc.\\r\\n */\\r\\n\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CToken.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"../external/keep3r/Keep3rV1Oracle.sol\\\";\\r\\n\\r\\nimport \\\"../external/uniswap/IUniswapV2Pair.sol\\\";\\r\\nimport \\\"../external/uniswap/IUniswapV2Factory.sol\\\";\\r\\n\\r\\nimport \\\"./BasePriceOracle.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title Keep3rPriceOracle\\r\\n * @notice Returns prices from `Keep3rV1Oracle` or `SushiswapV1Oracle`.\\r\\n * @dev Implements `PriceOracle`.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract Keep3rPriceOracle is PriceOracle, BasePriceOracle {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @dev Constructor that sets the Keep3rV1Oracle or SushiswapV1Oracle.\\r\\n     */\\r\\n    constructor (bool sushiSwap) public {\\r\\n        Keep3rV1Oracle _rootOracle = Keep3rV1Oracle(sushiSwap ? 0xf67Ab1c914deE06Ba0F264031885Ea7B276a7cDa : 0x73353801921417F465377c8d898c6f4C0270282C);\\r\\n        rootOracle = _rootOracle;\\r\\n        uniswapV2Factory = IUniswapV2Factory(_rootOracle.factory());\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Keep3rV1Oracle token contract object.\\r\\n     */\\r\\n    Keep3rV1Oracle immutable public rootOracle;\\r\\n\\r\\n    /**\\r\\n     * @dev WETH token contract address.\\r\\n     */\\r\\n    address constant public WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\\r\\n\\r\\n    /**\\r\\n     * @dev UniswapV2Factory contract address.\\r\\n     */\\r\\n    IUniswapV2Factory immutable public uniswapV2Factory;\\r\\n\\r\\n    /**\\r\\n     * @dev Minimum TWAP interval.\\r\\n     */\\r\\n    uint256 public constant MIN_TWAP_TIME = 15 minutes;\\r\\n\\r\\n    /**\\r\\n     * @dev Maximum TWAP interval.\\r\\n     */\\r\\n    uint256 public constant MAX_TWAP_TIME = 60 minutes;\\r\\n\\r\\n    /**\\r\\n     * @dev Return the TWAP value price0. Revert if TWAP time range is not within the threshold.\\r\\n     * Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\r\\n     * @param pair The pair to query for price0.\\r\\n     */\\r\\n    function price0TWAP(address pair) internal view returns (uint) {\\r\\n        uint length = rootOracle.observationLength(pair);\\r\\n        require(length > 0, 'no length-1 observation');\\r\\n        (uint lastTime, uint lastPx0Cumu, ) = rootOracle.observations(pair, length - 1);\\r\\n        if (lastTime > now - MIN_TWAP_TIME) {\\r\\n            require(length > 1, 'no length-2 observation');\\r\\n            (lastTime, lastPx0Cumu, ) = rootOracle.observations(pair, length - 2);\\r\\n        }\\r\\n        uint elapsedTime = now - lastTime;\\r\\n        require(elapsedTime >= MIN_TWAP_TIME && elapsedTime <= MAX_TWAP_TIME, 'bad TWAP time');\\r\\n        uint currPx0Cumu = currentPx0Cumu(pair);\\r\\n        return (currPx0Cumu - lastPx0Cumu) / (now - lastTime); // overflow is desired\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Return the TWAP value price1. Revert if TWAP time range is not within the threshold.\\r\\n     * Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\r\\n     * @param pair The pair to query for price1.\\r\\n     */\\r\\n    function price1TWAP(address pair) internal view returns (uint) {\\r\\n        uint length = rootOracle.observationLength(pair);\\r\\n        require(length > 0, 'no length-1 observation');\\r\\n        (uint lastTime, , uint lastPx1Cumu) = rootOracle.observations(pair, length - 1);\\r\\n        if (lastTime > now - MIN_TWAP_TIME) {\\r\\n            require(length > 1, 'no length-2 observation');\\r\\n            (lastTime, , lastPx1Cumu) = rootOracle.observations(pair, length - 2);\\r\\n        }\\r\\n        uint elapsedTime = now - lastTime;\\r\\n        require(elapsedTime >= MIN_TWAP_TIME && elapsedTime <= MAX_TWAP_TIME, 'bad TWAP time');\\r\\n        uint currPx1Cumu = currentPx1Cumu(pair);\\r\\n        return (currPx1Cumu - lastPx1Cumu) / (now - lastTime); // overflow is desired\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Return the current price0 cumulative value on Uniswap.\\r\\n     * Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\r\\n     * @param pair The uniswap pair to query for price0 cumulative value.\\r\\n     */\\r\\n    function currentPx0Cumu(address pair) internal view returns (uint px0Cumu) {\\r\\n        uint32 currTime = uint32(now);\\r\\n        px0Cumu = IUniswapV2Pair(pair).price0CumulativeLast();\\r\\n        (uint reserve0, uint reserve1, uint32 lastTime) = IUniswapV2Pair(pair).getReserves();\\r\\n        if (lastTime != now) {\\r\\n            uint32 timeElapsed = currTime - lastTime; // overflow is desired\\r\\n            px0Cumu += uint((reserve1 << 112) / reserve0) * timeElapsed; // overflow is desired\\r\\n        }\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Return the current price1 cumulative value on Uniswap.\\r\\n     * Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\r\\n     * @param pair The uniswap pair to query for price1 cumulative value.\\r\\n     */\\r\\n    function currentPx1Cumu(address pair) internal view returns (uint px1Cumu) {\\r\\n        uint32 currTime = uint32(now);\\r\\n        px1Cumu = IUniswapV2Pair(pair).price1CumulativeLast();\\r\\n        (uint reserve0, uint reserve1, uint32 lastTime) = IUniswapV2Pair(pair).getReserves();\\r\\n        if (lastTime != currTime) {\\r\\n            uint32 timeElapsed = currTime - lastTime; // overflow is desired\\r\\n            px1Cumu += uint((reserve0 << 112) / reserve1) * timeElapsed; // overflow is desired\\r\\n        }\\r\\n    }\\r\\n    \\r\\n    /**\\r\\n     * @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\r\\n     * Prices are expected to be scaled by `10 ** (36 - underlyingDecimals)`.\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        // Return 1e18 for ETH\\r\\n        if (cToken.isCEther()) return 1e18;\\r\\n\\r\\n        // Get underlying ERC20 token address\\r\\n        address underlying = CErc20(address(cToken)).underlying();\\r\\n\\r\\n        // Get price, format, and return\\r\\n        uint256 baseUnit = 10 ** uint256(ERC20Upgradeable(underlying).decimals());\\r\\n        return _price(underlying).mul(1e18).div(baseUnit);\\r\\n    }\\r\\n    \\r\\n    /**\\r\\n     * @dev Internal function returning the price in ETH of `underlying`.\\r\\n     */\\r\\n    function _price(address underlying) internal view returns (uint) {\\r\\n        // Return 1e18 for WETH\\r\\n        if (underlying == WETH_ADDRESS) return 1e18;\\r\\n\\r\\n        // Call Keep3r for ERC20/ETH price and return\\r\\n        address pair = uniswapV2Factory.getPair(underlying, WETH_ADDRESS);\\r\\n        uint256 baseUnit = 10 ** uint256(ERC20Upgradeable(underlying).decimals());\\r\\n        return (underlying < WETH_ADDRESS ? price0TWAP(pair) : price1TWAP(pair)).div(2 ** 56).mul(baseUnit).div(2 ** 56); // Scaled by 1e18, not 2 ** 112\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\\r\\n     */\\r\\n    function price(address underlying) external override view returns (uint) {\\r\\n        return _price(underlying);\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/Keep3rPriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/Keep3rPriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"Keep3rPriceOracle\": [9759]\n    },\n    \"id\": 9760,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 9260,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"312:23:38\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 9261,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9760,\n        \"sourceUnit\": 11367,\n        \"src\": \"339:74:38\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"id\": 9262,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9760,\n        \"sourceUnit\": 11968,\n        \"src\": \"415:78:38\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 9263,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9760,\n        \"sourceUnit\": 6024,\n        \"src\": \"497:46:38\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 9264,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9760,\n        \"sourceUnit\": 5867,\n        \"src\": \"545:41:38\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 9265,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9760,\n        \"sourceUnit\": 5724,\n        \"src\": \"588:41:38\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/keep3r/Keep3rV1Oracle.sol\",\n        \"file\": \"../external/keep3r/Keep3rV1Oracle.sol\",\n        \"id\": 9266,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9760,\n        \"sourceUnit\": 6103,\n        \"src\": \"633:47:38\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Pair.sol\",\n        \"file\": \"../external/uniswap/IUniswapV2Pair.sol\",\n        \"id\": 9267,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9760,\n        \"sourceUnit\": 6467,\n        \"src\": \"684:48:38\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Factory.sol\",\n        \"file\": \"../external/uniswap/IUniswapV2Factory.sol\",\n        \"id\": 9268,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9760,\n        \"sourceUnit\": 6225,\n        \"src\": \"734:51:38\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n        \"file\": \"./BasePriceOracle.sol\",\n        \"id\": 9269,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9760,\n        \"sourceUnit\": 7815,\n        \"src\": \"789:31:38\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 9271,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"1078:11:38\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 9272,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"1078:11:38\"\n          },\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 9273,\n              \"name\": \"BasePriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 7814,\n              \"src\": \"1091:15:38\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_BasePriceOracle_$7814\",\n                \"typeString\": \"contract BasePriceOracle\"\n              }\n            },\n            \"id\": 9274,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"1091:15:38\"\n          }\n        ],\n        \"contractDependencies\": [6023, 7814],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 9270,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"824:222:38\",\n          \"text\": \" @title Keep3rPriceOracle\\n @notice Returns prices from `Keep3rV1Oracle` or `SushiswapV1Oracle`.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 9759,\n        \"linearizedBaseContracts\": [9759, 7814, 6023],\n        \"name\": \"Keep3rPriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 9277,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 9275,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 11366,\n              \"src\": \"1120:19:38\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$11366\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"1114:38:38\",\n            \"typeName\": {\n              \"id\": 9276,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1144:7:38\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"body\": {\n              \"id\": 9304,\n              \"nodeType\": \"Block\",\n              \"src\": \"1290:268:38\",\n              \"statements\": [\n                {\n                  \"assignments\": [9284],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9284,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"_rootOracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9304,\n                      \"src\": \"1301:26:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                        \"typeString\": \"contract Keep3rV1Oracle\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 9283,\n                        \"name\": \"Keep3rV1Oracle\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 6102,\n                        \"src\": \"1301:14:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                          \"typeString\": \"contract Keep3rV1Oracle\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9291,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"condition\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9286,\n                          \"name\": \"sushiSwap\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9280,\n                          \"src\": \"1345:9:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"falseExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307837333335333830313932313431374634363533373763386438393863366634433032373032383243\",\n                          \"id\": 9288,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1402:42:38\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0x73353801921417F465377c8d898c6f4C0270282C\"\n                        },\n                        \"id\": 9289,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Conditional\",\n                        \"src\": \"1345:99:38\",\n                        \"trueExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"307866363741623163393134646545303642613046323634303331383835456137423237366137634461\",\n                          \"id\": 9287,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1357:42:38\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          },\n                          \"value\": \"0xf67Ab1c914deE06Ba0F264031885Ea7B276a7cDa\"\n                        },\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"id\": 9285,\n                      \"name\": \"Keep3rV1Oracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 6102,\n                      \"src\": \"1330:14:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_Keep3rV1Oracle_$6102_$\",\n                        \"typeString\": \"type(contract Keep3rV1Oracle)\"\n                      }\n                    },\n                    \"id\": 9290,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1330:115:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                      \"typeString\": \"contract Keep3rV1Oracle\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1301:144:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 9294,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9292,\n                      \"name\": \"rootOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9308,\n                      \"src\": \"1456:10:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                        \"typeString\": \"contract Keep3rV1Oracle\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9293,\n                      \"name\": \"_rootOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9284,\n                      \"src\": \"1469:11:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                        \"typeString\": \"contract Keep3rV1Oracle\"\n                      }\n                    },\n                    \"src\": \"1456:24:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                      \"typeString\": \"contract Keep3rV1Oracle\"\n                    }\n                  },\n                  \"id\": 9295,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1456:24:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 9302,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9296,\n                      \"name\": \"uniswapV2Factory\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9315,\n                      \"src\": \"1491:16:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_IUniswapV2Factory_$6224\",\n                        \"typeString\": \"contract IUniswapV2Factory\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 9298,\n                              \"name\": \"_rootOracle\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9284,\n                              \"src\": \"1528:11:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                                \"typeString\": \"contract Keep3rV1Oracle\"\n                              }\n                            },\n                            \"id\": 9299,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"factory\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 6089,\n                            \"src\": \"1528:19:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_pure$__$returns$_t_address_$\",\n                              \"typeString\": \"function () pure external returns (address)\"\n                            }\n                          },\n                          \"id\": 9300,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1528:21:38\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"id\": 9297,\n                        \"name\": \"IUniswapV2Factory\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 6224,\n                        \"src\": \"1510:17:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_IUniswapV2Factory_$6224_$\",\n                          \"typeString\": \"type(contract IUniswapV2Factory)\"\n                        }\n                      },\n                      \"id\": 9301,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1510:40:38\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_IUniswapV2Factory_$6224\",\n                        \"typeString\": \"contract IUniswapV2Factory\"\n                      }\n                    },\n                    \"src\": \"1491:59:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_IUniswapV2Factory_$6224\",\n                      \"typeString\": \"contract IUniswapV2Factory\"\n                    }\n                  },\n                  \"id\": 9303,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1491:59:38\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9278,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1160:88:38\",\n              \"text\": \" @dev Constructor that sets the Keep3rV1Oracle or SushiswapV1Oracle.\"\n            },\n            \"id\": 9305,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9281,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9280,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"sushiSwap\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9305,\n                  \"src\": \"1267:14:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9279,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1267:4:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1266:16:38\"\n            },\n            \"returnParameters\": {\n              \"id\": 9282,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1290:0:38\"\n            },\n            \"scope\": 9759,\n            \"src\": \"1254:304:38\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 9306,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1566:63:38\",\n              \"text\": \" @dev Keep3rV1Oracle token contract object.\"\n            },\n            \"functionSelector\": \"e3cb23a5\",\n            \"id\": 9308,\n            \"mutability\": \"immutable\",\n            \"name\": \"rootOracle\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9759,\n            \"src\": \"1635:42:38\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n              \"typeString\": \"contract Keep3rV1Oracle\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 9307,\n              \"name\": \"Keep3rV1Oracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6102,\n              \"src\": \"1635:14:38\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                \"typeString\": \"contract Keep3rV1Oracle\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 9309,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1686:54:38\",\n              \"text\": \" @dev WETH token contract address.\"\n            },\n            \"functionSelector\": \"040141e5\",\n            \"id\": 9312,\n            \"mutability\": \"constant\",\n            \"name\": \"WETH_ADDRESS\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9759,\n            \"src\": \"1746:81:38\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 9310,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1746:7:38\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n              \"id\": 9311,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"1785:42:38\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              },\n              \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 9313,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1836:60:38\",\n              \"text\": \" @dev UniswapV2Factory contract address.\"\n            },\n            \"functionSelector\": \"59d0f713\",\n            \"id\": 9315,\n            \"mutability\": \"immutable\",\n            \"name\": \"uniswapV2Factory\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9759,\n            \"src\": \"1902:51:38\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_IUniswapV2Factory_$6224\",\n              \"typeString\": \"contract IUniswapV2Factory\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 9314,\n              \"name\": \"IUniswapV2Factory\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6224,\n              \"src\": \"1902:17:38\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_IUniswapV2Factory_$6224\",\n                \"typeString\": \"contract IUniswapV2Factory\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 9316,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1962:48:38\",\n              \"text\": \" @dev Minimum TWAP interval.\"\n            },\n            \"functionSelector\": \"af8a9ba5\",\n            \"id\": 9319,\n            \"mutability\": \"constant\",\n            \"name\": \"MIN_TWAP_TIME\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9759,\n            \"src\": \"2016:50:38\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 9317,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"2016:7:38\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"3135\",\n              \"id\": 9318,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"2056:10:38\",\n              \"subdenomination\": \"minutes\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_rational_900_by_1\",\n                \"typeString\": \"int_const 900\"\n              },\n              \"value\": \"15\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 9320,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"2075:48:38\",\n              \"text\": \" @dev Maximum TWAP interval.\"\n            },\n            \"functionSelector\": \"09cd510e\",\n            \"id\": 9323,\n            \"mutability\": \"constant\",\n            \"name\": \"MAX_TWAP_TIME\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9759,\n            \"src\": \"2129:50:38\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_uint256\",\n              \"typeString\": \"uint256\"\n            },\n            \"typeName\": {\n              \"id\": 9321,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"2129:7:38\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"3630\",\n              \"id\": 9322,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"2169:10:38\",\n              \"subdenomination\": \"minutes\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_rational_3600_by_1\",\n                \"typeString\": \"int_const 3600\"\n              },\n              \"value\": \"60\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 9416,\n              \"nodeType\": \"Block\",\n              \"src\": \"2531:695:38\",\n              \"statements\": [\n                {\n                  \"assignments\": [9332],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9332,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"length\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9416,\n                      \"src\": \"2542:11:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9331,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2542:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9337,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9335,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9326,\n                        \"src\": \"2585:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9333,\n                        \"name\": \"rootOracle\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9308,\n                        \"src\": \"2556:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                          \"typeString\": \"contract Keep3rV1Oracle\"\n                        }\n                      },\n                      \"id\": 9334,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"observationLength\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6101,\n                      \"src\": \"2556:28:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view external returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9336,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2556:34:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2542:48:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 9341,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9339,\n                          \"name\": \"length\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9332,\n                          \"src\": \"2609:6:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \">\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 9340,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2618:1:38\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        },\n                        \"src\": \"2609:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"6e6f206c656e6774682d31206f62736572766174696f6e\",\n                        \"id\": 9342,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2621:25:38\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_e063af599101f49b1aefac2e2e21d336b47c191121455c7cfeac6446eab7063b\",\n                          \"typeString\": \"literal_string \\\"no length-1 observation\\\"\"\n                        },\n                        \"value\": \"no length-1 observation\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_e063af599101f49b1aefac2e2e21d336b47c191121455c7cfeac6446eab7063b\",\n                          \"typeString\": \"literal_string \\\"no length-1 observation\\\"\"\n                        }\n                      ],\n                      \"id\": 9338,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"2601:7:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 9343,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2601:46:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 9344,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2601:46:38\"\n                },\n                {\n                  \"assignments\": [9346, 9348, null],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9346,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9416,\n                      \"src\": \"2659:13:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9345,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2659:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    {\n                      \"constant\": false,\n                      \"id\": 9348,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"lastPx0Cumu\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9416,\n                      \"src\": \"2674:16:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9347,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2674:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    null\n                  ],\n                  \"id\": 9356,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9351,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9326,\n                        \"src\": \"2720:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 9354,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9352,\n                          \"name\": \"length\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9332,\n                          \"src\": \"2726:6:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"-\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"31\",\n                          \"id\": 9353,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2735:1:38\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_1_by_1\",\n                            \"typeString\": \"int_const 1\"\n                          },\n                          \"value\": \"1\"\n                        },\n                        \"src\": \"2726:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9349,\n                        \"name\": \"rootOracle\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9308,\n                        \"src\": \"2696:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                          \"typeString\": \"contract Keep3rV1Oracle\"\n                        }\n                      },\n                      \"id\": 9350,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"observations\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6094,\n                      \"src\": \"2696:23:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$\",\n                        \"typeString\": \"function (address,uint256) view external returns (uint256,uint256,uint256)\"\n                      }\n                    },\n                    \"id\": 9355,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2696:41:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$\",\n                      \"typeString\": \"tuple(uint256,uint256,uint256)\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2658:79:38\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9361,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9357,\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9346,\n                      \"src\": \"2752:8:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 9360,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9358,\n                        \"name\": \"now\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": -17,\n                        \"src\": \"2763:3:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"-\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9359,\n                        \"name\": \"MIN_TWAP_TIME\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9319,\n                        \"src\": \"2769:13:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"src\": \"2763:19:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2752:30:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9382,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2748:193:38\",\n                  \"trueBody\": {\n                    \"id\": 9381,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2784:157:38\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 9365,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 9363,\n                                \"name\": \"length\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9332,\n                                \"src\": \"2807:6:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \">\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"31\",\n                                \"id\": 9364,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"number\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"2816:1:38\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_1_by_1\",\n                                  \"typeString\": \"int_const 1\"\n                                },\n                                \"value\": \"1\"\n                              },\n                              \"src\": \"2807:10:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"6e6f206c656e6774682d32206f62736572766174696f6e\",\n                              \"id\": 9366,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"string\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2819:25:38\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_stringliteral_6fd64329f321240490bba710d2351e6a4e6b29cfc423a630ecf2d9953c12089a\",\n                                \"typeString\": \"literal_string \\\"no length-2 observation\\\"\"\n                              },\n                              \"value\": \"no length-2 observation\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_stringliteral_6fd64329f321240490bba710d2351e6a4e6b29cfc423a630ecf2d9953c12089a\",\n                                \"typeString\": \"literal_string \\\"no length-2 observation\\\"\"\n                              }\n                            ],\n                            \"id\": 9362,\n                            \"name\": \"require\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [-18, -18],\n                            \"referencedDeclaration\": -18,\n                            \"src\": \"2799:7:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                              \"typeString\": \"function (bool,string memory) pure\"\n                            }\n                          },\n                          \"id\": 9367,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2799:46:38\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 9368,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2799:46:38\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9379,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"components\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9369,\n                                \"name\": \"lastTime\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9346,\n                                \"src\": \"2861:8:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9370,\n                                \"name\": \"lastPx0Cumu\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9348,\n                                \"src\": \"2871:11:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              null\n                            ],\n                            \"id\": 9371,\n                            \"isConstant\": false,\n                            \"isInlineArray\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"TupleExpression\",\n                            \"src\": \"2860:25:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_tuple$_t_uint256_$_t_uint256_$__$\",\n                              \"typeString\": \"tuple(uint256,uint256,)\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9374,\n                                \"name\": \"pair\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9326,\n                                \"src\": \"2912:4:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                \"id\": 9377,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 9375,\n                                  \"name\": \"length\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 9332,\n                                  \"src\": \"2918:6:38\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \"-\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"32\",\n                                  \"id\": 9376,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"2927:1:38\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_2_by_1\",\n                                    \"typeString\": \"int_const 2\"\n                                  },\n                                  \"value\": \"2\"\n                                },\n                                \"src\": \"2918:10:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 9372,\n                                \"name\": \"rootOracle\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9308,\n                                \"src\": \"2888:10:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                                  \"typeString\": \"contract Keep3rV1Oracle\"\n                                }\n                              },\n                              \"id\": 9373,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"observations\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 6094,\n                              \"src\": \"2888:23:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$\",\n                                \"typeString\": \"function (address,uint256) view external returns (uint256,uint256,uint256)\"\n                              }\n                            },\n                            \"id\": 9378,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"2888:41:38\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$\",\n                              \"typeString\": \"tuple(uint256,uint256,uint256)\"\n                            }\n                          },\n                          \"src\": \"2860:69:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 9380,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2860:69:38\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"assignments\": [9384],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9384,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"elapsedTime\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9416,\n                      \"src\": \"2951:16:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9383,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2951:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9388,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9387,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9385,\n                      \"name\": \"now\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": -17,\n                      \"src\": \"2970:3:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"-\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9386,\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9346,\n                      \"src\": \"2976:8:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2970:14:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2951:33:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        \"id\": 9396,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 9392,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9390,\n                            \"name\": \"elapsedTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9384,\n                            \"src\": \"3003:11:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \">=\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9391,\n                            \"name\": \"MIN_TWAP_TIME\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9319,\n                            \"src\": \"3018:13:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"3003:28:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"&&\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 9395,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9393,\n                            \"name\": \"elapsedTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9384,\n                            \"src\": \"3035:11:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"<=\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9394,\n                            \"name\": \"MAX_TWAP_TIME\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9323,\n                            \"src\": \"3050:13:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"3035:28:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"src\": \"3003:60:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"62616420545741502074696d65\",\n                        \"id\": 9397,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3065:15:38\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_60f99bf84f56c06b6192bb33e3eea62114a9a93e00b64c343494092127c022e8\",\n                          \"typeString\": \"literal_string \\\"bad TWAP time\\\"\"\n                        },\n                        \"value\": \"bad TWAP time\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_60f99bf84f56c06b6192bb33e3eea62114a9a93e00b64c343494092127c022e8\",\n                          \"typeString\": \"literal_string \\\"bad TWAP time\\\"\"\n                        }\n                      ],\n                      \"id\": 9389,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"2995:7:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 9398,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2995:86:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 9399,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2995:86:38\"\n                },\n                {\n                  \"assignments\": [9401],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9401,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"currPx0Cumu\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9416,\n                      \"src\": \"3092:16:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9400,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3092:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9405,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9403,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9326,\n                        \"src\": \"3126:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 9402,\n                      \"name\": \"currentPx0Cumu\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9572,\n                      \"src\": \"3111:14:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9404,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3111:20:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3092:39:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9414,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"components\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 9408,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9406,\n                            \"name\": \"currPx0Cumu\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9401,\n                            \"src\": \"3150:11:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"-\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9407,\n                            \"name\": \"lastPx0Cumu\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9348,\n                            \"src\": \"3164:11:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"3150:25:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"id\": 9409,\n                      \"isConstant\": false,\n                      \"isInlineArray\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"TupleExpression\",\n                      \"src\": \"3149:27:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"/\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"components\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 9412,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9410,\n                            \"name\": \"now\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -17,\n                            \"src\": \"3180:3:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"-\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9411,\n                            \"name\": \"lastTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9346,\n                            \"src\": \"3186:8:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"3180:14:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"id\": 9413,\n                      \"isConstant\": false,\n                      \"isInlineArray\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"TupleExpression\",\n                      \"src\": \"3179:16:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"3149:46:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 9330,\n                  \"id\": 9415,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"3142:53:38\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9324,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"2188:274:38\",\n              \"text\": \" @dev Return the TWAP value price0. Revert if TWAP time range is not within the threshold.\\n Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\n @param pair The pair to query for price0.\"\n            },\n            \"id\": 9417,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"price0TWAP\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9327,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9326,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"pair\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9417,\n                  \"src\": \"2488:12:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9325,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2488:7:38\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2487:14:38\"\n            },\n            \"returnParameters\": {\n              \"id\": 9330,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9329,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9417,\n                  \"src\": \"2525:4:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9328,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2525:4:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2524:6:38\"\n            },\n            \"scope\": 9759,\n            \"src\": \"2468:758:38\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 9510,\n              \"nodeType\": \"Block\",\n              \"src\": \"3577:695:38\",\n              \"statements\": [\n                {\n                  \"assignments\": [9426],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9426,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"length\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9510,\n                      \"src\": \"3588:11:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9425,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3588:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9431,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9429,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9420,\n                        \"src\": \"3631:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9427,\n                        \"name\": \"rootOracle\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9308,\n                        \"src\": \"3602:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                          \"typeString\": \"contract Keep3rV1Oracle\"\n                        }\n                      },\n                      \"id\": 9428,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"observationLength\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6101,\n                      \"src\": \"3602:28:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view external returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9430,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3602:34:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3588:48:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 9435,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9433,\n                          \"name\": \"length\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9426,\n                          \"src\": \"3655:6:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \">\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 9434,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3664:1:38\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        },\n                        \"src\": \"3655:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"6e6f206c656e6774682d31206f62736572766174696f6e\",\n                        \"id\": 9436,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3667:25:38\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_e063af599101f49b1aefac2e2e21d336b47c191121455c7cfeac6446eab7063b\",\n                          \"typeString\": \"literal_string \\\"no length-1 observation\\\"\"\n                        },\n                        \"value\": \"no length-1 observation\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_e063af599101f49b1aefac2e2e21d336b47c191121455c7cfeac6446eab7063b\",\n                          \"typeString\": \"literal_string \\\"no length-1 observation\\\"\"\n                        }\n                      ],\n                      \"id\": 9432,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"3647:7:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 9437,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3647:46:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 9438,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3647:46:38\"\n                },\n                {\n                  \"assignments\": [9440, null, 9442],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9440,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9510,\n                      \"src\": \"3705:13:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9439,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3705:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    null,\n                    {\n                      \"constant\": false,\n                      \"id\": 9442,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"lastPx1Cumu\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9510,\n                      \"src\": \"3722:16:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9441,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3722:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9450,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9445,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9420,\n                        \"src\": \"3766:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 9448,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9446,\n                          \"name\": \"length\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9426,\n                          \"src\": \"3772:6:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"-\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"31\",\n                          \"id\": 9447,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3781:1:38\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_1_by_1\",\n                            \"typeString\": \"int_const 1\"\n                          },\n                          \"value\": \"1\"\n                        },\n                        \"src\": \"3772:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9443,\n                        \"name\": \"rootOracle\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9308,\n                        \"src\": \"3742:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                          \"typeString\": \"contract Keep3rV1Oracle\"\n                        }\n                      },\n                      \"id\": 9444,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"observations\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6094,\n                      \"src\": \"3742:23:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$\",\n                        \"typeString\": \"function (address,uint256) view external returns (uint256,uint256,uint256)\"\n                      }\n                    },\n                    \"id\": 9449,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3742:41:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$\",\n                      \"typeString\": \"tuple(uint256,uint256,uint256)\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3704:79:38\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9455,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9451,\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9440,\n                      \"src\": \"3798:8:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 9454,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9452,\n                        \"name\": \"now\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": -17,\n                        \"src\": \"3809:3:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"-\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9453,\n                        \"name\": \"MIN_TWAP_TIME\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9319,\n                        \"src\": \"3815:13:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"src\": \"3809:19:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"3798:30:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9476,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"3794:193:38\",\n                  \"trueBody\": {\n                    \"id\": 9475,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"3830:157:38\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 9459,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 9457,\n                                \"name\": \"length\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9426,\n                                \"src\": \"3853:6:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \">\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"31\",\n                                \"id\": 9458,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"number\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"3862:1:38\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_1_by_1\",\n                                  \"typeString\": \"int_const 1\"\n                                },\n                                \"value\": \"1\"\n                              },\n                              \"src\": \"3853:10:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"6e6f206c656e6774682d32206f62736572766174696f6e\",\n                              \"id\": 9460,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"string\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"3865:25:38\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_stringliteral_6fd64329f321240490bba710d2351e6a4e6b29cfc423a630ecf2d9953c12089a\",\n                                \"typeString\": \"literal_string \\\"no length-2 observation\\\"\"\n                              },\n                              \"value\": \"no length-2 observation\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_stringliteral_6fd64329f321240490bba710d2351e6a4e6b29cfc423a630ecf2d9953c12089a\",\n                                \"typeString\": \"literal_string \\\"no length-2 observation\\\"\"\n                              }\n                            ],\n                            \"id\": 9456,\n                            \"name\": \"require\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [-18, -18],\n                            \"referencedDeclaration\": -18,\n                            \"src\": \"3845:7:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                              \"typeString\": \"function (bool,string memory) pure\"\n                            }\n                          },\n                          \"id\": 9461,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3845:46:38\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 9462,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"3845:46:38\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9473,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"components\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9463,\n                                \"name\": \"lastTime\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9440,\n                                \"src\": \"3907:8:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              null,\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9464,\n                                \"name\": \"lastPx1Cumu\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9442,\n                                \"src\": \"3919:11:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"id\": 9465,\n                            \"isConstant\": false,\n                            \"isInlineArray\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"TupleExpression\",\n                            \"src\": \"3906:25:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_tuple$_t_uint256_$__$_t_uint256_$\",\n                              \"typeString\": \"tuple(uint256,,uint256)\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9468,\n                                \"name\": \"pair\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9420,\n                                \"src\": \"3958:4:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                \"id\": 9471,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 9469,\n                                  \"name\": \"length\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 9426,\n                                  \"src\": \"3964:6:38\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \"-\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"32\",\n                                  \"id\": 9470,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"3973:1:38\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_2_by_1\",\n                                    \"typeString\": \"int_const 2\"\n                                  },\n                                  \"value\": \"2\"\n                                },\n                                \"src\": \"3964:10:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 9466,\n                                \"name\": \"rootOracle\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9308,\n                                \"src\": \"3934:10:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_Keep3rV1Oracle_$6102\",\n                                  \"typeString\": \"contract Keep3rV1Oracle\"\n                                }\n                              },\n                              \"id\": 9467,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"observations\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 6094,\n                              \"src\": \"3934:23:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_uint256_$\",\n                                \"typeString\": \"function (address,uint256) view external returns (uint256,uint256,uint256)\"\n                              }\n                            },\n                            \"id\": 9472,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3934:41:38\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$\",\n                              \"typeString\": \"tuple(uint256,uint256,uint256)\"\n                            }\n                          },\n                          \"src\": \"3906:69:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 9474,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"3906:69:38\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"assignments\": [9478],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9478,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"elapsedTime\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9510,\n                      \"src\": \"3997:16:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9477,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3997:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9482,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9481,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9479,\n                      \"name\": \"now\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": -17,\n                      \"src\": \"4016:3:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"-\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9480,\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9440,\n                      \"src\": \"4022:8:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4016:14:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3997:33:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        \"id\": 9490,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 9486,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9484,\n                            \"name\": \"elapsedTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9478,\n                            \"src\": \"4049:11:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \">=\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9485,\n                            \"name\": \"MIN_TWAP_TIME\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9319,\n                            \"src\": \"4064:13:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"4049:28:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"&&\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 9489,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9487,\n                            \"name\": \"elapsedTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9478,\n                            \"src\": \"4081:11:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"<=\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9488,\n                            \"name\": \"MAX_TWAP_TIME\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9323,\n                            \"src\": \"4096:13:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"4081:28:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"src\": \"4049:60:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"62616420545741502074696d65\",\n                        \"id\": 9491,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4111:15:38\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_60f99bf84f56c06b6192bb33e3eea62114a9a93e00b64c343494092127c022e8\",\n                          \"typeString\": \"literal_string \\\"bad TWAP time\\\"\"\n                        },\n                        \"value\": \"bad TWAP time\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_60f99bf84f56c06b6192bb33e3eea62114a9a93e00b64c343494092127c022e8\",\n                          \"typeString\": \"literal_string \\\"bad TWAP time\\\"\"\n                        }\n                      ],\n                      \"id\": 9483,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"4041:7:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 9492,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4041:86:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 9493,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4041:86:38\"\n                },\n                {\n                  \"assignments\": [9495],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9495,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"currPx1Cumu\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9510,\n                      \"src\": \"4138:16:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9494,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4138:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9499,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9497,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9420,\n                        \"src\": \"4172:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 9496,\n                      \"name\": \"currentPx1Cumu\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9633,\n                      \"src\": \"4157:14:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9498,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4157:20:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4138:39:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9508,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"components\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 9502,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9500,\n                            \"name\": \"currPx1Cumu\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9495,\n                            \"src\": \"4196:11:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"-\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9501,\n                            \"name\": \"lastPx1Cumu\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9442,\n                            \"src\": \"4210:11:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"4196:25:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"id\": 9503,\n                      \"isConstant\": false,\n                      \"isInlineArray\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"TupleExpression\",\n                      \"src\": \"4195:27:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"/\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"components\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 9506,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9504,\n                            \"name\": \"now\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -17,\n                            \"src\": \"4226:3:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"-\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9505,\n                            \"name\": \"lastTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9440,\n                            \"src\": \"4232:8:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"4226:14:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"id\": 9507,\n                      \"isConstant\": false,\n                      \"isInlineArray\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"TupleExpression\",\n                      \"src\": \"4225:16:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4195:46:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 9424,\n                  \"id\": 9509,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"4188:53:38\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9418,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"3234:274:38\",\n              \"text\": \" @dev Return the TWAP value price1. Revert if TWAP time range is not within the threshold.\\n Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\n @param pair The pair to query for price1.\"\n            },\n            \"id\": 9511,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"price1TWAP\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9421,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9420,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"pair\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9511,\n                  \"src\": \"3534:12:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9419,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3534:7:38\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3533:14:38\"\n            },\n            \"returnParameters\": {\n              \"id\": 9424,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9423,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9511,\n                  \"src\": \"3571:4:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9422,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3571:4:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3570:6:38\"\n            },\n            \"scope\": 9759,\n            \"src\": \"3514:758:38\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 9571,\n              \"nodeType\": \"Block\",\n              \"src\": \"4630:425:38\",\n              \"statements\": [\n                {\n                  \"assignments\": [9520],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9520,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"currTime\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9571,\n                      \"src\": \"4641:15:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint32\",\n                        \"typeString\": \"uint32\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9519,\n                        \"name\": \"uint32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4641:6:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint32\",\n                          \"typeString\": \"uint32\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9525,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9523,\n                        \"name\": \"now\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": -17,\n                        \"src\": \"4666:3:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 9522,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"4659:6:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_uint32_$\",\n                        \"typeString\": \"type(uint32)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9521,\n                        \"name\": \"uint32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4659:6:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 9524,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4659:11:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint32\",\n                      \"typeString\": \"uint32\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4641:29:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 9532,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9526,\n                      \"name\": \"px0Cumu\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9517,\n                      \"src\": \"4681:7:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [],\n                      \"expression\": {\n                        \"argumentTypes\": [],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 9528,\n                              \"name\": \"pair\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9514,\n                              \"src\": \"4706:4:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 9527,\n                            \"name\": \"IUniswapV2Pair\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 6466,\n                            \"src\": \"4691:14:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_contract$_IUniswapV2Pair_$6466_$\",\n                              \"typeString\": \"type(contract IUniswapV2Pair)\"\n                            }\n                          },\n                          \"id\": 9529,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"4691:20:38\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6466\",\n                            \"typeString\": \"contract IUniswapV2Pair\"\n                          }\n                        },\n                        \"id\": 9530,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"price0CumulativeLast\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 6413,\n                        \"src\": \"4691:41:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                          \"typeString\": \"function () view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 9531,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"4691:43:38\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4681:53:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 9533,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4681:53:38\"\n                },\n                {\n                  \"assignments\": [9535, 9537, 9539],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9535,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"reserve0\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9571,\n                      \"src\": \"4746:13:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9534,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4746:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    {\n                      \"constant\": false,\n                      \"id\": 9537,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"reserve1\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9571,\n                      \"src\": \"4761:13:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9536,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4761:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    {\n                      \"constant\": false,\n                      \"id\": 9539,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9571,\n                      \"src\": \"4776:15:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint32\",\n                        \"typeString\": \"uint32\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9538,\n                        \"name\": \"uint32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4776:6:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint32\",\n                          \"typeString\": \"uint32\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9545,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 9541,\n                            \"name\": \"pair\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9514,\n                            \"src\": \"4810:4:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 9540,\n                          \"name\": \"IUniswapV2Pair\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 6466,\n                          \"src\": \"4795:14:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_IUniswapV2Pair_$6466_$\",\n                            \"typeString\": \"type(contract IUniswapV2Pair)\"\n                          }\n                        },\n                        \"id\": 9542,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"4795:20:38\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6466\",\n                          \"typeString\": \"contract IUniswapV2Pair\"\n                        }\n                      },\n                      \"id\": 9543,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"getReserves\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6408,\n                      \"src\": \"4795:32:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$\",\n                        \"typeString\": \"function () view external returns (uint112,uint112,uint32)\"\n                      }\n                    },\n                    \"id\": 9544,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4795:34:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$\",\n                      \"typeString\": \"tuple(uint112,uint112,uint32)\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4745:84:38\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9548,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9546,\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9539,\n                      \"src\": \"4844:8:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint32\",\n                        \"typeString\": \"uint32\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9547,\n                      \"name\": \"now\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": -17,\n                      \"src\": \"4856:3:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4844:15:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9570,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"4840:208:38\",\n                  \"trueBody\": {\n                    \"id\": 9569,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"4861:187:38\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [9550],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 9550,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"timeElapsed\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 9569,\n                            \"src\": \"4876:18:38\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint32\",\n                              \"typeString\": \"uint32\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9549,\n                              \"name\": \"uint32\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"4876:6:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint32\",\n                                \"typeString\": \"uint32\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 9554,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint32\",\n                            \"typeString\": \"uint32\"\n                          },\n                          \"id\": 9553,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9551,\n                            \"name\": \"currTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9520,\n                            \"src\": \"4897:8:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint32\",\n                              \"typeString\": \"uint32\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"-\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9552,\n                            \"name\": \"lastTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9539,\n                            \"src\": \"4908:8:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint32\",\n                              \"typeString\": \"uint32\"\n                            }\n                          },\n                          \"src\": \"4897:19:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint32\",\n                            \"typeString\": \"uint32\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"4876:40:38\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9567,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9555,\n                            \"name\": \"px0Cumu\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9517,\n                            \"src\": \"4954:7:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"+=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 9566,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"id\": 9563,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"leftExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"components\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 9560,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                          \"argumentTypes\": null,\n                                          \"id\": 9558,\n                                          \"name\": \"reserve1\",\n                                          \"nodeType\": \"Identifier\",\n                                          \"overloadedDeclarations\": [],\n                                          \"referencedDeclaration\": 9537,\n                                          \"src\": \"4971:8:38\",\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"<<\",\n                                        \"rightExpression\": {\n                                          \"argumentTypes\": null,\n                                          \"hexValue\": \"313132\",\n                                          \"id\": 9559,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"kind\": \"number\",\n                                          \"lValueRequested\": false,\n                                          \"nodeType\": \"Literal\",\n                                          \"src\": \"4983:3:38\",\n                                          \"subdenomination\": null,\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_rational_112_by_1\",\n                                            \"typeString\": \"int_const 112\"\n                                          },\n                                          \"value\": \"112\"\n                                        },\n                                        \"src\": \"4971:15:38\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      }\n                                    ],\n                                    \"id\": 9561,\n                                    \"isConstant\": false,\n                                    \"isInlineArray\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"TupleExpression\",\n                                    \"src\": \"4970:17:38\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"nodeType\": \"BinaryOperation\",\n                                  \"operator\": \"/\",\n                                  \"rightExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 9562,\n                                    \"name\": \"reserve0\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 9535,\n                                    \"src\": \"4990:8:38\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"src\": \"4970:28:38\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                ],\n                                \"id\": 9557,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"4965:4:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                  \"typeString\": \"type(uint256)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 9556,\n                                  \"name\": \"uint\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"4965:4:38\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 9564,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"4965:34:38\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"*\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 9565,\n                              \"name\": \"timeElapsed\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9550,\n                              \"src\": \"5002:11:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint32\",\n                                \"typeString\": \"uint32\"\n                              }\n                            },\n                            \"src\": \"4965:48:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"4954:59:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 9568,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4954:59:38\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9512,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"4280:269:38\",\n              \"text\": \" @dev Return the current price0 cumulative value on Uniswap.\\n Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\n @param pair The uniswap pair to query for price0 cumulative value.\"\n            },\n            \"id\": 9572,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"currentPx0Cumu\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9515,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9514,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"pair\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9572,\n                  \"src\": \"4579:12:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9513,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4579:7:38\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4578:14:38\"\n            },\n            \"returnParameters\": {\n              \"id\": 9518,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9517,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"px0Cumu\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9572,\n                  \"src\": \"4616:12:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9516,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4616:4:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4615:14:38\"\n            },\n            \"scope\": 9759,\n            \"src\": \"4555:500:38\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 9632,\n              \"nodeType\": \"Block\",\n              \"src\": \"5413:430:38\",\n              \"statements\": [\n                {\n                  \"assignments\": [9581],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9581,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"currTime\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9632,\n                      \"src\": \"5424:15:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint32\",\n                        \"typeString\": \"uint32\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9580,\n                        \"name\": \"uint32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5424:6:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint32\",\n                          \"typeString\": \"uint32\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9586,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9584,\n                        \"name\": \"now\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": -17,\n                        \"src\": \"5449:3:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"id\": 9583,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"5442:6:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_uint32_$\",\n                        \"typeString\": \"type(uint32)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9582,\n                        \"name\": \"uint32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5442:6:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 9585,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"5442:11:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint32\",\n                      \"typeString\": \"uint32\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"5424:29:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 9593,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9587,\n                      \"name\": \"px1Cumu\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9578,\n                      \"src\": \"5464:7:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [],\n                      \"expression\": {\n                        \"argumentTypes\": [],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 9589,\n                              \"name\": \"pair\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9575,\n                              \"src\": \"5489:4:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 9588,\n                            \"name\": \"IUniswapV2Pair\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 6466,\n                            \"src\": \"5474:14:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_contract$_IUniswapV2Pair_$6466_$\",\n                              \"typeString\": \"type(contract IUniswapV2Pair)\"\n                            }\n                          },\n                          \"id\": 9590,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"5474:20:38\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6466\",\n                            \"typeString\": \"contract IUniswapV2Pair\"\n                          }\n                        },\n                        \"id\": 9591,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"price1CumulativeLast\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 6418,\n                        \"src\": \"5474:41:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                          \"typeString\": \"function () view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 9592,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5474:43:38\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"5464:53:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 9594,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5464:53:38\"\n                },\n                {\n                  \"assignments\": [9596, 9598, 9600],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9596,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"reserve0\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9632,\n                      \"src\": \"5529:13:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9595,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5529:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    {\n                      \"constant\": false,\n                      \"id\": 9598,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"reserve1\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9632,\n                      \"src\": \"5544:13:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9597,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5544:4:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    {\n                      \"constant\": false,\n                      \"id\": 9600,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9632,\n                      \"src\": \"5559:15:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint32\",\n                        \"typeString\": \"uint32\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9599,\n                        \"name\": \"uint32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5559:6:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint32\",\n                          \"typeString\": \"uint32\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9606,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 9602,\n                            \"name\": \"pair\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9575,\n                            \"src\": \"5593:4:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 9601,\n                          \"name\": \"IUniswapV2Pair\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 6466,\n                          \"src\": \"5578:14:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_IUniswapV2Pair_$6466_$\",\n                            \"typeString\": \"type(contract IUniswapV2Pair)\"\n                          }\n                        },\n                        \"id\": 9603,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"5578:20:38\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6466\",\n                          \"typeString\": \"contract IUniswapV2Pair\"\n                        }\n                      },\n                      \"id\": 9604,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"getReserves\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6408,\n                      \"src\": \"5578:32:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$\",\n                        \"typeString\": \"function () view external returns (uint112,uint112,uint32)\"\n                      }\n                    },\n                    \"id\": 9605,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"5578:34:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$\",\n                      \"typeString\": \"tuple(uint112,uint112,uint32)\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"5528:84:38\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint32\",\n                      \"typeString\": \"uint32\"\n                    },\n                    \"id\": 9609,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9607,\n                      \"name\": \"lastTime\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9600,\n                      \"src\": \"5627:8:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint32\",\n                        \"typeString\": \"uint32\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9608,\n                      \"name\": \"currTime\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9581,\n                      \"src\": \"5639:8:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint32\",\n                        \"typeString\": \"uint32\"\n                      }\n                    },\n                    \"src\": \"5627:20:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9631,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"5623:213:38\",\n                  \"trueBody\": {\n                    \"id\": 9630,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"5649:187:38\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [9611],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 9611,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"timeElapsed\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 9630,\n                            \"src\": \"5664:18:38\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint32\",\n                              \"typeString\": \"uint32\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9610,\n                              \"name\": \"uint32\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"5664:6:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint32\",\n                                \"typeString\": \"uint32\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 9615,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint32\",\n                            \"typeString\": \"uint32\"\n                          },\n                          \"id\": 9614,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9612,\n                            \"name\": \"currTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9581,\n                            \"src\": \"5685:8:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint32\",\n                              \"typeString\": \"uint32\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"-\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9613,\n                            \"name\": \"lastTime\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9600,\n                            \"src\": \"5696:8:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint32\",\n                              \"typeString\": \"uint32\"\n                            }\n                          },\n                          \"src\": \"5685:19:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint32\",\n                            \"typeString\": \"uint32\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"5664:40:38\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9628,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9616,\n                            \"name\": \"px1Cumu\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9578,\n                            \"src\": \"5742:7:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"+=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 9627,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"id\": 9624,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"leftExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"components\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"commonType\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        },\n                                        \"id\": 9621,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"leftExpression\": {\n                                          \"argumentTypes\": null,\n                                          \"id\": 9619,\n                                          \"name\": \"reserve0\",\n                                          \"nodeType\": \"Identifier\",\n                                          \"overloadedDeclarations\": [],\n                                          \"referencedDeclaration\": 9596,\n                                          \"src\": \"5759:8:38\",\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          }\n                                        },\n                                        \"nodeType\": \"BinaryOperation\",\n                                        \"operator\": \"<<\",\n                                        \"rightExpression\": {\n                                          \"argumentTypes\": null,\n                                          \"hexValue\": \"313132\",\n                                          \"id\": 9620,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"kind\": \"number\",\n                                          \"lValueRequested\": false,\n                                          \"nodeType\": \"Literal\",\n                                          \"src\": \"5771:3:38\",\n                                          \"subdenomination\": null,\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_rational_112_by_1\",\n                                            \"typeString\": \"int_const 112\"\n                                          },\n                                          \"value\": \"112\"\n                                        },\n                                        \"src\": \"5759:15:38\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      }\n                                    ],\n                                    \"id\": 9622,\n                                    \"isConstant\": false,\n                                    \"isInlineArray\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"TupleExpression\",\n                                    \"src\": \"5758:17:38\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"nodeType\": \"BinaryOperation\",\n                                  \"operator\": \"/\",\n                                  \"rightExpression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 9623,\n                                    \"name\": \"reserve1\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 9598,\n                                    \"src\": \"5778:8:38\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"src\": \"5758:28:38\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                ],\n                                \"id\": 9618,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"5753:4:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                  \"typeString\": \"type(uint256)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 9617,\n                                  \"name\": \"uint\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"5753:4:38\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 9625,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"5753:34:38\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"*\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 9626,\n                              \"name\": \"timeElapsed\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9611,\n                              \"src\": \"5790:11:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint32\",\n                                \"typeString\": \"uint32\"\n                              }\n                            },\n                            \"src\": \"5753:48:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"5742:59:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 9629,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"5742:59:38\"\n                      }\n                    ]\n                  }\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9573,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"5063:269:38\",\n              \"text\": \" @dev Return the current price1 cumulative value on Uniswap.\\n Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\n @param pair The uniswap pair to query for price1 cumulative value.\"\n            },\n            \"id\": 9633,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"currentPx1Cumu\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9576,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9575,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"pair\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9633,\n                  \"src\": \"5362:12:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9574,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"5362:7:38\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5361:14:38\"\n            },\n            \"returnParameters\": {\n              \"id\": 9579,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9578,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"px1Cumu\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9633,\n                  \"src\": \"5399:12:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9577,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"5399:4:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5398:14:38\"\n            },\n            \"scope\": 9759,\n            \"src\": \"5338:505:38\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 9682,\n              \"nodeType\": \"Block\",\n              \"src\": \"6132:390:38\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9642,\n                        \"name\": \"cToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9636,\n                        \"src\": \"6179:6:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                          \"typeString\": \"contract CToken\"\n                        }\n                      },\n                      \"id\": 9643,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"isCEther\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5805,\n                      \"src\": \"6179:15:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_bool_$\",\n                        \"typeString\": \"function () view external returns (bool)\"\n                      }\n                    },\n                    \"id\": 9644,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"6179:17:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9647,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"6175:34:38\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 9645,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"6205:4:38\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 9641,\n                    \"id\": 9646,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"6198:11:38\"\n                  }\n                },\n                {\n                  \"assignments\": [9649],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9649,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9682,\n                      \"src\": \"6269:18:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9648,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"6269:7:38\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9658,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9653,\n                                \"name\": \"cToken\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9636,\n                                \"src\": \"6305:6:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              ],\n                              \"id\": 9652,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"ElementaryTypeNameExpression\",\n                              \"src\": \"6297:7:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_address_$\",\n                                \"typeString\": \"type(address)\"\n                              },\n                              \"typeName\": {\n                                \"id\": 9651,\n                                \"name\": \"address\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"6297:7:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": null,\n                                  \"typeString\": null\n                                }\n                              }\n                            },\n                            \"id\": 9654,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"6297:15:38\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 9650,\n                          \"name\": \"CErc20\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 5723,\n                          \"src\": \"6290:6:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                            \"typeString\": \"type(contract CErc20)\"\n                          }\n                        },\n                        \"id\": 9655,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"6290:23:38\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                          \"typeString\": \"contract CErc20\"\n                        }\n                      },\n                      \"id\": 9656,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"underlying\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5711,\n                      \"src\": \"6290:34:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 9657,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"6290:36:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"6269:57:38\"\n                },\n                {\n                  \"assignments\": [9660],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9660,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"baseUnit\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9682,\n                      \"src\": \"6381:16:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9659,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"6381:7:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9671,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9670,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3130\",\n                      \"id\": 9661,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"6400:2:38\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_10_by_1\",\n                        \"typeString\": \"int_const 10\"\n                      },\n                      \"value\": \"10\"\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"**\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 9665,\n                                  \"name\": \"underlying\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 9649,\n                                  \"src\": \"6431:10:38\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                ],\n                                \"id\": 9664,\n                                \"name\": \"ERC20Upgradeable\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 11967,\n                                \"src\": \"6414:16:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11967_$\",\n                                  \"typeString\": \"type(contract ERC20Upgradeable)\"\n                                }\n                              },\n                              \"id\": 9666,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"6414:28:38\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11967\",\n                                \"typeString\": \"contract ERC20Upgradeable\"\n                              }\n                            },\n                            \"id\": 9667,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"decimals\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 11539,\n                            \"src\": \"6414:37:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                              \"typeString\": \"function () view external returns (uint8)\"\n                            }\n                          },\n                          \"id\": 9668,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"6414:39:38\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        ],\n                        \"id\": 9663,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6406:7:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                          \"typeString\": \"type(uint256)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 9662,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6406:7:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 9669,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6406:48:38\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"6400:54:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"6381:73:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9679,\n                        \"name\": \"baseUnit\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9660,\n                        \"src\": \"6505:8:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"31653138\",\n                            \"id\": 9676,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"6495:4:38\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            },\n                            \"value\": \"1e18\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9673,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9649,\n                                \"src\": \"6479:10:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 9672,\n                              \"name\": \"_price\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9744,\n                              \"src\": \"6472:6:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (address) view returns (uint256)\"\n                              }\n                            },\n                            \"id\": 9674,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"6472:18:38\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 9675,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 11279,\n                          \"src\": \"6472:22:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 9677,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"6472:28:38\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 9678,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 11296,\n                      \"src\": \"6472:32:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9680,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"6472:42:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 9641,\n                  \"id\": 9681,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"6465:49:38\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9634,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"5855:190:38\",\n              \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\n Prices are expected to be scaled by `10 ** (36 - underlyingDecimals)`.\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 9683,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 9638,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"6103:8:38\"\n            },\n            \"parameters\": {\n              \"id\": 9637,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9636,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9683,\n                  \"src\": \"6079:13:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 9635,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"6079:6:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"6078:15:38\"\n            },\n            \"returnParameters\": {\n              \"id\": 9641,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9640,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9683,\n                  \"src\": \"6126:4:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9639,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"6126:4:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"6125:6:38\"\n            },\n            \"scope\": 9759,\n            \"src\": \"6051:471:38\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 9743,\n              \"nodeType\": \"Block\",\n              \"src\": \"6692:467:38\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 9693,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9691,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9686,\n                      \"src\": \"6740:10:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9692,\n                      \"name\": \"WETH_ADDRESS\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9312,\n                      \"src\": \"6754:12:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"6740:26:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9696,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"6736:43:38\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 9694,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"6775:4:38\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 9690,\n                    \"id\": 9695,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"6768:11:38\"\n                  }\n                },\n                {\n                  \"assignments\": [9698],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9698,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pair\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9743,\n                      \"src\": \"6847:12:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9697,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"6847:7:38\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9704,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9701,\n                        \"name\": \"underlying\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9686,\n                        \"src\": \"6887:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9702,\n                        \"name\": \"WETH_ADDRESS\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9312,\n                        \"src\": \"6899:12:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9699,\n                        \"name\": \"uniswapV2Factory\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9315,\n                        \"src\": \"6862:16:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IUniswapV2Factory_$6224\",\n                          \"typeString\": \"contract IUniswapV2Factory\"\n                        }\n                      },\n                      \"id\": 9700,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"getPair\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6192,\n                      \"src\": \"6862:24:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$_t_address_$returns$_t_address_$\",\n                        \"typeString\": \"function (address,address) view external returns (address)\"\n                      }\n                    },\n                    \"id\": 9703,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"6862:50:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"6847:65:38\"\n                },\n                {\n                  \"assignments\": [9706],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9706,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"baseUnit\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9743,\n                      \"src\": \"6923:16:38\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9705,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"6923:7:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9717,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9716,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3130\",\n                      \"id\": 9707,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"6942:2:38\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_10_by_1\",\n                        \"typeString\": \"int_const 10\"\n                      },\n                      \"value\": \"10\"\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"**\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 9711,\n                                  \"name\": \"underlying\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 9686,\n                                  \"src\": \"6973:10:38\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                ],\n                                \"id\": 9710,\n                                \"name\": \"ERC20Upgradeable\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 11967,\n                                \"src\": \"6956:16:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11967_$\",\n                                  \"typeString\": \"type(contract ERC20Upgradeable)\"\n                                }\n                              },\n                              \"id\": 9712,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"6956:28:38\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11967\",\n                                \"typeString\": \"contract ERC20Upgradeable\"\n                              }\n                            },\n                            \"id\": 9713,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"decimals\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 11539,\n                            \"src\": \"6956:37:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                              \"typeString\": \"function () view external returns (uint8)\"\n                            }\n                          },\n                          \"id\": 9714,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"6956:39:38\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        ],\n                        \"id\": 9709,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6948:7:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                          \"typeString\": \"type(uint256)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 9708,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6948:7:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 9715,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6948:48:38\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"6942:54:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"6923:73:38\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                          \"typeString\": \"int_const 72057594037927936\"\n                        },\n                        \"id\": 9740,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"32\",\n                          \"id\": 9738,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"7111:1:38\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_2_by_1\",\n                            \"typeString\": \"int_const 2\"\n                          },\n                          \"value\": \"2\"\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"**\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"3536\",\n                          \"id\": 9739,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"7116:2:38\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_56_by_1\",\n                            \"typeString\": \"int_const 56\"\n                          },\n                          \"value\": \"56\"\n                        },\n                        \"src\": \"7111:7:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                          \"typeString\": \"int_const 72057594037927936\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                          \"typeString\": \"int_const 72057594037927936\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 9735,\n                            \"name\": \"baseUnit\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9706,\n                            \"src\": \"7097:8:38\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                  \"typeString\": \"int_const 72057594037927936\"\n                                },\n                                \"id\": 9732,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"32\",\n                                  \"id\": 9730,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"7084:1:38\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_2_by_1\",\n                                    \"typeString\": \"int_const 2\"\n                                  },\n                                  \"value\": \"2\"\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \"**\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"3536\",\n                                  \"id\": 9731,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"7089:2:38\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_56_by_1\",\n                                    \"typeString\": \"int_const 56\"\n                                  },\n                                  \"value\": \"56\"\n                                },\n                                \"src\": \"7084:7:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                  \"typeString\": \"int_const 72057594037927936\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                  \"typeString\": \"int_const 72057594037927936\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"components\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"condition\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                      },\n                                      \"id\": 9720,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"leftExpression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 9718,\n                                        \"name\": \"underlying\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 9686,\n                                        \"src\": \"7015:10:38\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      },\n                                      \"nodeType\": \"BinaryOperation\",\n                                      \"operator\": \"<\",\n                                      \"rightExpression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 9719,\n                                        \"name\": \"WETH_ADDRESS\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 9312,\n                                        \"src\": \"7028:12:38\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      },\n                                      \"src\": \"7015:25:38\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_bool\",\n                                        \"typeString\": \"bool\"\n                                      }\n                                    },\n                                    \"falseExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [\n                                        {\n                                          \"argumentTypes\": null,\n                                          \"id\": 9725,\n                                          \"name\": \"pair\",\n                                          \"nodeType\": \"Identifier\",\n                                          \"overloadedDeclarations\": [],\n                                          \"referencedDeclaration\": 9698,\n                                          \"src\": \"7073:4:38\",\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                          }\n                                        }\n                                      ],\n                                      \"expression\": {\n                                        \"argumentTypes\": [\n                                          {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                          }\n                                        ],\n                                        \"id\": 9724,\n                                        \"name\": \"price1TWAP\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 9511,\n                                        \"src\": \"7062:10:38\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                                          \"typeString\": \"function (address) view returns (uint256)\"\n                                        }\n                                      },\n                                      \"id\": 9726,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"kind\": \"functionCall\",\n                                      \"lValueRequested\": false,\n                                      \"names\": [],\n                                      \"nodeType\": \"FunctionCall\",\n                                      \"src\": \"7062:16:38\",\n                                      \"tryCall\": false,\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"id\": 9727,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"Conditional\",\n                                    \"src\": \"7015:63:38\",\n                                    \"trueExpression\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [\n                                        {\n                                          \"argumentTypes\": null,\n                                          \"id\": 9722,\n                                          \"name\": \"pair\",\n                                          \"nodeType\": \"Identifier\",\n                                          \"overloadedDeclarations\": [],\n                                          \"referencedDeclaration\": 9698,\n                                          \"src\": \"7054:4:38\",\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                          }\n                                        }\n                                      ],\n                                      \"expression\": {\n                                        \"argumentTypes\": [\n                                          {\n                                            \"typeIdentifier\": \"t_address\",\n                                            \"typeString\": \"address\"\n                                          }\n                                        ],\n                                        \"id\": 9721,\n                                        \"name\": \"price0TWAP\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 9417,\n                                        \"src\": \"7043:10:38\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                                          \"typeString\": \"function (address) view returns (uint256)\"\n                                        }\n                                      },\n                                      \"id\": 9723,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"kind\": \"functionCall\",\n                                      \"lValueRequested\": false,\n                                      \"names\": [],\n                                      \"nodeType\": \"FunctionCall\",\n                                      \"src\": \"7043:16:38\",\n                                      \"tryCall\": false,\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      }\n                                    },\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  }\n                                ],\n                                \"id\": 9728,\n                                \"isConstant\": false,\n                                \"isInlineArray\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"TupleExpression\",\n                                \"src\": \"7014:65:38\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"id\": 9729,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"div\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 11296,\n                              \"src\": \"7014:69:38\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 9733,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"7014:78:38\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 9734,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 11279,\n                          \"src\": \"7014:82:38\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 9736,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"7014:92:38\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 9737,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 11296,\n                      \"src\": \"7014:96:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9741,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"7014:105:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 9690,\n                  \"id\": 9742,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"7007:112:38\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9684,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"6534:87:38\",\n              \"text\": \" @dev Internal function returning the price in ETH of `underlying`.\"\n            },\n            \"id\": 9744,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9687,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9686,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9744,\n                  \"src\": \"6643:18:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9685,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"6643:7:38\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"6642:20:38\"\n            },\n            \"returnParameters\": {\n              \"id\": 9690,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9689,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9744,\n                  \"src\": \"6686:4:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9688,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"6686:4:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"6685:6:38\"\n            },\n            \"scope\": 9759,\n            \"src\": \"6627:532:38\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"baseFunctions\": [7813],\n            \"body\": {\n              \"id\": 9757,\n              \"nodeType\": \"Block\",\n              \"src\": \"7344:44:38\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9754,\n                        \"name\": \"underlying\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9747,\n                        \"src\": \"7369:10:38\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 9753,\n                      \"name\": \"_price\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9744,\n                      \"src\": \"7362:6:38\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9755,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"7362:18:38\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 9752,\n                  \"id\": 9756,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"7355:25:38\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9745,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"7167:98:38\",\n              \"text\": \" @dev Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\"\n            },\n            \"functionSelector\": \"aea91078\",\n            \"id\": 9758,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 9749,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"7315:8:38\"\n            },\n            \"parameters\": {\n              \"id\": 9748,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9747,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9758,\n                  \"src\": \"7286:18:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9746,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"7286:7:38\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"7285:20:38\"\n            },\n            \"returnParameters\": {\n              \"id\": 9752,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9751,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9758,\n                  \"src\": \"7338:4:38\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9750,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"7338:4:38\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"7337:6:38\"\n            },\n            \"scope\": 9759,\n            \"src\": \"7271:117:38\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 9760,\n        \"src\": \"1048:6343:38\"\n      }\n    ],\n    \"src\": \"312:7081:38\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/Keep3rPriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"Keep3rPriceOracle\": [9759]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 9260,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"312:23:38\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 11367,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 9760,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9261,\n        \"name\": \"ImportDirective\",\n        \"src\": \"339:74:38\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 11968,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"scope\": 9760,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9262,\n        \"name\": \"ImportDirective\",\n        \"src\": \"415:78:38\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 9760,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9263,\n        \"name\": \"ImportDirective\",\n        \"src\": \"497:46:38\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5867,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n          \"file\": \"../external/compound/CToken.sol\",\n          \"scope\": 9760,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9264,\n        \"name\": \"ImportDirective\",\n        \"src\": \"545:41:38\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 9760,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9265,\n        \"name\": \"ImportDirective\",\n        \"src\": \"588:41:38\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6103,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/keep3r/Keep3rV1Oracle.sol\",\n          \"file\": \"../external/keep3r/Keep3rV1Oracle.sol\",\n          \"scope\": 9760,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9266,\n        \"name\": \"ImportDirective\",\n        \"src\": \"633:47:38\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6467,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Pair.sol\",\n          \"file\": \"../external/uniswap/IUniswapV2Pair.sol\",\n          \"scope\": 9760,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9267,\n        \"name\": \"ImportDirective\",\n        \"src\": \"684:48:38\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6225,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Factory.sol\",\n          \"file\": \"../external/uniswap/IUniswapV2Factory.sol\",\n          \"scope\": 9760,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9268,\n        \"name\": \"ImportDirective\",\n        \"src\": \"734:51:38\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 7815,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n          \"file\": \"./BasePriceOracle.sol\",\n          \"scope\": 9760,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9269,\n        \"name\": \"ImportDirective\",\n        \"src\": \"789:31:38\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023, 7814],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [9759, 7814, 6023],\n          \"name\": \"Keep3rPriceOracle\",\n          \"scope\": 9760\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title Keep3rPriceOracle\\n @notice Returns prices from `Keep3rV1Oracle` or `SushiswapV1Oracle`.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n            },\n            \"id\": 9270,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"824:222:38\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 9271,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1078:11:38\"\n              }\n            ],\n            \"id\": 9272,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"1078:11:38\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"BasePriceOracle\",\n                  \"referencedDeclaration\": 7814,\n                  \"type\": \"contract BasePriceOracle\"\n                },\n                \"id\": 9273,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1091:15:38\"\n              }\n            ],\n            \"id\": 9274,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"1091:15:38\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 11366,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 9275,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1120:19:38\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 9276,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"1144:7:38\"\n              }\n            ],\n            \"id\": 9277,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"1114:38:38\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": true,\n              \"kind\": \"constructor\",\n              \"modifiers\": [null],\n              \"name\": \"\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateMutability\": \"nonpayable\",\n              \"virtual\": false,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Constructor that sets the Keep3rV1Oracle or SushiswapV1Oracle.\"\n                },\n                \"id\": 9278,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1160:88:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"sushiSwap\",\n                      \"overrides\": null,\n                      \"scope\": 9305,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"bool\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"bool\",\n                          \"type\": \"bool\"\n                        },\n                        \"id\": 9279,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1267:4:38\"\n                      }\n                    ],\n                    \"id\": 9280,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1267:14:38\"\n                  }\n                ],\n                \"id\": 9281,\n                \"name\": \"ParameterList\",\n                \"src\": \"1266:16:38\"\n              },\n              {\n                \"attributes\": {\n                  \"parameters\": [null]\n                },\n                \"children\": [],\n                \"id\": 9282,\n                \"name\": \"ParameterList\",\n                \"src\": \"1290:0:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9284]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"_rootOracle\",\n                          \"overrides\": null,\n                          \"scope\": 9304,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"contract Keep3rV1Oracle\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"contractScope\": null,\n                              \"name\": \"Keep3rV1Oracle\",\n                              \"referencedDeclaration\": 6102,\n                              \"type\": \"contract Keep3rV1Oracle\"\n                            },\n                            \"id\": 9283,\n                            \"name\": \"UserDefinedTypeName\",\n                            \"src\": \"1301:14:38\"\n                          }\n                        ],\n                        \"id\": 9284,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1301:26:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"contract Keep3rV1Oracle\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address_payable\",\n                                  \"typeString\": \"address payable\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 6102,\n                              \"type\": \"type(contract Keep3rV1Oracle)\",\n                              \"value\": \"Keep3rV1Oracle\"\n                            },\n                            \"id\": 9285,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1330:14:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"type\": \"address payable\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9280,\n                                  \"type\": \"bool\",\n                                  \"value\": \"sushiSwap\"\n                                },\n                                \"id\": 9286,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1345:9:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307866363741623163393134646545303642613046323634303331383835456137423237366137634461\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xf67Ab1c914deE06Ba0F264031885Ea7B276a7cDa\"\n                                },\n                                \"id\": 9287,\n                                \"name\": \"Literal\",\n                                \"src\": \"1357:42:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307837333335333830313932313431374634363533373763386438393863366634433032373032383243\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0x73353801921417F465377c8d898c6f4C0270282C\"\n                                },\n                                \"id\": 9288,\n                                \"name\": \"Literal\",\n                                \"src\": \"1402:42:38\"\n                              }\n                            ],\n                            \"id\": 9289,\n                            \"name\": \"Conditional\",\n                            \"src\": \"1345:99:38\"\n                          }\n                        ],\n                        \"id\": 9290,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1330:115:38\"\n                      }\n                    ],\n                    \"id\": 9291,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1301:144:38\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract Keep3rV1Oracle\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9308,\n                              \"type\": \"contract Keep3rV1Oracle\",\n                              \"value\": \"rootOracle\"\n                            },\n                            \"id\": 9292,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1456:10:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9284,\n                              \"type\": \"contract Keep3rV1Oracle\",\n                              \"value\": \"_rootOracle\"\n                            },\n                            \"id\": 9293,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1469:11:38\"\n                          }\n                        ],\n                        \"id\": 9294,\n                        \"name\": \"Assignment\",\n                        \"src\": \"1456:24:38\"\n                      }\n                    ],\n                    \"id\": 9295,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"1456:24:38\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract IUniswapV2Factory\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9315,\n                              \"type\": \"contract IUniswapV2Factory\",\n                              \"value\": \"uniswapV2Factory\"\n                            },\n                            \"id\": 9296,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1491:16:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"contract IUniswapV2Factory\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 6224,\n                                  \"type\": \"type(contract IUniswapV2Factory)\",\n                                  \"value\": \"IUniswapV2Factory\"\n                                },\n                                \"id\": 9297,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1510:17:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"factory\",\n                                      \"referencedDeclaration\": 6089,\n                                      \"type\": \"function () pure external returns (address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9284,\n                                          \"type\": \"contract Keep3rV1Oracle\",\n                                          \"value\": \"_rootOracle\"\n                                        },\n                                        \"id\": 9298,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1528:11:38\"\n                                      }\n                                    ],\n                                    \"id\": 9299,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1528:19:38\"\n                                  }\n                                ],\n                                \"id\": 9300,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1528:21:38\"\n                              }\n                            ],\n                            \"id\": 9301,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1510:40:38\"\n                          }\n                        ],\n                        \"id\": 9302,\n                        \"name\": \"Assignment\",\n                        \"src\": \"1491:59:38\"\n                      }\n                    ],\n                    \"id\": 9303,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"1491:59:38\"\n                  }\n                ],\n                \"id\": 9304,\n                \"name\": \"Block\",\n                \"src\": \"1290:268:38\"\n              }\n            ],\n            \"id\": 9305,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1254:304:38\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"e3cb23a5\",\n              \"mutability\": \"immutable\",\n              \"name\": \"rootOracle\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"contract Keep3rV1Oracle\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"Keep3rV1Oracle\",\n                  \"referencedDeclaration\": 6102,\n                  \"type\": \"contract Keep3rV1Oracle\"\n                },\n                \"id\": 9307,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1635:14:38\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Keep3rV1Oracle token contract object.\"\n                },\n                \"id\": 9306,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1566:63:38\"\n              }\n            ],\n            \"id\": 9308,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1635:42:38\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"040141e5\",\n              \"mutability\": \"constant\",\n              \"name\": \"WETH_ADDRESS\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"address\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"name\": \"address\",\n                  \"stateMutability\": \"nonpayable\",\n                  \"type\": \"address\"\n                },\n                \"id\": 9310,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"1746:7:38\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"hexvalue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"lValueRequested\": false,\n                  \"subdenomination\": null,\n                  \"token\": \"number\",\n                  \"type\": \"address payable\",\n                  \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                },\n                \"id\": 9311,\n                \"name\": \"Literal\",\n                \"src\": \"1785:42:38\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev WETH token contract address.\"\n                },\n                \"id\": 9309,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1686:54:38\"\n              }\n            ],\n            \"id\": 9312,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1746:81:38\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"59d0f713\",\n              \"mutability\": \"immutable\",\n              \"name\": \"uniswapV2Factory\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"contract IUniswapV2Factory\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"IUniswapV2Factory\",\n                  \"referencedDeclaration\": 6224,\n                  \"type\": \"contract IUniswapV2Factory\"\n                },\n                \"id\": 9314,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1902:17:38\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev UniswapV2Factory contract address.\"\n                },\n                \"id\": 9313,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1836:60:38\"\n              }\n            ],\n            \"id\": 9315,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1902:51:38\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"af8a9ba5\",\n              \"mutability\": \"constant\",\n              \"name\": \"MIN_TWAP_TIME\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"uint256\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 9317,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"2016:7:38\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"hexvalue\": \"3135\",\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"lValueRequested\": false,\n                  \"subdenomination\": \"minutes\",\n                  \"token\": \"number\",\n                  \"type\": \"int_const 900\",\n                  \"value\": \"15\"\n                },\n                \"id\": 9318,\n                \"name\": \"Literal\",\n                \"src\": \"2056:10:38\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Minimum TWAP interval.\"\n                },\n                \"id\": 9316,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1962:48:38\"\n              }\n            ],\n            \"id\": 9319,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"2016:50:38\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"09cd510e\",\n              \"mutability\": \"constant\",\n              \"name\": \"MAX_TWAP_TIME\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"uint256\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 9321,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"2129:7:38\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"hexvalue\": \"3630\",\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"lValueRequested\": false,\n                  \"subdenomination\": \"minutes\",\n                  \"token\": \"number\",\n                  \"type\": \"int_const 3600\",\n                  \"value\": \"60\"\n                },\n                \"id\": 9322,\n                \"name\": \"Literal\",\n                \"src\": \"2169:10:38\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Maximum TWAP interval.\"\n                },\n                \"id\": 9320,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"2075:48:38\"\n              }\n            ],\n            \"id\": 9323,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"2129:50:38\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"price0TWAP\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Return the TWAP value price0. Revert if TWAP time range is not within the threshold.\\n Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\n @param pair The pair to query for price0.\"\n                },\n                \"id\": 9324,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"2188:274:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pair\",\n                      \"overrides\": null,\n                      \"scope\": 9417,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 9325,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2488:7:38\"\n                      }\n                    ],\n                    \"id\": 9326,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2488:12:38\"\n                  }\n                ],\n                \"id\": 9327,\n                \"name\": \"ParameterList\",\n                \"src\": \"2487:14:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9417,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9328,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2525:4:38\"\n                      }\n                    ],\n                    \"id\": 9329,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2525:4:38\"\n                  }\n                ],\n                \"id\": 9330,\n                \"name\": \"ParameterList\",\n                \"src\": \"2524:6:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9332]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"length\",\n                          \"overrides\": null,\n                          \"scope\": 9416,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9331,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2542:4:38\"\n                          }\n                        ],\n                        \"id\": 9332,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2542:11:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"observationLength\",\n                              \"referencedDeclaration\": 6101,\n                              \"type\": \"function (address) view external returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9308,\n                                  \"type\": \"contract Keep3rV1Oracle\",\n                                  \"value\": \"rootOracle\"\n                                },\n                                \"id\": 9333,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2556:10:38\"\n                              }\n                            ],\n                            \"id\": 9334,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2556:28:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9326,\n                              \"type\": \"address\",\n                              \"value\": \"pair\"\n                            },\n                            \"id\": 9335,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2585:4:38\"\n                          }\n                        ],\n                        \"id\": 9336,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2556:34:38\"\n                      }\n                    ],\n                    \"id\": 9337,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2542:48:38\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_e063af599101f49b1aefac2e2e21d336b47c191121455c7cfeac6446eab7063b\",\n                                  \"typeString\": \"literal_string \\\"no length-1 observation\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 9338,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2601:7:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \">\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9332,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"length\"\n                                },\n                                \"id\": 9339,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2609:6:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"30\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 0\",\n                                  \"value\": \"0\"\n                                },\n                                \"id\": 9340,\n                                \"name\": \"Literal\",\n                                \"src\": \"2618:1:38\"\n                              }\n                            ],\n                            \"id\": 9341,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"2609:10:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"6e6f206c656e6774682d31206f62736572766174696f6e\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"no length-1 observation\\\"\",\n                              \"value\": \"no length-1 observation\"\n                            },\n                            \"id\": 9342,\n                            \"name\": \"Literal\",\n                            \"src\": \"2621:25:38\"\n                          }\n                        ],\n                        \"id\": 9343,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2601:46:38\"\n                      }\n                    ],\n                    \"id\": 9344,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2601:46:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9346, 9348, null]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"lastTime\",\n                          \"overrides\": null,\n                          \"scope\": 9416,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9345,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2659:4:38\"\n                          }\n                        ],\n                        \"id\": 9346,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2659:13:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"lastPx0Cumu\",\n                          \"overrides\": null,\n                          \"scope\": 9416,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9347,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2674:4:38\"\n                          }\n                        ],\n                        \"id\": 9348,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2674:16:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple(uint256,uint256,uint256)\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"observations\",\n                              \"referencedDeclaration\": 6094,\n                              \"type\": \"function (address,uint256) view external returns (uint256,uint256,uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9308,\n                                  \"type\": \"contract Keep3rV1Oracle\",\n                                  \"value\": \"rootOracle\"\n                                },\n                                \"id\": 9349,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2696:10:38\"\n                              }\n                            ],\n                            \"id\": 9350,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2696:23:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9326,\n                              \"type\": \"address\",\n                              \"value\": \"pair\"\n                            },\n                            \"id\": 9351,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2720:4:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"-\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9332,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"length\"\n                                },\n                                \"id\": 9352,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2726:6:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 9353,\n                                \"name\": \"Literal\",\n                                \"src\": \"2735:1:38\"\n                              }\n                            ],\n                            \"id\": 9354,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"2726:10:38\"\n                          }\n                        ],\n                        \"id\": 9355,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2696:41:38\"\n                      }\n                    ],\n                    \"id\": 9356,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2658:79:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9346,\n                              \"type\": \"uint256\",\n                              \"value\": \"lastTime\"\n                            },\n                            \"id\": 9357,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2752:8:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"-\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": -17,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"now\"\n                                },\n                                \"id\": 9358,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2763:3:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9319,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"MIN_TWAP_TIME\"\n                                },\n                                \"id\": 9359,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2769:13:38\"\n                              }\n                            ],\n                            \"id\": 9360,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"2763:19:38\"\n                          }\n                        ],\n                        \"id\": 9361,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"2752:30:38\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"tuple()\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_bool\",\n                                          \"typeString\": \"bool\"\n                                        },\n                                        {\n                                          \"typeIdentifier\": \"t_stringliteral_6fd64329f321240490bba710d2351e6a4e6b29cfc423a630ecf2d9953c12089a\",\n                                          \"typeString\": \"literal_string \\\"no length-2 observation\\\"\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [-18, -18],\n                                      \"referencedDeclaration\": -18,\n                                      \"type\": \"function (bool,string memory) pure\",\n                                      \"value\": \"require\"\n                                    },\n                                    \"id\": 9362,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2799:7:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \">\",\n                                      \"type\": \"bool\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9332,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"length\"\n                                        },\n                                        \"id\": 9363,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2807:6:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"31\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 1\",\n                                          \"value\": \"1\"\n                                        },\n                                        \"id\": 9364,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"2816:1:38\"\n                                      }\n                                    ],\n                                    \"id\": 9365,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"2807:10:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"6e6f206c656e6774682d32206f62736572766174696f6e\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"string\",\n                                      \"type\": \"literal_string \\\"no length-2 observation\\\"\",\n                                      \"value\": \"no length-2 observation\"\n                                    },\n                                    \"id\": 9366,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"2819:25:38\"\n                                  }\n                                ],\n                                \"id\": 9367,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2799:46:38\"\n                              }\n                            ],\n                            \"id\": 9368,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"2799:46:38\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"=\",\n                                  \"type\": \"tuple()\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isInlineArray\": false,\n                                      \"isLValue\": true,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": true,\n                                      \"type\": \"tuple(uint256,uint256,)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9346,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"lastTime\"\n                                        },\n                                        \"id\": 9369,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2861:8:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9348,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"lastPx0Cumu\"\n                                        },\n                                        \"id\": 9370,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2871:11:38\"\n                                      }\n                                    ],\n                                    \"id\": 9371,\n                                    \"name\": \"TupleExpression\",\n                                    \"src\": \"2860:25:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"tuple(uint256,uint256,uint256)\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            },\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"observations\",\n                                          \"referencedDeclaration\": 6094,\n                                          \"type\": \"function (address,uint256) view external returns (uint256,uint256,uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9308,\n                                              \"type\": \"contract Keep3rV1Oracle\",\n                                              \"value\": \"rootOracle\"\n                                            },\n                                            \"id\": 9372,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2888:10:38\"\n                                          }\n                                        ],\n                                        \"id\": 9373,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"2888:23:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9326,\n                                          \"type\": \"address\",\n                                          \"value\": \"pair\"\n                                        },\n                                        \"id\": 9374,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2912:4:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"-\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9332,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"length\"\n                                            },\n                                            \"id\": 9375,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2918:6:38\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"32\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 2\",\n                                              \"value\": \"2\"\n                                            },\n                                            \"id\": 9376,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"2927:1:38\"\n                                          }\n                                        ],\n                                        \"id\": 9377,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"2918:10:38\"\n                                      }\n                                    ],\n                                    \"id\": 9378,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2888:41:38\"\n                                  }\n                                ],\n                                \"id\": 9379,\n                                \"name\": \"Assignment\",\n                                \"src\": \"2860:69:38\"\n                              }\n                            ],\n                            \"id\": 9380,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"2860:69:38\"\n                          }\n                        ],\n                        \"id\": 9381,\n                        \"name\": \"Block\",\n                        \"src\": \"2784:157:38\"\n                      }\n                    ],\n                    \"id\": 9382,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"2748:193:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9384]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"elapsedTime\",\n                          \"overrides\": null,\n                          \"scope\": 9416,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9383,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2951:4:38\"\n                          }\n                        ],\n                        \"id\": 9384,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2951:16:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"-\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": -17,\n                              \"type\": \"uint256\",\n                              \"value\": \"now\"\n                            },\n                            \"id\": 9385,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2970:3:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9346,\n                              \"type\": \"uint256\",\n                              \"value\": \"lastTime\"\n                            },\n                            \"id\": 9386,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2976:8:38\"\n                          }\n                        ],\n                        \"id\": 9387,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"2970:14:38\"\n                      }\n                    ],\n                    \"id\": 9388,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2951:33:38\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_60f99bf84f56c06b6192bb33e3eea62114a9a93e00b64c343494092127c022e8\",\n                                  \"typeString\": \"literal_string \\\"bad TWAP time\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 9389,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2995:7:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"&&\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \">=\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9384,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"elapsedTime\"\n                                    },\n                                    \"id\": 9390,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3003:11:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9319,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"MIN_TWAP_TIME\"\n                                    },\n                                    \"id\": 9391,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3018:13:38\"\n                                  }\n                                ],\n                                \"id\": 9392,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"3003:28:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<=\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9384,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"elapsedTime\"\n                                    },\n                                    \"id\": 9393,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3035:11:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9323,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"MAX_TWAP_TIME\"\n                                    },\n                                    \"id\": 9394,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3050:13:38\"\n                                  }\n                                ],\n                                \"id\": 9395,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"3035:28:38\"\n                              }\n                            ],\n                            \"id\": 9396,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3003:60:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"62616420545741502074696d65\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"bad TWAP time\\\"\",\n                              \"value\": \"bad TWAP time\"\n                            },\n                            \"id\": 9397,\n                            \"name\": \"Literal\",\n                            \"src\": \"3065:15:38\"\n                          }\n                        ],\n                        \"id\": 9398,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2995:86:38\"\n                      }\n                    ],\n                    \"id\": 9399,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"2995:86:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9401]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"currPx0Cumu\",\n                          \"overrides\": null,\n                          \"scope\": 9416,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9400,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3092:4:38\"\n                          }\n                        ],\n                        \"id\": 9401,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3092:16:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9572,\n                              \"type\": \"function (address) view returns (uint256)\",\n                              \"value\": \"currentPx0Cumu\"\n                            },\n                            \"id\": 9402,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3111:14:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9326,\n                              \"type\": \"address\",\n                              \"value\": \"pair\"\n                            },\n                            \"id\": 9403,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3126:4:38\"\n                          }\n                        ],\n                        \"id\": 9404,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3111:20:38\"\n                      }\n                    ],\n                    \"id\": 9405,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3092:39:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 9330\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"/\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isInlineArray\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"-\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9401,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"currPx0Cumu\"\n                                    },\n                                    \"id\": 9406,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3150:11:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9348,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"lastPx0Cumu\"\n                                    },\n                                    \"id\": 9407,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3164:11:38\"\n                                  }\n                                ],\n                                \"id\": 9408,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"3150:25:38\"\n                              }\n                            ],\n                            \"id\": 9409,\n                            \"name\": \"TupleExpression\",\n                            \"src\": \"3149:27:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isInlineArray\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"-\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": -17,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"now\"\n                                    },\n                                    \"id\": 9410,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3180:3:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9346,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"lastTime\"\n                                    },\n                                    \"id\": 9411,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3186:8:38\"\n                                  }\n                                ],\n                                \"id\": 9412,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"3180:14:38\"\n                              }\n                            ],\n                            \"id\": 9413,\n                            \"name\": \"TupleExpression\",\n                            \"src\": \"3179:16:38\"\n                          }\n                        ],\n                        \"id\": 9414,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"3149:46:38\"\n                      }\n                    ],\n                    \"id\": 9415,\n                    \"name\": \"Return\",\n                    \"src\": \"3142:53:38\"\n                  }\n                ],\n                \"id\": 9416,\n                \"name\": \"Block\",\n                \"src\": \"2531:695:38\"\n              }\n            ],\n            \"id\": 9417,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"2468:758:38\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"price1TWAP\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Return the TWAP value price1. Revert if TWAP time range is not within the threshold.\\n Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\n @param pair The pair to query for price1.\"\n                },\n                \"id\": 9418,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"3234:274:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pair\",\n                      \"overrides\": null,\n                      \"scope\": 9511,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 9419,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"3534:7:38\"\n                      }\n                    ],\n                    \"id\": 9420,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"3534:12:38\"\n                  }\n                ],\n                \"id\": 9421,\n                \"name\": \"ParameterList\",\n                \"src\": \"3533:14:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9511,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9422,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"3571:4:38\"\n                      }\n                    ],\n                    \"id\": 9423,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"3571:4:38\"\n                  }\n                ],\n                \"id\": 9424,\n                \"name\": \"ParameterList\",\n                \"src\": \"3570:6:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9426]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"length\",\n                          \"overrides\": null,\n                          \"scope\": 9510,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9425,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3588:4:38\"\n                          }\n                        ],\n                        \"id\": 9426,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3588:11:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"observationLength\",\n                              \"referencedDeclaration\": 6101,\n                              \"type\": \"function (address) view external returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9308,\n                                  \"type\": \"contract Keep3rV1Oracle\",\n                                  \"value\": \"rootOracle\"\n                                },\n                                \"id\": 9427,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3602:10:38\"\n                              }\n                            ],\n                            \"id\": 9428,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"3602:28:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9420,\n                              \"type\": \"address\",\n                              \"value\": \"pair\"\n                            },\n                            \"id\": 9429,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3631:4:38\"\n                          }\n                        ],\n                        \"id\": 9430,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3602:34:38\"\n                      }\n                    ],\n                    \"id\": 9431,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3588:48:38\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_e063af599101f49b1aefac2e2e21d336b47c191121455c7cfeac6446eab7063b\",\n                                  \"typeString\": \"literal_string \\\"no length-1 observation\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 9432,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3647:7:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \">\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9426,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"length\"\n                                },\n                                \"id\": 9433,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3655:6:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"30\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 0\",\n                                  \"value\": \"0\"\n                                },\n                                \"id\": 9434,\n                                \"name\": \"Literal\",\n                                \"src\": \"3664:1:38\"\n                              }\n                            ],\n                            \"id\": 9435,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3655:10:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"6e6f206c656e6774682d31206f62736572766174696f6e\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"no length-1 observation\\\"\",\n                              \"value\": \"no length-1 observation\"\n                            },\n                            \"id\": 9436,\n                            \"name\": \"Literal\",\n                            \"src\": \"3667:25:38\"\n                          }\n                        ],\n                        \"id\": 9437,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3647:46:38\"\n                      }\n                    ],\n                    \"id\": 9438,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"3647:46:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9440, null, 9442]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"lastTime\",\n                          \"overrides\": null,\n                          \"scope\": 9510,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9439,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3705:4:38\"\n                          }\n                        ],\n                        \"id\": 9440,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3705:13:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"lastPx1Cumu\",\n                          \"overrides\": null,\n                          \"scope\": 9510,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9441,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3722:4:38\"\n                          }\n                        ],\n                        \"id\": 9442,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3722:16:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple(uint256,uint256,uint256)\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"observations\",\n                              \"referencedDeclaration\": 6094,\n                              \"type\": \"function (address,uint256) view external returns (uint256,uint256,uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9308,\n                                  \"type\": \"contract Keep3rV1Oracle\",\n                                  \"value\": \"rootOracle\"\n                                },\n                                \"id\": 9443,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3742:10:38\"\n                              }\n                            ],\n                            \"id\": 9444,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"3742:23:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9420,\n                              \"type\": \"address\",\n                              \"value\": \"pair\"\n                            },\n                            \"id\": 9445,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3766:4:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"-\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9426,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"length\"\n                                },\n                                \"id\": 9446,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3772:6:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 9447,\n                                \"name\": \"Literal\",\n                                \"src\": \"3781:1:38\"\n                              }\n                            ],\n                            \"id\": 9448,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3772:10:38\"\n                          }\n                        ],\n                        \"id\": 9449,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3742:41:38\"\n                      }\n                    ],\n                    \"id\": 9450,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3704:79:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9440,\n                              \"type\": \"uint256\",\n                              \"value\": \"lastTime\"\n                            },\n                            \"id\": 9451,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3798:8:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"-\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": -17,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"now\"\n                                },\n                                \"id\": 9452,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3809:3:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9319,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"MIN_TWAP_TIME\"\n                                },\n                                \"id\": 9453,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3815:13:38\"\n                              }\n                            ],\n                            \"id\": 9454,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3809:19:38\"\n                          }\n                        ],\n                        \"id\": 9455,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"3798:30:38\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"tuple()\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_bool\",\n                                          \"typeString\": \"bool\"\n                                        },\n                                        {\n                                          \"typeIdentifier\": \"t_stringliteral_6fd64329f321240490bba710d2351e6a4e6b29cfc423a630ecf2d9953c12089a\",\n                                          \"typeString\": \"literal_string \\\"no length-2 observation\\\"\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [-18, -18],\n                                      \"referencedDeclaration\": -18,\n                                      \"type\": \"function (bool,string memory) pure\",\n                                      \"value\": \"require\"\n                                    },\n                                    \"id\": 9456,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3845:7:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \">\",\n                                      \"type\": \"bool\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9426,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"length\"\n                                        },\n                                        \"id\": 9457,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3853:6:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"31\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 1\",\n                                          \"value\": \"1\"\n                                        },\n                                        \"id\": 9458,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"3862:1:38\"\n                                      }\n                                    ],\n                                    \"id\": 9459,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"3853:10:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"6e6f206c656e6774682d32206f62736572766174696f6e\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"string\",\n                                      \"type\": \"literal_string \\\"no length-2 observation\\\"\",\n                                      \"value\": \"no length-2 observation\"\n                                    },\n                                    \"id\": 9460,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"3865:25:38\"\n                                  }\n                                ],\n                                \"id\": 9461,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3845:46:38\"\n                              }\n                            ],\n                            \"id\": 9462,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"3845:46:38\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"=\",\n                                  \"type\": \"tuple()\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isInlineArray\": false,\n                                      \"isLValue\": true,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": true,\n                                      \"type\": \"tuple(uint256,,uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9440,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"lastTime\"\n                                        },\n                                        \"id\": 9463,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3907:8:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9442,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"lastPx1Cumu\"\n                                        },\n                                        \"id\": 9464,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3919:11:38\"\n                                      }\n                                    ],\n                                    \"id\": 9465,\n                                    \"name\": \"TupleExpression\",\n                                    \"src\": \"3906:25:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"tuple(uint256,uint256,uint256)\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            },\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"observations\",\n                                          \"referencedDeclaration\": 6094,\n                                          \"type\": \"function (address,uint256) view external returns (uint256,uint256,uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9308,\n                                              \"type\": \"contract Keep3rV1Oracle\",\n                                              \"value\": \"rootOracle\"\n                                            },\n                                            \"id\": 9466,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"3934:10:38\"\n                                          }\n                                        ],\n                                        \"id\": 9467,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"3934:23:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9420,\n                                          \"type\": \"address\",\n                                          \"value\": \"pair\"\n                                        },\n                                        \"id\": 9468,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3958:4:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"-\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9426,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"length\"\n                                            },\n                                            \"id\": 9469,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"3964:6:38\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"32\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"number\",\n                                              \"type\": \"int_const 2\",\n                                              \"value\": \"2\"\n                                            },\n                                            \"id\": 9470,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"3973:1:38\"\n                                          }\n                                        ],\n                                        \"id\": 9471,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"3964:10:38\"\n                                      }\n                                    ],\n                                    \"id\": 9472,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3934:41:38\"\n                                  }\n                                ],\n                                \"id\": 9473,\n                                \"name\": \"Assignment\",\n                                \"src\": \"3906:69:38\"\n                              }\n                            ],\n                            \"id\": 9474,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"3906:69:38\"\n                          }\n                        ],\n                        \"id\": 9475,\n                        \"name\": \"Block\",\n                        \"src\": \"3830:157:38\"\n                      }\n                    ],\n                    \"id\": 9476,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"3794:193:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9478]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"elapsedTime\",\n                          \"overrides\": null,\n                          \"scope\": 9510,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9477,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3997:4:38\"\n                          }\n                        ],\n                        \"id\": 9478,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3997:16:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"-\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": -17,\n                              \"type\": \"uint256\",\n                              \"value\": \"now\"\n                            },\n                            \"id\": 9479,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4016:3:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9440,\n                              \"type\": \"uint256\",\n                              \"value\": \"lastTime\"\n                            },\n                            \"id\": 9480,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4022:8:38\"\n                          }\n                        ],\n                        \"id\": 9481,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4016:14:38\"\n                      }\n                    ],\n                    \"id\": 9482,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3997:33:38\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_60f99bf84f56c06b6192bb33e3eea62114a9a93e00b64c343494092127c022e8\",\n                                  \"typeString\": \"literal_string \\\"bad TWAP time\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 9483,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4041:7:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_bool\",\n                                \"typeString\": \"bool\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"&&\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \">=\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9478,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"elapsedTime\"\n                                    },\n                                    \"id\": 9484,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4049:11:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9319,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"MIN_TWAP_TIME\"\n                                    },\n                                    \"id\": 9485,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4064:13:38\"\n                                  }\n                                ],\n                                \"id\": 9486,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"4049:28:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<=\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9478,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"elapsedTime\"\n                                    },\n                                    \"id\": 9487,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4081:11:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9323,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"MAX_TWAP_TIME\"\n                                    },\n                                    \"id\": 9488,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4096:13:38\"\n                                  }\n                                ],\n                                \"id\": 9489,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"4081:28:38\"\n                              }\n                            ],\n                            \"id\": 9490,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"4049:60:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"62616420545741502074696d65\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"bad TWAP time\\\"\",\n                              \"value\": \"bad TWAP time\"\n                            },\n                            \"id\": 9491,\n                            \"name\": \"Literal\",\n                            \"src\": \"4111:15:38\"\n                          }\n                        ],\n                        \"id\": 9492,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"4041:86:38\"\n                      }\n                    ],\n                    \"id\": 9493,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4041:86:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9495]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"currPx1Cumu\",\n                          \"overrides\": null,\n                          \"scope\": 9510,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9494,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"4138:4:38\"\n                          }\n                        ],\n                        \"id\": 9495,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"4138:16:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9633,\n                              \"type\": \"function (address) view returns (uint256)\",\n                              \"value\": \"currentPx1Cumu\"\n                            },\n                            \"id\": 9496,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4157:14:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9420,\n                              \"type\": \"address\",\n                              \"value\": \"pair\"\n                            },\n                            \"id\": 9497,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4172:4:38\"\n                          }\n                        ],\n                        \"id\": 9498,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"4157:20:38\"\n                      }\n                    ],\n                    \"id\": 9499,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"4138:39:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 9424\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"/\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isInlineArray\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"-\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9495,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"currPx1Cumu\"\n                                    },\n                                    \"id\": 9500,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4196:11:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9442,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"lastPx1Cumu\"\n                                    },\n                                    \"id\": 9501,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4210:11:38\"\n                                  }\n                                ],\n                                \"id\": 9502,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"4196:25:38\"\n                              }\n                            ],\n                            \"id\": 9503,\n                            \"name\": \"TupleExpression\",\n                            \"src\": \"4195:27:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isInlineArray\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"-\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": -17,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"now\"\n                                    },\n                                    \"id\": 9504,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4226:3:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9440,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"lastTime\"\n                                    },\n                                    \"id\": 9505,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4232:8:38\"\n                                  }\n                                ],\n                                \"id\": 9506,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"4226:14:38\"\n                              }\n                            ],\n                            \"id\": 9507,\n                            \"name\": \"TupleExpression\",\n                            \"src\": \"4225:16:38\"\n                          }\n                        ],\n                        \"id\": 9508,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4195:46:38\"\n                      }\n                    ],\n                    \"id\": 9509,\n                    \"name\": \"Return\",\n                    \"src\": \"4188:53:38\"\n                  }\n                ],\n                \"id\": 9510,\n                \"name\": \"Block\",\n                \"src\": \"3577:695:38\"\n              }\n            ],\n            \"id\": 9511,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"3514:758:38\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"currentPx0Cumu\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Return the current price0 cumulative value on Uniswap.\\n Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\n @param pair The uniswap pair to query for price0 cumulative value.\"\n                },\n                \"id\": 9512,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"4280:269:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pair\",\n                      \"overrides\": null,\n                      \"scope\": 9572,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 9513,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4579:7:38\"\n                      }\n                    ],\n                    \"id\": 9514,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4579:12:38\"\n                  }\n                ],\n                \"id\": 9515,\n                \"name\": \"ParameterList\",\n                \"src\": \"4578:14:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"px0Cumu\",\n                      \"overrides\": null,\n                      \"scope\": 9572,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9516,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4616:4:38\"\n                      }\n                    ],\n                    \"id\": 9517,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4616:12:38\"\n                  }\n                ],\n                \"id\": 9518,\n                \"name\": \"ParameterList\",\n                \"src\": \"4615:14:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9520]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"currTime\",\n                          \"overrides\": null,\n                          \"scope\": 9571,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint32\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint32\",\n                              \"type\": \"uint32\"\n                            },\n                            \"id\": 9519,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"4641:6:38\"\n                          }\n                        ],\n                        \"id\": 9520,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"4641:15:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint32\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"type\": \"type(uint32)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"uint32\",\n                                  \"type\": null\n                                },\n                                \"id\": 9521,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"4659:6:38\"\n                              }\n                            ],\n                            \"id\": 9522,\n                            \"name\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"4659:6:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": -17,\n                              \"type\": \"uint256\",\n                              \"value\": \"now\"\n                            },\n                            \"id\": 9523,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4666:3:38\"\n                          }\n                        ],\n                        \"id\": 9524,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"4659:11:38\"\n                      }\n                    ],\n                    \"id\": 9525,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"4641:29:38\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9517,\n                              \"type\": \"uint256\",\n                              \"value\": \"px0Cumu\"\n                            },\n                            \"id\": 9526,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4681:7:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"price0CumulativeLast\",\n                                  \"referencedDeclaration\": 6413,\n                                  \"type\": \"function () view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract IUniswapV2Pair\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 6466,\n                                          \"type\": \"type(contract IUniswapV2Pair)\",\n                                          \"value\": \"IUniswapV2Pair\"\n                                        },\n                                        \"id\": 9527,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"4691:14:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9514,\n                                          \"type\": \"address\",\n                                          \"value\": \"pair\"\n                                        },\n                                        \"id\": 9528,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"4706:4:38\"\n                                      }\n                                    ],\n                                    \"id\": 9529,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"4691:20:38\"\n                                  }\n                                ],\n                                \"id\": 9530,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"4691:41:38\"\n                              }\n                            ],\n                            \"id\": 9531,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"4691:43:38\"\n                          }\n                        ],\n                        \"id\": 9532,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4681:53:38\"\n                      }\n                    ],\n                    \"id\": 9533,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4681:53:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9535, 9537, 9539]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"reserve0\",\n                          \"overrides\": null,\n                          \"scope\": 9571,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9534,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"4746:4:38\"\n                          }\n                        ],\n                        \"id\": 9535,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"4746:13:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"reserve1\",\n                          \"overrides\": null,\n                          \"scope\": 9571,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9536,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"4761:4:38\"\n                          }\n                        ],\n                        \"id\": 9537,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"4761:13:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"lastTime\",\n                          \"overrides\": null,\n                          \"scope\": 9571,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint32\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint32\",\n                              \"type\": \"uint32\"\n                            },\n                            \"id\": 9538,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"4776:6:38\"\n                          }\n                        ],\n                        \"id\": 9539,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"4776:15:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple(uint112,uint112,uint32)\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"getReserves\",\n                              \"referencedDeclaration\": 6408,\n                              \"type\": \"function () view external returns (uint112,uint112,uint32)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract IUniswapV2Pair\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 6466,\n                                      \"type\": \"type(contract IUniswapV2Pair)\",\n                                      \"value\": \"IUniswapV2Pair\"\n                                    },\n                                    \"id\": 9540,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4795:14:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9514,\n                                      \"type\": \"address\",\n                                      \"value\": \"pair\"\n                                    },\n                                    \"id\": 9541,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4810:4:38\"\n                                  }\n                                ],\n                                \"id\": 9542,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"4795:20:38\"\n                              }\n                            ],\n                            \"id\": 9543,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"4795:32:38\"\n                          }\n                        ],\n                        \"id\": 9544,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"4795:34:38\"\n                      }\n                    ],\n                    \"id\": 9545,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"4745:84:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"!=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9539,\n                              \"type\": \"uint32\",\n                              \"value\": \"lastTime\"\n                            },\n                            \"id\": 9546,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4844:8:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": -17,\n                              \"type\": \"uint256\",\n                              \"value\": \"now\"\n                            },\n                            \"id\": 9547,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4856:3:38\"\n                          }\n                        ],\n                        \"id\": 9548,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4844:15:38\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"assignments\": [9550]\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"constant\": false,\n                                  \"mutability\": \"mutable\",\n                                  \"name\": \"timeElapsed\",\n                                  \"overrides\": null,\n                                  \"scope\": 9569,\n                                  \"stateVariable\": false,\n                                  \"storageLocation\": \"default\",\n                                  \"type\": \"uint32\",\n                                  \"value\": null,\n                                  \"visibility\": \"internal\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint32\",\n                                      \"type\": \"uint32\"\n                                    },\n                                    \"id\": 9549,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"4876:6:38\"\n                                  }\n                                ],\n                                \"id\": 9550,\n                                \"name\": \"VariableDeclaration\",\n                                \"src\": \"4876:18:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint32\",\n                                    \"typeString\": \"uint32\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"-\",\n                                  \"type\": \"uint32\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9520,\n                                      \"type\": \"uint32\",\n                                      \"value\": \"currTime\"\n                                    },\n                                    \"id\": 9551,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4897:8:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9539,\n                                      \"type\": \"uint32\",\n                                      \"value\": \"lastTime\"\n                                    },\n                                    \"id\": 9552,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4908:8:38\"\n                                  }\n                                ],\n                                \"id\": 9553,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"4897:19:38\"\n                              }\n                            ],\n                            \"id\": 9554,\n                            \"name\": \"VariableDeclarationStatement\",\n                            \"src\": \"4876:40:38\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"+=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9517,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"px0Cumu\"\n                                    },\n                                    \"id\": 9555,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4954:7:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"*\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"type\": \"type(uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"name\": \"uint\",\n                                                  \"type\": null\n                                                },\n                                                \"id\": 9556,\n                                                \"name\": \"ElementaryTypeName\",\n                                                \"src\": \"4965:4:38\"\n                                              }\n                                            ],\n                                            \"id\": 9557,\n                                            \"name\": \"ElementaryTypeNameExpression\",\n                                            \"src\": \"4965:4:38\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"/\",\n                                              \"type\": \"uint256\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isInlineArray\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"type\": \"uint256\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"commonType\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                      },\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"operator\": \"<<\",\n                                                      \"type\": \"uint256\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 9537,\n                                                          \"type\": \"uint256\",\n                                                          \"value\": \"reserve1\"\n                                                        },\n                                                        \"id\": 9558,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"4971:8:38\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"hexvalue\": \"313132\",\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": true,\n                                                          \"lValueRequested\": false,\n                                                          \"subdenomination\": null,\n                                                          \"token\": \"number\",\n                                                          \"type\": \"int_const 112\",\n                                                          \"value\": \"112\"\n                                                        },\n                                                        \"id\": 9559,\n                                                        \"name\": \"Literal\",\n                                                        \"src\": \"4983:3:38\"\n                                                      }\n                                                    ],\n                                                    \"id\": 9560,\n                                                    \"name\": \"BinaryOperation\",\n                                                    \"src\": \"4971:15:38\"\n                                                  }\n                                                ],\n                                                \"id\": 9561,\n                                                \"name\": \"TupleExpression\",\n                                                \"src\": \"4970:17:38\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 9535,\n                                                  \"type\": \"uint256\",\n                                                  \"value\": \"reserve0\"\n                                                },\n                                                \"id\": 9562,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"4990:8:38\"\n                                              }\n                                            ],\n                                            \"id\": 9563,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"4970:28:38\"\n                                          }\n                                        ],\n                                        \"id\": 9564,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"4965:34:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9550,\n                                          \"type\": \"uint32\",\n                                          \"value\": \"timeElapsed\"\n                                        },\n                                        \"id\": 9565,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5002:11:38\"\n                                      }\n                                    ],\n                                    \"id\": 9566,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"4965:48:38\"\n                                  }\n                                ],\n                                \"id\": 9567,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4954:59:38\"\n                              }\n                            ],\n                            \"id\": 9568,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4954:59:38\"\n                          }\n                        ],\n                        \"id\": 9569,\n                        \"name\": \"Block\",\n                        \"src\": \"4861:187:38\"\n                      }\n                    ],\n                    \"id\": 9570,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"4840:208:38\"\n                  }\n                ],\n                \"id\": 9571,\n                \"name\": \"Block\",\n                \"src\": \"4630:425:38\"\n              }\n            ],\n            \"id\": 9572,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"4555:500:38\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"currentPx1Cumu\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Return the current price1 cumulative value on Uniswap.\\n Copied from: https://github.com/AlphaFinanceLab/homora-v2/blob/master/contracts/oracle/BaseKP3ROracle.sol\\n @param pair The uniswap pair to query for price1 cumulative value.\"\n                },\n                \"id\": 9573,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"5063:269:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pair\",\n                      \"overrides\": null,\n                      \"scope\": 9633,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 9574,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"5362:7:38\"\n                      }\n                    ],\n                    \"id\": 9575,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"5362:12:38\"\n                  }\n                ],\n                \"id\": 9576,\n                \"name\": \"ParameterList\",\n                \"src\": \"5361:14:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"px1Cumu\",\n                      \"overrides\": null,\n                      \"scope\": 9633,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9577,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"5399:4:38\"\n                      }\n                    ],\n                    \"id\": 9578,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"5399:12:38\"\n                  }\n                ],\n                \"id\": 9579,\n                \"name\": \"ParameterList\",\n                \"src\": \"5398:14:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9581]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"currTime\",\n                          \"overrides\": null,\n                          \"scope\": 9632,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint32\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint32\",\n                              \"type\": \"uint32\"\n                            },\n                            \"id\": 9580,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"5424:6:38\"\n                          }\n                        ],\n                        \"id\": 9581,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"5424:15:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint32\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"type\": \"type(uint32)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"uint32\",\n                                  \"type\": null\n                                },\n                                \"id\": 9582,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"5442:6:38\"\n                              }\n                            ],\n                            \"id\": 9583,\n                            \"name\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"5442:6:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": -17,\n                              \"type\": \"uint256\",\n                              \"value\": \"now\"\n                            },\n                            \"id\": 9584,\n                            \"name\": \"Identifier\",\n                            \"src\": \"5449:3:38\"\n                          }\n                        ],\n                        \"id\": 9585,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"5442:11:38\"\n                      }\n                    ],\n                    \"id\": 9586,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"5424:29:38\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9578,\n                              \"type\": \"uint256\",\n                              \"value\": \"px1Cumu\"\n                            },\n                            \"id\": 9587,\n                            \"name\": \"Identifier\",\n                            \"src\": \"5464:7:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"price1CumulativeLast\",\n                                  \"referencedDeclaration\": 6418,\n                                  \"type\": \"function () view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract IUniswapV2Pair\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 6466,\n                                          \"type\": \"type(contract IUniswapV2Pair)\",\n                                          \"value\": \"IUniswapV2Pair\"\n                                        },\n                                        \"id\": 9588,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5474:14:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9575,\n                                          \"type\": \"address\",\n                                          \"value\": \"pair\"\n                                        },\n                                        \"id\": 9589,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5489:4:38\"\n                                      }\n                                    ],\n                                    \"id\": 9590,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"5474:20:38\"\n                                  }\n                                ],\n                                \"id\": 9591,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"5474:41:38\"\n                              }\n                            ],\n                            \"id\": 9592,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"5474:43:38\"\n                          }\n                        ],\n                        \"id\": 9593,\n                        \"name\": \"Assignment\",\n                        \"src\": \"5464:53:38\"\n                      }\n                    ],\n                    \"id\": 9594,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"5464:53:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9596, 9598, 9600]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"reserve0\",\n                          \"overrides\": null,\n                          \"scope\": 9632,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9595,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"5529:4:38\"\n                          }\n                        ],\n                        \"id\": 9596,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"5529:13:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"reserve1\",\n                          \"overrides\": null,\n                          \"scope\": 9632,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9597,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"5544:4:38\"\n                          }\n                        ],\n                        \"id\": 9598,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"5544:13:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"lastTime\",\n                          \"overrides\": null,\n                          \"scope\": 9632,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint32\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint32\",\n                              \"type\": \"uint32\"\n                            },\n                            \"id\": 9599,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"5559:6:38\"\n                          }\n                        ],\n                        \"id\": 9600,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"5559:15:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple(uint112,uint112,uint32)\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"getReserves\",\n                              \"referencedDeclaration\": 6408,\n                              \"type\": \"function () view external returns (uint112,uint112,uint32)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract IUniswapV2Pair\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 6466,\n                                      \"type\": \"type(contract IUniswapV2Pair)\",\n                                      \"value\": \"IUniswapV2Pair\"\n                                    },\n                                    \"id\": 9601,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5578:14:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9575,\n                                      \"type\": \"address\",\n                                      \"value\": \"pair\"\n                                    },\n                                    \"id\": 9602,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5593:4:38\"\n                                  }\n                                ],\n                                \"id\": 9603,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"5578:20:38\"\n                              }\n                            ],\n                            \"id\": 9604,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"5578:32:38\"\n                          }\n                        ],\n                        \"id\": 9605,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"5578:34:38\"\n                      }\n                    ],\n                    \"id\": 9606,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"5528:84:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint32\",\n                            \"typeString\": \"uint32\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"!=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9600,\n                              \"type\": \"uint32\",\n                              \"value\": \"lastTime\"\n                            },\n                            \"id\": 9607,\n                            \"name\": \"Identifier\",\n                            \"src\": \"5627:8:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9581,\n                              \"type\": \"uint32\",\n                              \"value\": \"currTime\"\n                            },\n                            \"id\": 9608,\n                            \"name\": \"Identifier\",\n                            \"src\": \"5639:8:38\"\n                          }\n                        ],\n                        \"id\": 9609,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"5627:20:38\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"assignments\": [9611]\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"constant\": false,\n                                  \"mutability\": \"mutable\",\n                                  \"name\": \"timeElapsed\",\n                                  \"overrides\": null,\n                                  \"scope\": 9630,\n                                  \"stateVariable\": false,\n                                  \"storageLocation\": \"default\",\n                                  \"type\": \"uint32\",\n                                  \"value\": null,\n                                  \"visibility\": \"internal\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint32\",\n                                      \"type\": \"uint32\"\n                                    },\n                                    \"id\": 9610,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"5664:6:38\"\n                                  }\n                                ],\n                                \"id\": 9611,\n                                \"name\": \"VariableDeclaration\",\n                                \"src\": \"5664:18:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint32\",\n                                    \"typeString\": \"uint32\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"-\",\n                                  \"type\": \"uint32\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9581,\n                                      \"type\": \"uint32\",\n                                      \"value\": \"currTime\"\n                                    },\n                                    \"id\": 9612,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5685:8:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9600,\n                                      \"type\": \"uint32\",\n                                      \"value\": \"lastTime\"\n                                    },\n                                    \"id\": 9613,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5696:8:38\"\n                                  }\n                                ],\n                                \"id\": 9614,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"5685:19:38\"\n                              }\n                            ],\n                            \"id\": 9615,\n                            \"name\": \"VariableDeclarationStatement\",\n                            \"src\": \"5664:40:38\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"+=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9578,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"px1Cumu\"\n                                    },\n                                    \"id\": 9616,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5742:7:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"*\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"type\": \"type(uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"name\": \"uint\",\n                                                  \"type\": null\n                                                },\n                                                \"id\": 9617,\n                                                \"name\": \"ElementaryTypeName\",\n                                                \"src\": \"5753:4:38\"\n                                              }\n                                            ],\n                                            \"id\": 9618,\n                                            \"name\": \"ElementaryTypeNameExpression\",\n                                            \"src\": \"5753:4:38\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_uint256\",\n                                                \"typeString\": \"uint256\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"/\",\n                                              \"type\": \"uint256\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isInlineArray\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"type\": \"uint256\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"commonType\": {\n                                                        \"typeIdentifier\": \"t_uint256\",\n                                                        \"typeString\": \"uint256\"\n                                                      },\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"operator\": \"<<\",\n                                                      \"type\": \"uint256\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 9596,\n                                                          \"type\": \"uint256\",\n                                                          \"value\": \"reserve0\"\n                                                        },\n                                                        \"id\": 9619,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"5759:8:38\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"hexvalue\": \"313132\",\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": true,\n                                                          \"lValueRequested\": false,\n                                                          \"subdenomination\": null,\n                                                          \"token\": \"number\",\n                                                          \"type\": \"int_const 112\",\n                                                          \"value\": \"112\"\n                                                        },\n                                                        \"id\": 9620,\n                                                        \"name\": \"Literal\",\n                                                        \"src\": \"5771:3:38\"\n                                                      }\n                                                    ],\n                                                    \"id\": 9621,\n                                                    \"name\": \"BinaryOperation\",\n                                                    \"src\": \"5759:15:38\"\n                                                  }\n                                                ],\n                                                \"id\": 9622,\n                                                \"name\": \"TupleExpression\",\n                                                \"src\": \"5758:17:38\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 9598,\n                                                  \"type\": \"uint256\",\n                                                  \"value\": \"reserve1\"\n                                                },\n                                                \"id\": 9623,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"5778:8:38\"\n                                              }\n                                            ],\n                                            \"id\": 9624,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"5758:28:38\"\n                                          }\n                                        ],\n                                        \"id\": 9625,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"5753:34:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9611,\n                                          \"type\": \"uint32\",\n                                          \"value\": \"timeElapsed\"\n                                        },\n                                        \"id\": 9626,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"5790:11:38\"\n                                      }\n                                    ],\n                                    \"id\": 9627,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"5753:48:38\"\n                                  }\n                                ],\n                                \"id\": 9628,\n                                \"name\": \"Assignment\",\n                                \"src\": \"5742:59:38\"\n                              }\n                            ],\n                            \"id\": 9629,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"5742:59:38\"\n                          }\n                        ],\n                        \"id\": 9630,\n                        \"name\": \"Block\",\n                        \"src\": \"5649:187:38\"\n                      }\n                    ],\n                    \"id\": 9631,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"5623:213:38\"\n                  }\n                ],\n                \"id\": 9632,\n                \"name\": \"Block\",\n                \"src\": \"5413:430:38\"\n              }\n            ],\n            \"id\": 9633,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"5338:505:38\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 9759,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\n Prices are expected to be scaled by `10 ** (36 - underlyingDecimals)`.\"\n                },\n                \"id\": 9634,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"5855:190:38\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 9638,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"6103:8:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 9683,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 9635,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"6079:6:38\"\n                      }\n                    ],\n                    \"id\": 9636,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"6079:13:38\"\n                  }\n                ],\n                \"id\": 9637,\n                \"name\": \"ParameterList\",\n                \"src\": \"6078:15:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9683,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9639,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"6126:4:38\"\n                      }\n                    ],\n                    \"id\": 9640,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"6126:4:38\"\n                  }\n                ],\n                \"id\": 9641,\n                \"name\": \"ParameterList\",\n                \"src\": \"6125:6:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"bool\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"isCEther\",\n                              \"referencedDeclaration\": 5805,\n                              \"type\": \"function () view external returns (bool)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9636,\n                                  \"type\": \"contract CToken\",\n                                  \"value\": \"cToken\"\n                                },\n                                \"id\": 9642,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6179:6:38\"\n                              }\n                            ],\n                            \"id\": 9643,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"6179:15:38\"\n                          }\n                        ],\n                        \"id\": 9644,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"6179:17:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"functionReturnParameters\": 9641\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 9645,\n                            \"name\": \"Literal\",\n                            \"src\": \"6205:4:38\"\n                          }\n                        ],\n                        \"id\": 9646,\n                        \"name\": \"Return\",\n                        \"src\": \"6198:11:38\"\n                      }\n                    ],\n                    \"id\": 9647,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"6175:34:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9649]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlying\",\n                          \"overrides\": null,\n                          \"scope\": 9682,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 9648,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"6269:7:38\"\n                          }\n                        ],\n                        \"id\": 9649,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"6269:18:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"underlying\",\n                              \"referencedDeclaration\": 5711,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract CErc20\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 5723,\n                                      \"type\": \"type(contract CErc20)\",\n                                      \"value\": \"CErc20\"\n                                    },\n                                    \"id\": 9650,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"6290:6:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                              \"typeString\": \"contract CToken\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 9651,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"6297:7:38\"\n                                          }\n                                        ],\n                                        \"id\": 9652,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"6297:7:38\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9636,\n                                          \"type\": \"contract CToken\",\n                                          \"value\": \"cToken\"\n                                        },\n                                        \"id\": 9653,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"6305:6:38\"\n                                      }\n                                    ],\n                                    \"id\": 9654,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"6297:15:38\"\n                                  }\n                                ],\n                                \"id\": 9655,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"6290:23:38\"\n                              }\n                            ],\n                            \"id\": 9656,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"6290:34:38\"\n                          }\n                        ],\n                        \"id\": 9657,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"6290:36:38\"\n                      }\n                    ],\n                    \"id\": 9658,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"6269:57:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9660]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"baseUnit\",\n                          \"overrides\": null,\n                          \"scope\": 9682,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9659,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"6381:7:38\"\n                          }\n                        ],\n                        \"id\": 9660,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"6381:16:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"**\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3130\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 10\",\n                              \"value\": \"10\"\n                            },\n                            \"id\": 9661,\n                            \"name\": \"Literal\",\n                            \"src\": \"6400:2:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint8\",\n                                      \"typeString\": \"uint8\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"type(uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint256\",\n                                      \"type\": null\n                                    },\n                                    \"id\": 9662,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"6406:7:38\"\n                                  }\n                                ],\n                                \"id\": 9663,\n                                \"name\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"6406:7:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint8\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"decimals\",\n                                      \"referencedDeclaration\": 11539,\n                                      \"type\": \"function () view external returns (uint8)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"contract ERC20Upgradeable\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_address\",\n                                                  \"typeString\": \"address\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 11967,\n                                              \"type\": \"type(contract ERC20Upgradeable)\",\n                                              \"value\": \"ERC20Upgradeable\"\n                                            },\n                                            \"id\": 9664,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"6414:16:38\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9649,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 9665,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"6431:10:38\"\n                                          }\n                                        ],\n                                        \"id\": 9666,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"6414:28:38\"\n                                      }\n                                    ],\n                                    \"id\": 9667,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"6414:37:38\"\n                                  }\n                                ],\n                                \"id\": 9668,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"6414:39:38\"\n                              }\n                            ],\n                            \"id\": 9669,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"6406:48:38\"\n                          }\n                        ],\n                        \"id\": 9670,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"6400:54:38\"\n                      }\n                    ],\n                    \"id\": 9671,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"6381:73:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 9641\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 11296,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                          \"typeString\": \"int_const 1000000000000000000\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 11279,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_address\",\n                                                  \"typeString\": \"address\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9744,\n                                              \"type\": \"function (address) view returns (uint256)\",\n                                              \"value\": \"_price\"\n                                            },\n                                            \"id\": 9672,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"6472:6:38\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9649,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 9673,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"6479:10:38\"\n                                          }\n                                        ],\n                                        \"id\": 9674,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"6472:18:38\"\n                                      }\n                                    ],\n                                    \"id\": 9675,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"6472:22:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"31653138\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 1000000000000000000\",\n                                      \"value\": \"1e18\"\n                                    },\n                                    \"id\": 9676,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"6495:4:38\"\n                                  }\n                                ],\n                                \"id\": 9677,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"6472:28:38\"\n                              }\n                            ],\n                            \"id\": 9678,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"6472:32:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9660,\n                              \"type\": \"uint256\",\n                              \"value\": \"baseUnit\"\n                            },\n                            \"id\": 9679,\n                            \"name\": \"Identifier\",\n                            \"src\": \"6505:8:38\"\n                          }\n                        ],\n                        \"id\": 9680,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"6472:42:38\"\n                      }\n                    ],\n                    \"id\": 9681,\n                    \"name\": \"Return\",\n                    \"src\": \"6465:49:38\"\n                  }\n                ],\n                \"id\": 9682,\n                \"name\": \"Block\",\n                \"src\": \"6132:390:38\"\n              }\n            ],\n            \"id\": 9683,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"6051:471:38\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"_price\",\n              \"overrides\": null,\n              \"scope\": 9759,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Internal function returning the price in ETH of `underlying`.\"\n                },\n                \"id\": 9684,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"6534:87:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"overrides\": null,\n                      \"scope\": 9744,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 9685,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"6643:7:38\"\n                      }\n                    ],\n                    \"id\": 9686,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"6643:18:38\"\n                  }\n                ],\n                \"id\": 9687,\n                \"name\": \"ParameterList\",\n                \"src\": \"6642:20:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9744,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9688,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"6686:4:38\"\n                      }\n                    ],\n                    \"id\": 9689,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"6686:4:38\"\n                  }\n                ],\n                \"id\": 9690,\n                \"name\": \"ParameterList\",\n                \"src\": \"6685:6:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"==\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9686,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 9691,\n                            \"name\": \"Identifier\",\n                            \"src\": \"6740:10:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9312,\n                              \"type\": \"address\",\n                              \"value\": \"WETH_ADDRESS\"\n                            },\n                            \"id\": 9692,\n                            \"name\": \"Identifier\",\n                            \"src\": \"6754:12:38\"\n                          }\n                        ],\n                        \"id\": 9693,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"6740:26:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"functionReturnParameters\": 9690\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 9694,\n                            \"name\": \"Literal\",\n                            \"src\": \"6775:4:38\"\n                          }\n                        ],\n                        \"id\": 9695,\n                        \"name\": \"Return\",\n                        \"src\": \"6768:11:38\"\n                      }\n                    ],\n                    \"id\": 9696,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"6736:43:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9698]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"pair\",\n                          \"overrides\": null,\n                          \"scope\": 9743,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 9697,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"6847:7:38\"\n                          }\n                        ],\n                        \"id\": 9698,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"6847:12:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"getPair\",\n                              \"referencedDeclaration\": 6192,\n                              \"type\": \"function (address,address) view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9315,\n                                  \"type\": \"contract IUniswapV2Factory\",\n                                  \"value\": \"uniswapV2Factory\"\n                                },\n                                \"id\": 9699,\n                                \"name\": \"Identifier\",\n                                \"src\": \"6862:16:38\"\n                              }\n                            ],\n                            \"id\": 9700,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"6862:24:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9686,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 9701,\n                            \"name\": \"Identifier\",\n                            \"src\": \"6887:10:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9312,\n                              \"type\": \"address\",\n                              \"value\": \"WETH_ADDRESS\"\n                            },\n                            \"id\": 9702,\n                            \"name\": \"Identifier\",\n                            \"src\": \"6899:12:38\"\n                          }\n                        ],\n                        \"id\": 9703,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"6862:50:38\"\n                      }\n                    ],\n                    \"id\": 9704,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"6847:65:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9706]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"baseUnit\",\n                          \"overrides\": null,\n                          \"scope\": 9743,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9705,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"6923:7:38\"\n                          }\n                        ],\n                        \"id\": 9706,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"6923:16:38\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"**\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3130\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 10\",\n                              \"value\": \"10\"\n                            },\n                            \"id\": 9707,\n                            \"name\": \"Literal\",\n                            \"src\": \"6942:2:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint8\",\n                                      \"typeString\": \"uint8\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"type(uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint256\",\n                                      \"type\": null\n                                    },\n                                    \"id\": 9708,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"6948:7:38\"\n                                  }\n                                ],\n                                \"id\": 9709,\n                                \"name\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"6948:7:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint8\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"decimals\",\n                                      \"referencedDeclaration\": 11539,\n                                      \"type\": \"function () view external returns (uint8)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"contract ERC20Upgradeable\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_address\",\n                                                  \"typeString\": \"address\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 11967,\n                                              \"type\": \"type(contract ERC20Upgradeable)\",\n                                              \"value\": \"ERC20Upgradeable\"\n                                            },\n                                            \"id\": 9710,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"6956:16:38\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9686,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 9711,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"6973:10:38\"\n                                          }\n                                        ],\n                                        \"id\": 9712,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"6956:28:38\"\n                                      }\n                                    ],\n                                    \"id\": 9713,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"6956:37:38\"\n                                  }\n                                ],\n                                \"id\": 9714,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"6956:39:38\"\n                              }\n                            ],\n                            \"id\": 9715,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"6948:48:38\"\n                          }\n                        ],\n                        \"id\": 9716,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"6942:54:38\"\n                      }\n                    ],\n                    \"id\": 9717,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"6923:73:38\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 9690\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                  \"typeString\": \"int_const 72057594037927936\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 11296,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 11279,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                                  \"typeString\": \"int_const 72057594037927936\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"div\",\n                                              \"referencedDeclaration\": 11296,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isInlineArray\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"type\": \"uint256\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"type\": \"uint256\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"commonType\": {\n                                                            \"typeIdentifier\": \"t_address\",\n                                                            \"typeString\": \"address\"\n                                                          },\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"operator\": \"<\",\n                                                          \"type\": \"bool\"\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": 9686,\n                                                              \"type\": \"address\",\n                                                              \"value\": \"underlying\"\n                                                            },\n                                                            \"id\": 9718,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"7015:10:38\"\n                                                          },\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": 9312,\n                                                              \"type\": \"address\",\n                                                              \"value\": \"WETH_ADDRESS\"\n                                                            },\n                                                            \"id\": 9719,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"7028:12:38\"\n                                                          }\n                                                        ],\n                                                        \"id\": 9720,\n                                                        \"name\": \"BinaryOperation\",\n                                                        \"src\": \"7015:25:38\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"isStructConstructorCall\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"names\": [null],\n                                                          \"tryCall\": false,\n                                                          \"type\": \"uint256\",\n                                                          \"type_conversion\": false\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": [\n                                                                {\n                                                                  \"typeIdentifier\": \"t_address\",\n                                                                  \"typeString\": \"address\"\n                                                                }\n                                                              ],\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": 9417,\n                                                              \"type\": \"function (address) view returns (uint256)\",\n                                                              \"value\": \"price0TWAP\"\n                                                            },\n                                                            \"id\": 9721,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"7043:10:38\"\n                                                          },\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": 9698,\n                                                              \"type\": \"address\",\n                                                              \"value\": \"pair\"\n                                                            },\n                                                            \"id\": 9722,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"7054:4:38\"\n                                                          }\n                                                        ],\n                                                        \"id\": 9723,\n                                                        \"name\": \"FunctionCall\",\n                                                        \"src\": \"7043:16:38\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"isStructConstructorCall\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"names\": [null],\n                                                          \"tryCall\": false,\n                                                          \"type\": \"uint256\",\n                                                          \"type_conversion\": false\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": [\n                                                                {\n                                                                  \"typeIdentifier\": \"t_address\",\n                                                                  \"typeString\": \"address\"\n                                                                }\n                                                              ],\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": 9511,\n                                                              \"type\": \"function (address) view returns (uint256)\",\n                                                              \"value\": \"price1TWAP\"\n                                                            },\n                                                            \"id\": 9724,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"7062:10:38\"\n                                                          },\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": 9698,\n                                                              \"type\": \"address\",\n                                                              \"value\": \"pair\"\n                                                            },\n                                                            \"id\": 9725,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"7073:4:38\"\n                                                          }\n                                                        ],\n                                                        \"id\": 9726,\n                                                        \"name\": \"FunctionCall\",\n                                                        \"src\": \"7062:16:38\"\n                                                      }\n                                                    ],\n                                                    \"id\": 9727,\n                                                    \"name\": \"Conditional\",\n                                                    \"src\": \"7015:63:38\"\n                                                  }\n                                                ],\n                                                \"id\": 9728,\n                                                \"name\": \"TupleExpression\",\n                                                \"src\": \"7014:65:38\"\n                                              }\n                                            ],\n                                            \"id\": 9729,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"7014:69:38\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                                \"typeString\": \"int_const 72057594037927936\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"**\",\n                                              \"type\": \"int_const 72057594037927936\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"32\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 2\",\n                                                  \"value\": \"2\"\n                                                },\n                                                \"id\": 9730,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"7084:1:38\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"3536\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 56\",\n                                                  \"value\": \"56\"\n                                                },\n                                                \"id\": 9731,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"7089:2:38\"\n                                              }\n                                            ],\n                                            \"id\": 9732,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"7084:7:38\"\n                                          }\n                                        ],\n                                        \"id\": 9733,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"7014:78:38\"\n                                      }\n                                    ],\n                                    \"id\": 9734,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"7014:82:38\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9706,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"baseUnit\"\n                                    },\n                                    \"id\": 9735,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"7097:8:38\"\n                                  }\n                                ],\n                                \"id\": 9736,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"7014:92:38\"\n                              }\n                            ],\n                            \"id\": 9737,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"7014:96:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                \"typeString\": \"int_const 72057594037927936\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"operator\": \"**\",\n                              \"type\": \"int_const 72057594037927936\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"32\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 2\",\n                                  \"value\": \"2\"\n                                },\n                                \"id\": 9738,\n                                \"name\": \"Literal\",\n                                \"src\": \"7111:1:38\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"3536\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 56\",\n                                  \"value\": \"56\"\n                                },\n                                \"id\": 9739,\n                                \"name\": \"Literal\",\n                                \"src\": \"7116:2:38\"\n                              }\n                            ],\n                            \"id\": 9740,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"7111:7:38\"\n                          }\n                        ],\n                        \"id\": 9741,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"7014:105:38\"\n                      }\n                    ],\n                    \"id\": 9742,\n                    \"name\": \"Return\",\n                    \"src\": \"7007:112:38\"\n                  }\n                ],\n                \"id\": 9743,\n                \"name\": \"Block\",\n                \"src\": \"6692:467:38\"\n              }\n            ],\n            \"id\": 9744,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"6627:532:38\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [7813],\n              \"functionSelector\": \"aea91078\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"price\",\n              \"scope\": 9759,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\"\n                },\n                \"id\": 9745,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"7167:98:38\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 9749,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"7315:8:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"overrides\": null,\n                      \"scope\": 9758,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 9746,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"7286:7:38\"\n                      }\n                    ],\n                    \"id\": 9747,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"7286:18:38\"\n                  }\n                ],\n                \"id\": 9748,\n                \"name\": \"ParameterList\",\n                \"src\": \"7285:20:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9758,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9750,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"7338:4:38\"\n                      }\n                    ],\n                    \"id\": 9751,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"7338:4:38\"\n                  }\n                ],\n                \"id\": 9752,\n                \"name\": \"ParameterList\",\n                \"src\": \"7337:6:38\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 9752\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9744,\n                              \"type\": \"function (address) view returns (uint256)\",\n                              \"value\": \"_price\"\n                            },\n                            \"id\": 9753,\n                            \"name\": \"Identifier\",\n                            \"src\": \"7362:6:38\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9747,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 9754,\n                            \"name\": \"Identifier\",\n                            \"src\": \"7369:10:38\"\n                          }\n                        ],\n                        \"id\": 9755,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"7362:18:38\"\n                      }\n                    ],\n                    \"id\": 9756,\n                    \"name\": \"Return\",\n                    \"src\": \"7355:25:38\"\n                  }\n                ],\n                \"id\": 9757,\n                \"name\": \"Block\",\n                \"src\": \"7344:44:38\"\n              }\n            ],\n            \"id\": 9758,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"7271:117:38\"\n          }\n        ],\n        \"id\": 9759,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"1048:6343:38\"\n      }\n    ],\n    \"id\": 9760,\n    \"name\": \"SourceUnit\",\n    \"src\": \"312:7081:38\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-12T06:46:35.036Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements `PriceOracle`.\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Constructor that sets the Keep3rV1Oracle or SushiswapV1Oracle.\"\n      },\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`). Prices are expected to be scaled by `10 ** (36 - underlyingDecimals)`.\"\n      },\n      \"price(address)\": {\n        \"details\": \"Returns the price in ETH of `underlying` (implements `BasePriceOracle`).\"\n      }\n    },\n    \"stateVariables\": {\n      \"MAX_TWAP_TIME\": {\n        \"details\": \"Maximum TWAP interval.\"\n      },\n      \"MIN_TWAP_TIME\": {\n        \"details\": \"Minimum TWAP interval.\"\n      },\n      \"WETH_ADDRESS\": {\n        \"details\": \"WETH token contract address.\"\n      },\n      \"rootOracle\": {\n        \"details\": \"Keep3rV1Oracle token contract object.\"\n      },\n      \"uniswapV2Factory\": {\n        \"details\": \"UniswapV2Factory contract address.\"\n      }\n    },\n    \"title\": \"Keep3rPriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"notice\": \"Returns prices from `Keep3rV1Oracle` or `SushiswapV1Oracle`.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/MasterPriceOracle.json",
    "content": "{\n  \"contractName\": \"MasterPriceOracle\",\n  \"abi\": [\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"oldAdmin\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewAdmin\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"oldOracle\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"newOracle\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewDefaultOracle\",\n      \"type\": \"event\"\n    },\n    {\n      \"anonymous\": false,\n      \"inputs\": [\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"underlying\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"oldOracle\",\n          \"type\": \"address\"\n        },\n        {\n          \"indexed\": false,\n          \"internalType\": \"address\",\n          \"name\": \"newOracle\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"NewOracle\",\n      \"type\": \"event\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"admin\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"defaultOracle\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract PriceOracle\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"oracles\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract PriceOracle\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"canAdminOverwrite\",\n      \"outputs\": [\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"underlyings\",\n          \"type\": \"address[]\"\n        },\n        {\n          \"internalType\": \"contract PriceOracle[]\",\n          \"name\": \"_oracles\",\n          \"type\": \"address[]\"\n        },\n        {\n          \"internalType\": \"contract PriceOracle\",\n          \"name\": \"_defaultOracle\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_admin\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"bool\",\n          \"name\": \"_canAdminOverwrite\",\n          \"type\": \"bool\"\n        }\n      ],\n      \"name\": \"initialize\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address[]\",\n          \"name\": \"underlyings\",\n          \"type\": \"address[]\"\n        },\n        {\n          \"internalType\": \"contract PriceOracle[]\",\n          \"name\": \"_oracles\",\n          \"type\": \"address[]\"\n        }\n      ],\n      \"name\": \"add\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract PriceOracle\",\n          \"name\": \"newOracle\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"setDefaultOracle\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"newAdmin\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"changeAdmin\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"underlying\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"price\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldAdmin\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewAdmin\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldOracle\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOracle\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewDefaultOracle\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"oldOracle\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newOracle\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewOracle\\\",\\\"type\\\":\\\"event\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"contract PriceOracle[]\\\",\\\"name\\\":\\\"_oracles\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"name\\\":\\\"add\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"admin\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"canAdminOverwrite\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"newAdmin\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"changeAdmin\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"defaultOracle\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address[]\\\",\\\"name\\\":\\\"underlyings\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"contract PriceOracle[]\\\",\\\"name\\\":\\\"_oracles\\\",\\\"type\\\":\\\"address[]\\\"},{\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"_defaultOracle\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_admin\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_canAdminOverwrite\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"initialize\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"oracles\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"newOracle\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setDefaultOracle\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements `PriceOracle`.\\\",\\\"events\\\":{\\\"NewAdmin(address,address)\\\":{\\\"details\\\":\\\"Event emitted when `admin` is changed.\\\"},\\\"NewDefaultOracle(address,address)\\\":{\\\"details\\\":\\\"Event emitted when the default oracle is changed.\\\"},\\\"NewOracle(address,address,address)\\\":{\\\"details\\\":\\\"Event emitted when an underlying token's oracle is changed.\\\"}},\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"add(address[],address[])\\\":{\\\"details\\\":\\\"Sets `_oracles` for `underlyings`.\\\"},\\\"canAdminOverwrite()\\\":{\\\"details\\\":\\\"Returns a boolean indicating if `admin` can overwrite existing assignments of oracles to underlying tokens.\\\"},\\\"changeAdmin(address)\\\":{\\\"details\\\":\\\"Changes the admin and emits an event.\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the `PriceOracle` interface for Fuse pools (and Compound v2).\\\",\\\"returns\\\":{\\\"_0\\\":\\\"Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`.\\\"}},\\\"initialize(address[],address[],address,address,bool)\\\":{\\\"details\\\":\\\"Constructor to initialize state variables.\\\",\\\"params\\\":{\\\"_admin\\\":\\\"The admin who can assign oracles to underlying tokens.\\\",\\\"_canAdminOverwrite\\\":\\\"Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\\\",\\\"_defaultOracle\\\":\\\"The default `PriceOracle` contract to use.\\\",\\\"_oracles\\\":\\\"The `PriceOracle` contracts to be assigned to `underlyings`.\\\",\\\"underlyings\\\":\\\"The underlying ERC20 token addresses to link to `_oracles`.\\\"}},\\\"price(address)\\\":{\\\"details\\\":\\\"Attempts to return the price in ETH of `underlying` (implements `BasePriceOracle`).\\\"},\\\"setDefaultOracle(address)\\\":{\\\"details\\\":\\\"Changes the admin and emits an event.\\\"}},\\\"stateVariables\\\":{\\\"admin\\\":{\\\"details\\\":\\\"The administrator of this `MasterPriceOracle`.\\\"},\\\"defaultOracle\\\":{\\\"details\\\":\\\"Default/fallback `PriceOracle`.\\\"},\\\"noAdminOverwrite\\\":{\\\"details\\\":\\\"Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\\\"},\\\"oracles\\\":{\\\"details\\\":\\\"Maps underlying token addresses to `PriceOracle` contracts (can be `BasePriceOracle` contracts too).\\\"}},\\\"title\\\":\\\"MasterPriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Returns the price in ETH of the token underlying `cToken`.\\\"}},\\\"notice\\\":\\\"Use a combination of price oracles.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/MasterPriceOracle.sol\\\":\\\"MasterPriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0x2b941784ef209f5065f5a1d2bfb7363762da10f30af5f05ba5ab135862ac74dd\\\",\\\"license\\\":\\\"BSD-3-Clause\\\",\\\"urls\\\":[\\\"bzz-raw://346d011b27636783409e044f91a8d035f72e20986e34dc3b8fe8f4b1b57fdf3e\\\",\\\"dweb:/ipfs/QmaW51imyx2UrGLK31AwPX31RgF3QFzhyka5Q9vb2tAxGi\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xf7bf43655f5564821af99401f06bb8114e4eba36c5091c18566c5e58df1b730f\\\",\\\"license\\\":\\\"BSD-3-Clause\\\",\\\"urls\\\":[\\\"bzz-raw://70234b3d3db8f599cf7105559683d2ea23cf6e76ee60bec6b97bed9da337b7a2\\\",\\\"dweb:/ipfs/QmSMp41tEM9kYJhPUAugqnDN7XSKsQY22gg11gV1TEANXo\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x5bea460265cac239bb14115e67fc6f565cbb33314d15a4f854fe2f0b56a19656\\\",\\\"license\\\":\\\"BSD-3-Clause\\\",\\\"urls\\\":[\\\"bzz-raw://8838f0322fdbfab13487d1a0ff4ab9bcf99380bb56565d3ab877ab52fdb0e7e7\\\",\\\"dweb:/ipfs/QmVavYcrouTANWjLXig51tnibWWisWnT5GwuuaspzncMXi\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x95147a8358ff9d87d473b7d386870eeab5f2c531808bdf8d4e8eea8a06eafdc7\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://6c53cecdea2bbbc04e5e64a972bb05e41732fe2896dc99715f9bfcfabc968ba9\\\",\\\"dweb:/ipfs/QmPpdnyoRwZ7CR64FCgVU9mmJpoW5M3gtSVdU7B6K8vzrP\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/MasterPriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xce802633ec055bb386ac03774c52b6e2599ba00a722f544c795c1ad2217c342e\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://60a984fae995df7c6750fb1ad99ebfa13c5318a8de5bd80e53dae3d903fecac1\\\",\\\"dweb:/ipfs/QmSh76w1RLp14rPAGHpx3KYEnXH5aQsTKKe5XWTpoXoaLa\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7dbc89479d30592e82442edc38053b380f611037a5e6ceafc7bf57a7aa1f0305\\\",\\\"dweb:/ipfs/QmcdYtt56WmjeYvsFjK69FnahnAriw88VzY3XRZwXkQKKN\\\"]},\\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://a6b81dcc816857a9d981386f6d8de49198420ee41cdc0ecade366ab412174d03\\\",\\\"dweb:/ipfs/QmV2vznMT6m9qo3pFMAWi3Nz3UDhwesgwFxeXe6Tod3v8A\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50610da8806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063addd509911610066578063addd509914610306578063aea910781461032c578063c44014d214610364578063f851a4401461038a578063fc57d4df146103925761009e565b8063278aa146146100a3578063656b0fd1146101e257806380dce169146101fe5780638f283970146102225780639c9192c614610248575b600080fd5b6101e0600480360360a08110156100b957600080fd5b810190602081018135600160201b8111156100d357600080fd5b8201836020820111156100e557600080fd5b803590602001918460208302840111600160201b8311171561010657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561015557600080fd5b82018360208201111561016757600080fd5b803590602001918460208302840111600160201b8311171561018857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b038335811694506020840135169260400135151591506103b89050565b005b6101ea610595565b604080519115158252519081900360200190f35b6102066105a6565b604080516001600160a01b039092168252519081900360200190f35b6101e06004803603602081101561023857600080fd5b50356001600160a01b03166105b5565b6101e06004803603604081101561025e57600080fd5b810190602081018135600160201b81111561027857600080fd5b82018360208201111561028a57600080fd5b803590602001918460208302840111600160201b831117156102ab57600080fd5b919390929091602081019035600160201b8111156102c857600080fd5b8201836020820111156102da57600080fd5b803590602001918460208302840111600160201b831117156102fb57600080fd5b509092509050610672565b6102066004803603602081101561031c57600080fd5b50356001600160a01b031661084f565b6103526004803603602081101561034257600080fd5b50356001600160a01b031661086a565b60408051918252519081900360200190f35b6101e06004803603602081101561037a57600080fd5b50356001600160a01b03166109dd565b610206610a9a565b610352600480360360208110156103a857600080fd5b50356001600160a01b0316610aa9565b600054610100900460ff16806103d157506103d1610c4b565b806103df575060005460ff16155b61041a5760405162461bcd60e51b815260040180806020018281038252602e815260200180610d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015610445576000805460ff1961ff0019909116610100171660011790555b84518651146104855760405162461bcd60e51b8152600401808060200182810382526025815260200180610ce76025913960400191505060405180910390fd5b60005b865181101561053a57600087828151811061049f57fe5b6020026020010151905060008783815181106104b757fe5b6020908102919091018101516001600160a01b03808516600081815260018552604080822080549486166001600160a01b0319909516851790558051928352948201528084019190915291519092507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269181900360600190a15050600101610488565b50600280546001600160a01b038087166001600160a01b03199283161790925560038054600160a01b86150260ff60a01b19948816919093161792909216179055801561058d576000805461ff00191690555b505050505050565b600354600160a01b900460ff161590565b6002546001600160a01b031681565b6003546001600160a01b0316331461060f576040805162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329030b236b4b71760411b604482015290519081900360640190fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc929181900390910190a15050565b6003546001600160a01b031633146106cc576040805162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329030b236b4b71760411b604482015290519081900360640190fd5b82158015906106da57508281145b6107155760405162461bcd60e51b8152600401808060200182810382526038815260200180610caf6038913960400191505060405180910390fd5b60005b8381101561084857600085858381811061072e57fe5b602090810292909201356001600160a01b03908116600081815260019094526040909320546003549394501691600160a01b900460ff161590506107b2576001600160a01b038116156107b25760405162461bcd60e51b815260040180806020018281038252604c815260200180610c63604c913960600191505060405180910390fd5b60008585858181106107c057fe5b6001600160a01b0386811660008181526001602090815260409182902080546001600160a01b03191695820297909701358416948517909655805191825291871694810194909452838101829052519093507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126928190036060019150a1505050600101610718565b5050505050565b6001602052600090815260409020546001600160a01b031681565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03831614156108a05750670de0b6b3a76400006109d8565b6001600160a01b0380831660009081526001602052604090205416801561094357806001600160a01b031663aea91078846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561090e57600080fd5b505afa158015610922573d6000803e3d6000fd5b505050506040513d602081101561093857600080fd5b505191506109d89050565b6002546001600160a01b0316156109a157600254604080516315d5220f60e31b81526001600160a01b0386811660048301529151919092169163aea91078916024808301926020929190829003018186803b15801561090e57600080fd5b60405162461bcd60e51b8152600401808060200182810382526039815260200180610d3a6039913960400191505060405180910390fd5b919050565b6003546001600160a01b03163314610a37576040805162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329030b236b4b71760411b604482015290519081900360640190fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f0df2d61fdd201e9633368dca495e2c469e36c48039263448dd8a2a954c19ef1a929181900390910190a15050565b6003546001600160a01b031681565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d6020811015610b0f57600080fd5b5051905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0382161415610b4957670de0b6b3a76400009150506109d8565b6001600160a01b03808216600090815260016020526040902054168015610bed57806001600160a01b031663fc57d4df856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610bb757600080fd5b505afa158015610bcb573d6000803e3d6000fd5b505050506040513d6020811015610be157600080fd5b505192506109d8915050565b6002546001600160a01b0316156109a1576002546040805163fc57d4df60e01b81526001600160a01b0387811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b158015610bb757600080fd5b6000610c5630610c5c565b15905090565b3b15159056fe41646d696e2063616e6e6f74206f7665727772697465206578697374696e672061737369676e6d656e7473206f66206f7261636c657320746f20756e6465726c79696e6720746f6b656e732e4c656e67746873206f6620626f746820617272617973206d75737420626520657175616c20616e642067726561746572207468616e20302e4c656e67746873206f6620626f746820617272617973206d75737420626520657175616c2e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645072696365206f7261636c65206e6f7420666f756e6420666f72207468697320756e6465726c79696e6720746f6b656e20616464726573732ea2646970667358221220271acacb4ec1d62f27194e0349f2cce45d5e275e4ddbb963abca50aebe6209df64736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063addd509911610066578063addd509914610306578063aea910781461032c578063c44014d214610364578063f851a4401461038a578063fc57d4df146103925761009e565b8063278aa146146100a3578063656b0fd1146101e257806380dce169146101fe5780638f283970146102225780639c9192c614610248575b600080fd5b6101e0600480360360a08110156100b957600080fd5b810190602081018135600160201b8111156100d357600080fd5b8201836020820111156100e557600080fd5b803590602001918460208302840111600160201b8311171561010657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561015557600080fd5b82018360208201111561016757600080fd5b803590602001918460208302840111600160201b8311171561018857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b038335811694506020840135169260400135151591506103b89050565b005b6101ea610595565b604080519115158252519081900360200190f35b6102066105a6565b604080516001600160a01b039092168252519081900360200190f35b6101e06004803603602081101561023857600080fd5b50356001600160a01b03166105b5565b6101e06004803603604081101561025e57600080fd5b810190602081018135600160201b81111561027857600080fd5b82018360208201111561028a57600080fd5b803590602001918460208302840111600160201b831117156102ab57600080fd5b919390929091602081019035600160201b8111156102c857600080fd5b8201836020820111156102da57600080fd5b803590602001918460208302840111600160201b831117156102fb57600080fd5b509092509050610672565b6102066004803603602081101561031c57600080fd5b50356001600160a01b031661084f565b6103526004803603602081101561034257600080fd5b50356001600160a01b031661086a565b60408051918252519081900360200190f35b6101e06004803603602081101561037a57600080fd5b50356001600160a01b03166109dd565b610206610a9a565b610352600480360360208110156103a857600080fd5b50356001600160a01b0316610aa9565b600054610100900460ff16806103d157506103d1610c4b565b806103df575060005460ff16155b61041a5760405162461bcd60e51b815260040180806020018281038252602e815260200180610d0c602e913960400191505060405180910390fd5b600054610100900460ff16158015610445576000805460ff1961ff0019909116610100171660011790555b84518651146104855760405162461bcd60e51b8152600401808060200182810382526025815260200180610ce76025913960400191505060405180910390fd5b60005b865181101561053a57600087828151811061049f57fe5b6020026020010151905060008783815181106104b757fe5b6020908102919091018101516001600160a01b03808516600081815260018552604080822080549486166001600160a01b0319909516851790558051928352948201528084019190915291519092507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269181900360600190a15050600101610488565b50600280546001600160a01b038087166001600160a01b03199283161790925560038054600160a01b86150260ff60a01b19948816919093161792909216179055801561058d576000805461ff00191690555b505050505050565b600354600160a01b900460ff161590565b6002546001600160a01b031681565b6003546001600160a01b0316331461060f576040805162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329030b236b4b71760411b604482015290519081900360640190fd5b600380546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc929181900390910190a15050565b6003546001600160a01b031633146106cc576040805162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329030b236b4b71760411b604482015290519081900360640190fd5b82158015906106da57508281145b6107155760405162461bcd60e51b8152600401808060200182810382526038815260200180610caf6038913960400191505060405180910390fd5b60005b8381101561084857600085858381811061072e57fe5b602090810292909201356001600160a01b03908116600081815260019094526040909320546003549394501691600160a01b900460ff161590506107b2576001600160a01b038116156107b25760405162461bcd60e51b815260040180806020018281038252604c815260200180610c63604c913960600191505060405180910390fd5b60008585858181106107c057fe5b6001600160a01b0386811660008181526001602090815260409182902080546001600160a01b03191695820297909701358416948517909655805191825291871694810194909452838101829052519093507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126928190036060019150a1505050600101610718565b5050505050565b6001602052600090815260409020546001600160a01b031681565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03831614156108a05750670de0b6b3a76400006109d8565b6001600160a01b0380831660009081526001602052604090205416801561094357806001600160a01b031663aea91078846040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561090e57600080fd5b505afa158015610922573d6000803e3d6000fd5b505050506040513d602081101561093857600080fd5b505191506109d89050565b6002546001600160a01b0316156109a157600254604080516315d5220f60e31b81526001600160a01b0386811660048301529151919092169163aea91078916024808301926020929190829003018186803b15801561090e57600080fd5b60405162461bcd60e51b8152600401808060200182810382526039815260200180610d3a6039913960400191505060405180910390fd5b919050565b6003546001600160a01b03163314610a37576040805162461bcd60e51b815260206004820152601860248201527729b2b73232b91034b9903737ba103a34329030b236b4b71760411b604482015290519081900360640190fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f0df2d61fdd201e9633368dca495e2c469e36c48039263448dd8a2a954c19ef1a929181900390910190a15050565b6003546001600160a01b031681565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d6020811015610b0f57600080fd5b5051905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0382161415610b4957670de0b6b3a76400009150506109d8565b6001600160a01b03808216600090815260016020526040902054168015610bed57806001600160a01b031663fc57d4df856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610bb757600080fd5b505afa158015610bcb573d6000803e3d6000fd5b505050506040513d6020811015610be157600080fd5b505192506109d8915050565b6002546001600160a01b0316156109a1576002546040805163fc57d4df60e01b81526001600160a01b0387811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b158015610bb757600080fd5b6000610c5630610c5c565b15905090565b3b15159056fe41646d696e2063616e6e6f74206f7665727772697465206578697374696e672061737369676e6d656e7473206f66206f7261636c657320746f20756e6465726c79696e6720746f6b656e732e4c656e67746873206f6620626f746820617272617973206d75737420626520657175616c20616e642067726561746572207468616e20302e4c656e67746873206f6620626f746820617272617973206d75737420626520657175616c2e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645072696365206f7261636c65206e6f7420666f756e6420666f72207468697320756e6465726c79696e6720746f6b656e20616464726573732ea2646970667358221220271acacb4ec1d62f27194e0349f2cce45d5e275e4ddbb963abca50aebe6209df64736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"510:5988:99:-:0;;;;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"510:5988:99:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2365:754;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2365:754:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2365:754:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2365:754:99;;;;;;;;-1:-1:-1;2365:754:99;;-1:-1:-1;;;;;2365:754:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2365:754:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2365:754:99;;-1:-1:-1;;;;;;;2365:754:99;;;;;-1:-1:-1;2365:754:99;;;;;;;;;;;;-1:-1:-1;2365:754:99;;-1:-1:-1;2365:754:99:i;:::-;;1286:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;841:32;;;:::i;:::-;;;;-1:-1:-1;;;;;841:32:99;;;;;;;;;;;;;;4407:172;;;;;;;;;;;;;;;;-1:-1:-1;4407:172:99;-1:-1:-1;;;;;4407:172:99;;:::i;3193:828::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3193:828:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3193:828:99;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3193:828:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3193:828:99;;;;;;;;;;-1:-1:-1;3193:828:99;;-1:-1:-1;3193:828:99;-1:-1:-1;3193:828:99;:::i;723:46::-;;;;;;;;;;;;;;;;-1:-1:-1;723:46:99;-1:-1:-1;;;;;723:46:99;;:::i;5892:603::-;;;;;;;;;;;;;;;;-1:-1:-1;5892:603:99;-1:-1:-1;;;;;5892:603:99;;:::i;:::-;;;;;;;;;;;;;;;;4098:232;;;;;;;;;;;;;;;;-1:-1:-1;4098:232:99;-1:-1:-1;;;;;4098:232:99;;:::i;960:20::-;;;:::i;5066:703::-;;;;;;;;;;;;;;;;-1:-1:-1;5066:703:99;-1:-1:-1;;;;;5066:703:99;;:::i;2365:754::-;1512:13:120;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:120;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:120;;;;;1738:19;1720:4;1738:19;;;1670:98;2606:8:99::1;:15;2584:11;:18;:37;2576:87;;;;-1:-1:-1::0;;;2576:87:99::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2720:9;2715:280;2739:11;:18;2735:1;:22;2715:280;;;2779:18;2800:11;2812:1;2800:14;;;;;;;;;;;;;;2779:35;;2829:21;2853:8;2862:1;2853:11;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;2879:19:99;;::::1;;::::0;;;:7:::1;:19:::0;;;;;;:31;;;;::::1;-1:-1:-1::0;;;;;;2879:31:99;;::::1;::::0;::::1;::::0;;2930:53;;;;;;;::::1;::::0;;;;;;;;;;2853:11;;-1:-1:-1;2930:53:99::1;::::0;;;;;;;::::1;-1:-1:-1::0;;2759:3:99::1;;2715:280;;;-1:-1:-1::0;3007:13:99::1;:30:::0;;-1:-1:-1;;;;;3007:30:99;;::::1;-1:-1:-1::0;;;;;;3007:30:99;;::::1;;::::0;;;3048:5:::1;:14:::0;;-1:-1:-1;;;3092:19:99;::::1;3073:38;-1:-1:-1::0;;;;3048:14:99;;::::1;::::0;;;::::1;;3073:38:::0;;;::::1;;::::0;;1790:66:120;;;;1840:5;1824:21;;-1:-1:-1;;1824:21:120;;;1790:66;2365:754:99;;;;;;:::o;1286:101::-;1363:16;;-1:-1:-1;;;1363:16:99;;;;1362:17;;1286:101::o;841:32::-;;;-1:-1:-1;;;;;841:32:99;;:::o;4407:172::-;4717:5;;-1:-1:-1;;;;;4717:5:99;4703:10;:19;4695:56;;;;;-1:-1:-1;;;4695:56:99;;;;;;;;;;;;-1:-1:-1;;;4695:56:99;;;;;;;;;;;;;;;4495:5:::1;::::0;;-1:-1:-1;;;;;4511:16:99;;::::1;-1:-1:-1::0;;;;;;4511:16:99;::::1;::::0;::::1;::::0;;;4543:28:::1;::::0;;4495:5;;;::::1;4543:28:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;4762:1;4407:172:::0;:::o;3193:828::-;4717:5;;-1:-1:-1;;;;;4717:5:99;4703:10;:19;4695:56;;;;;-1:-1:-1;;;4695:56:99;;;;;;;;;;;;-1:-1:-1;;;4695:56:99;;;;;;;;;;;;;;;3338:22;;;;;:63:::1;;-1:-1:-1::0;3364:37:99;;::::1;3338:63;3330:132;;;;-1:-1:-1::0;;;3330:132:99::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3528:9;3523:491;3543:22:::0;;::::1;3523:491;;;3587:18;3608:11;;3620:1;3608:14;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;3608:14:99;;::::1;3637:17;3665:19:::0;;;:7:::1;:19:::0;;;;;;;;3704:16:::1;::::0;3608:14;;-1:-1:-1;3665:19:99::1;::::0;-1:-1:-1;;;3704:16:99;::::1;;;3700:134;::::0;-1:-1:-1;3700:134:99::1;;-1:-1:-1::0;;;;;3730:23:99;::::1;::::0;3722:112:::1;;;;-1:-1:-1::0;;;3722:112:99::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3849:21;3873:8;;3882:1;3873:11;;;;;;;-1:-1:-1::0;;;;;3899:19:99;;::::1;;::::0;;;:7:::1;3873:11;3899:19:::0;;;;;;;;:31;;-1:-1:-1;;;;;;3899:31:99::1;3873:11:::0;;::::1;::::0;;;::::1;;::::0;::::1;3899:31:::0;;::::1;::::0;;;3950:52;;;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;;;3873:11;;-1:-1:-1;3950:52:99::1;::::0;;;;;;;-1:-1:-1;3950:52:99::1;-1:-1:-1::0;;;3567:3:99::1;;3523:491;;;;3193:828:::0;;;;:::o;723:46::-;;;;;;;;;;;;-1:-1:-1;;;;;723:46:99;;:::o;5892:603::-;5959:4;6027:42;-1:-1:-1;;;;;6013:56:99;;;6009:73;;;-1:-1:-1;6078:4:99;6071:11;;6009:73;-1:-1:-1;;;;;6170:19:99;;;6149:18;6170:19;;;:7;:19;;;;;;;6204:29;;6200:92;;6266:6;-1:-1:-1;;;;;6242:38:99;;6281:10;6242:50;;;;;;;;;;;;;-1:-1:-1;;;;;6242:50:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6242:50:99;;-1:-1:-1;6235:57:99;;-1:-1:-1;6235:57:99;6200:92;6315:13;;-1:-1:-1;;;;;6315:13:99;6307:36;6303:106;;6376:13;;6352:57;;;-1:-1:-1;;;6352:57:99;;-1:-1:-1;;;;;6352:57:99;;;;;;;;;6376:13;;;;;6352:45;;:57;;;;;;;;;;;;;;6376:13;6352:57;;;;;;;;;;6303:106;6420:67;;-1:-1:-1;;;6420:67:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5892:603;;;;:::o;4098:232::-;4717:5;;-1:-1:-1;;;;;4717:5:99;4703:10;:19;4695:56;;;;;-1:-1:-1;;;4695:56:99;;;;;;;;;;;;-1:-1:-1;;;4695:56:99;;;;;;;;;;;;;;;4201:13:::1;::::0;;-1:-1:-1;;;;;4225:25:99;;::::1;-1:-1:-1::0;;;;;;4225:25:99;::::1;::::0;::::1;::::0;;;4266:56:::1;::::0;;4201:13;;;::::1;4266:56:::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;4762:1;4098:232:::0;:::o;960:20::-;;;-1:-1:-1;;;;;960:20:99;;:::o;5066:703::-;5141:4;5205:18;5249:6;-1:-1:-1;;;;;5234:34:99;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5234:36:99;;-1:-1:-1;5335:42:99;-1:-1:-1;;;;;5321:56:99;;;5317:73;;;5386:4;5379:11;;;;;5317:73;-1:-1:-1;;;;;5478:19:99;;;5457:18;5478:19;;;:7;:19;;;;;;;5512:29;;5508:75;;5550:6;-1:-1:-1;;;;;5550:25:99;;5576:6;5550:33;;;;;;;;;;;;;-1:-1:-1;;;;;5550:33:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5550:33:99;;-1:-1:-1;5543:40:99;;-1:-1:-1;;5543:40:99;5508:75;5606:13;;-1:-1:-1;;;;;5606:13:99;5598:36;5594:89;;5643:13;;:40;;;-1:-1:-1;;;5643:40:99;;-1:-1:-1;;;;;5643:40:99;;;;;;;;;:13;;;;;:32;;:40;;;;;;;;;;;;;;:13;:40;;;;;;;;;;1952:123:120;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;737:413:124:-;1097:20;1135:8;;;737:413::o\",\n  \"source\": \"// SPDX-License-Identifier: UNLICENSED\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CToken.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"./BasePriceOracle.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title MasterPriceOracle\\r\\n * @notice Use a combination of price oracles.\\r\\n * @dev Implements `PriceOracle`.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract MasterPriceOracle is Initializable, PriceOracle, BasePriceOracle {\\r\\n    /**\\r\\n     * @dev Maps underlying token addresses to `PriceOracle` contracts (can be `BasePriceOracle` contracts too).\\r\\n     */\\r\\n    mapping(address => PriceOracle) public oracles;\\r\\n\\r\\n    /**\\r\\n     * @dev Default/fallback `PriceOracle`.\\r\\n     */\\r\\n    PriceOracle public defaultOracle;\\r\\n\\r\\n    /**\\r\\n     * @dev The administrator of this `MasterPriceOracle`.\\r\\n     */\\r\\n    address public admin;\\r\\n\\r\\n    /**\\r\\n     * @dev Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\\r\\n     */\\r\\n    bool internal noAdminOverwrite;\\r\\n\\r\\n    /**\\r\\n     * @dev Returns a boolean indicating if `admin` can overwrite existing assignments of oracles to underlying tokens.\\r\\n     */\\r\\n    function canAdminOverwrite() external view returns (bool) {\\r\\n        return !noAdminOverwrite;\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Event emitted when `admin` is changed.\\r\\n     */\\r\\n    event NewAdmin(address oldAdmin, address newAdmin);\\r\\n\\r\\n    /**\\r\\n     * @dev Event emitted when the default oracle is changed.\\r\\n     */\\r\\n    event NewDefaultOracle(address oldOracle, address newOracle);\\r\\n\\r\\n    /**\\r\\n     * @dev Event emitted when an underlying token's oracle is changed.\\r\\n     */\\r\\n    event NewOracle(address underlying, address oldOracle, address newOracle);\\r\\n\\r\\n    /**\\r\\n     * @dev Constructor to initialize state variables.\\r\\n     * @param underlyings The underlying ERC20 token addresses to link to `_oracles`.\\r\\n     * @param _oracles The `PriceOracle` contracts to be assigned to `underlyings`.\\r\\n     * @param _defaultOracle The default `PriceOracle` contract to use.\\r\\n     * @param _admin The admin who can assign oracles to underlying tokens.\\r\\n     * @param _canAdminOverwrite Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\\r\\n     */\\r\\n    function initialize(address[] memory underlyings, PriceOracle[] memory _oracles, PriceOracle _defaultOracle, address _admin, bool _canAdminOverwrite) external initializer {\\r\\n        // Input validation\\r\\n        require(underlyings.length == _oracles.length, \\\"Lengths of both arrays must be equal.\\\");\\r\\n\\r\\n        // Initialize state variables\\r\\n        for (uint256 i = 0; i < underlyings.length; i++) {\\r\\n            address underlying = underlyings[i];\\r\\n            PriceOracle newOracle = _oracles[i];\\r\\n            oracles[underlying] = newOracle;\\r\\n            emit NewOracle(underlying, address(0), address(newOracle));\\r\\n        }\\r\\n\\r\\n        defaultOracle = _defaultOracle;\\r\\n        admin = _admin;\\r\\n        noAdminOverwrite = !_canAdminOverwrite;\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Sets `_oracles` for `underlyings`.\\r\\n     */\\r\\n    function add(address[] calldata underlyings, PriceOracle[] calldata _oracles) external onlyAdmin {\\r\\n        // Input validation\\r\\n        require(underlyings.length > 0 && underlyings.length == _oracles.length, \\\"Lengths of both arrays must be equal and greater than 0.\\\");\\r\\n\\r\\n        // Assign oracles to underlying tokens\\r\\n        for (uint256 i = 0; i < underlyings.length; i++) {\\r\\n            address underlying = underlyings[i];\\r\\n            address oldOracle = address(oracles[underlying]);\\r\\n            if (noAdminOverwrite) require(oldOracle == address(0), \\\"Admin cannot overwrite existing assignments of oracles to underlying tokens.\\\");\\r\\n            PriceOracle newOracle = _oracles[i];\\r\\n            oracles[underlying] = newOracle;\\r\\n            emit NewOracle(underlying, oldOracle, address(newOracle));\\r\\n        }\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Changes the admin and emits an event.\\r\\n     */\\r\\n    function setDefaultOracle(PriceOracle newOracle) external onlyAdmin {\\r\\n        PriceOracle oldOracle = defaultOracle;\\r\\n        defaultOracle = newOracle;\\r\\n        emit NewDefaultOracle(address(oldOracle), address(newOracle));\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Changes the admin and emits an event.\\r\\n     */\\r\\n    function changeAdmin(address newAdmin) external onlyAdmin {\\r\\n        address oldAdmin = admin;\\r\\n        admin = newAdmin;\\r\\n        emit NewAdmin(oldAdmin, newAdmin);\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Modifier that checks if `msg.sender == admin`.\\r\\n     */\\r\\n    modifier onlyAdmin {\\r\\n        require(msg.sender == admin, \\\"Sender is not the admin.\\\");\\r\\n        _;\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @notice Returns the price in ETH of the token underlying `cToken`.\\r\\n     * @dev Implements the `PriceOracle` interface for Fuse pools (and Compound v2).\\r\\n     * @return Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`.\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        // Get underlying ERC20 token address\\r\\n        address underlying = address(CErc20(address(cToken)).underlying());\\r\\n\\r\\n        // Return 1e18 for WETH\\r\\n        if (underlying == 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) return 1e18;\\r\\n\\r\\n        // Get underlying price from assigned oracle\\r\\n        PriceOracle oracle = oracles[underlying];\\r\\n        if (address(oracle) != address(0)) return oracle.getUnderlyingPrice(cToken);\\r\\n        if (address(defaultOracle) != address(0)) return defaultOracle.getUnderlyingPrice(cToken);\\r\\n        revert(\\\"Price oracle not found for this underlying token address.\\\");\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Attempts to return the price in ETH of `underlying` (implements `BasePriceOracle`).\\r\\n     */\\r\\n    function price(address underlying) external override view returns (uint) {\\r\\n        // Return 1e18 for WETH\\r\\n        if (underlying == 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) return 1e18;\\r\\n\\r\\n        // Get underlying price from assigned oracle\\r\\n        PriceOracle oracle = oracles[underlying];\\r\\n        if (address(oracle) != address(0)) return BasePriceOracle(address(oracle)).price(underlying);\\r\\n        if (address(defaultOracle) != address(0)) return BasePriceOracle(address(defaultOracle)).price(underlying);\\r\\n        revert(\\\"Price oracle not found for this underlying token address.\\\");\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:\\\\Users\\\\david\\\\Dropbox\\\\Rari\\\\v1\\\\fuse-contracts\\\\contracts\\\\oracles\\\\MasterPriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/MasterPriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"MasterPriceOracle\": [\n        19469\n      ]\n    },\n    \"id\": 19470,\n    \"license\": \"UNLICENSED\",\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 19038,\n        \"literals\": [\n          \"solidity\",\n          \"0.6\",\n          \".12\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"40:23:99\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\",\n        \"id\": 19039,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 24364,\n        \"src\": \"67:69:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 19040,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 9881,\n        \"src\": \"140:46:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 19041,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 9699,\n        \"src\": \"188:41:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 19042,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 9556,\n        \"src\": \"231:41:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n        \"file\": \"./BasePriceOracle.sol\",\n        \"id\": 19043,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 15123,\n        \"src\": \"276:31:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 19045,\n              \"name\": \"Initializable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 24363,\n              \"src\": \"540:13:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Initializable_$24363\",\n                \"typeString\": \"contract Initializable\"\n              }\n            },\n            \"id\": 19046,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"540:13:99\"\n          },\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 19047,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 9880,\n              \"src\": \"555:11:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 19048,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"555:11:99\"\n          },\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 19049,\n              \"name\": \"BasePriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 15122,\n              \"src\": \"568:15:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_BasePriceOracle_$15122\",\n                \"typeString\": \"contract BasePriceOracle\"\n              }\n            },\n            \"id\": 19050,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"568:15:99\"\n          }\n        ],\n        \"contractDependencies\": [\n          9880,\n          15122,\n          24363\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 19044,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"311:197:99\",\n          \"text\": \" @title MasterPriceOracle\\n @notice Use a combination of price oracles.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 19469,\n        \"linearizedBaseContracts\": [\n          19469,\n          15122,\n          9880,\n          24363\n        ],\n        \"name\": \"MasterPriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 19051,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"591:126:99\",\n              \"text\": \" @dev Maps underlying token addresses to `PriceOracle` contracts (can be `BasePriceOracle` contracts too).\"\n            },\n            \"functionSelector\": \"addd5099\",\n            \"id\": 19055,\n            \"mutability\": \"mutable\",\n            \"name\": \"oracles\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 19469,\n            \"src\": \"723:46:99\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n              \"typeString\": \"mapping(address => contract PriceOracle)\"\n            },\n            \"typeName\": {\n              \"id\": 19054,\n              \"keyType\": {\n                \"id\": 19052,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"731:7:99\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"723:31:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                \"typeString\": \"mapping(address => contract PriceOracle)\"\n              },\n              \"valueType\": {\n                \"contractScope\": null,\n                \"id\": 19053,\n                \"name\": \"PriceOracle\",\n                \"nodeType\": \"UserDefinedTypeName\",\n                \"referencedDeclaration\": 9880,\n                \"src\": \"742:11:99\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                  \"typeString\": \"contract PriceOracle\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 19056,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"778:57:99\",\n              \"text\": \" @dev Default/fallback `PriceOracle`.\"\n            },\n            \"functionSelector\": \"80dce169\",\n            \"id\": 19058,\n            \"mutability\": \"mutable\",\n            \"name\": \"defaultOracle\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 19469,\n            \"src\": \"841:32:99\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n              \"typeString\": \"contract PriceOracle\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 19057,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 9880,\n              \"src\": \"841:11:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 19059,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"882:72:99\",\n              \"text\": \" @dev The administrator of this `MasterPriceOracle`.\"\n            },\n            \"functionSelector\": \"f851a440\",\n            \"id\": 19061,\n            \"mutability\": \"mutable\",\n            \"name\": \"admin\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 19469,\n            \"src\": \"960:20:99\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 19060,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"960:7:99\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 19062,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"989:113:99\",\n              \"text\": \" @dev Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\"\n            },\n            \"id\": 19064,\n            \"mutability\": \"mutable\",\n            \"name\": \"noAdminOverwrite\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 19469,\n            \"src\": \"1108:30:99\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_bool\",\n              \"typeString\": \"bool\"\n            },\n            \"typeName\": {\n              \"id\": 19063,\n              \"name\": \"bool\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1108:4:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_bool\",\n                \"typeString\": \"bool\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 19073,\n              \"nodeType\": \"Block\",\n              \"src\": \"1344:43:99\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19071,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"UnaryOperation\",\n                    \"operator\": \"!\",\n                    \"prefix\": true,\n                    \"src\": \"1362:17:99\",\n                    \"subExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19070,\n                      \"name\": \"noAdminOverwrite\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19064,\n                      \"src\": \"1363:16:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"functionReturnParameters\": 19069,\n                  \"id\": 19072,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1355:24:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19065,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1147:133:99\",\n              \"text\": \" @dev Returns a boolean indicating if `admin` can overwrite existing assignments of oracles to underlying tokens.\"\n            },\n            \"functionSelector\": \"656b0fd1\",\n            \"id\": 19074,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"canAdminOverwrite\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19066,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1312:2:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19069,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19068,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19074,\n                  \"src\": \"1338:4:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19067,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1338:4:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1337:6:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"1286:101:99\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": {\n              \"id\": 19075,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1395:64:99\",\n              \"text\": \" @dev Event emitted when `admin` is changed.\"\n            },\n            \"id\": 19081,\n            \"name\": \"NewAdmin\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 19080,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19077,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"oldAdmin\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19081,\n                  \"src\": \"1480:16:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19076,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1480:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19079,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newAdmin\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19081,\n                  \"src\": \"1498:16:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19078,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1498:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1479:36:99\"\n            },\n            \"src\": \"1465:51:99\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": {\n              \"id\": 19082,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1524:75:99\",\n              \"text\": \" @dev Event emitted when the default oracle is changed.\"\n            },\n            \"id\": 19088,\n            \"name\": \"NewDefaultOracle\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 19087,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19084,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"oldOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19088,\n                  \"src\": \"1628:17:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19083,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1628:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19086,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19088,\n                  \"src\": \"1647:17:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19085,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1647:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1627:38:99\"\n            },\n            \"src\": \"1605:61:99\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": {\n              \"id\": 19089,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1674:85:99\",\n              \"text\": \" @dev Event emitted when an underlying token's oracle is changed.\"\n            },\n            \"id\": 19097,\n            \"name\": \"NewOracle\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 19096,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19091,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19097,\n                  \"src\": \"1781:18:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19090,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1781:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19093,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"oldOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19097,\n                  \"src\": \"1801:17:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19092,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1801:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19095,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19097,\n                  \"src\": \"1820:17:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19094,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1820:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1780:58:99\"\n            },\n            \"src\": \"1765:74:99\"\n          },\n          {\n            \"body\": {\n              \"id\": 19180,\n              \"nodeType\": \"Block\",\n              \"src\": \"2536:583:99\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 19120,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19116,\n                            \"name\": \"underlyings\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19101,\n                            \"src\": \"2584:11:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                              \"typeString\": \"address[] memory\"\n                            }\n                          },\n                          \"id\": 19117,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"length\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2584:18:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19118,\n                            \"name\": \"_oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19104,\n                            \"src\": \"2606:8:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_memory_ptr\",\n                              \"typeString\": \"contract PriceOracle[] memory\"\n                            }\n                          },\n                          \"id\": 19119,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"length\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2606:15:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"2584:37:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4c656e67746873206f6620626f746820617272617973206d75737420626520657175616c2e\",\n                        \"id\": 19121,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2623:39:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_239018df88f220ade4bb7a4d6f5fd76d8413e195325c61d740c9fde2750f444d\",\n                          \"typeString\": \"literal_string \\\"Lengths of both arrays must be equal.\\\"\"\n                        },\n                        \"value\": \"Lengths of both arrays must be equal.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_239018df88f220ade4bb7a4d6f5fd76d8413e195325c61d740c9fde2750f444d\",\n                          \"typeString\": \"literal_string \\\"Lengths of both arrays must be equal.\\\"\"\n                        }\n                      ],\n                      \"id\": 19115,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"2576:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 19122,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2576:87:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19123,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2576:87:99\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 19165,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2764:231:99\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [\n                          19136\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19136,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"underlying\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19165,\n                            \"src\": \"2779:18:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            \"typeName\": {\n                              \"id\": 19135,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"2779:7:99\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19140,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19137,\n                            \"name\": \"underlyings\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19101,\n                            \"src\": \"2800:11:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                              \"typeString\": \"address[] memory\"\n                            }\n                          },\n                          \"id\": 19139,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19138,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19125,\n                            \"src\": \"2812:1:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2800:14:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"2779:35:99\"\n                      },\n                      {\n                        \"assignments\": [\n                          19142\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19142,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19165,\n                            \"src\": \"2829:21:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            },\n                            \"typeName\": {\n                              \"contractScope\": null,\n                              \"id\": 19141,\n                              \"name\": \"PriceOracle\",\n                              \"nodeType\": \"UserDefinedTypeName\",\n                              \"referencedDeclaration\": 9880,\n                              \"src\": \"2829:11:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19146,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19143,\n                            \"name\": \"_oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19104,\n                            \"src\": \"2853:8:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_memory_ptr\",\n                              \"typeString\": \"contract PriceOracle[] memory\"\n                            }\n                          },\n                          \"id\": 19145,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19144,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19125,\n                            \"src\": \"2862:1:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2853:11:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"2829:35:99\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19151,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19147,\n                              \"name\": \"oracles\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19055,\n                              \"src\": \"2879:7:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                                \"typeString\": \"mapping(address => contract PriceOracle)\"\n                              }\n                            },\n                            \"id\": 19149,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19148,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19136,\n                              \"src\": \"2887:10:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2879:19:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19150,\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19142,\n                            \"src\": \"2901:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          },\n                          \"src\": \"2879:31:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"id\": 19152,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2879:31:99\"\n                      },\n                      {\n                        \"eventCall\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 19154,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19136,\n                              \"src\": \"2940:10:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"30\",\n                                  \"id\": 19157,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"2960:1:99\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                    \"typeString\": \"int_const 0\"\n                                  },\n                                  \"value\": \"0\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                    \"typeString\": \"int_const 0\"\n                                  }\n                                ],\n                                \"id\": 19156,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"2952:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19155,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"2952:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19158,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2952:10:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19161,\n                                  \"name\": \"newOracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19142,\n                                  \"src\": \"2972:9:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                ],\n                                \"id\": 19160,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"2964:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19159,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"2964:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19162,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2964:18:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 19153,\n                            \"name\": \"NewOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19097,\n                            \"src\": \"2930:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$\",\n                              \"typeString\": \"function (address,address,address)\"\n                            }\n                          },\n                          \"id\": 19163,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2930:53:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 19164,\n                        \"nodeType\": \"EmitStatement\",\n                        \"src\": \"2925:58:99\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 19131,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19128,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19125,\n                      \"src\": \"2735:1:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19129,\n                        \"name\": \"underlyings\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19101,\n                        \"src\": \"2739:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                          \"typeString\": \"address[] memory\"\n                        }\n                      },\n                      \"id\": 19130,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"length\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"2739:18:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2735:22:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 19166,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      19125\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 19125,\n                        \"mutability\": \"mutable\",\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"overrides\": null,\n                        \"scope\": 19166,\n                        \"src\": \"2720:9:99\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19124,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2720:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 19127,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 19126,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2732:1:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"2720:13:99\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19133,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"2759:3:99\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19132,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19125,\n                        \"src\": \"2759:1:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 19134,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"2759:3:99\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"2715:280:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19169,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19167,\n                      \"name\": \"defaultOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19058,\n                      \"src\": \"3007:13:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19168,\n                      \"name\": \"_defaultOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19106,\n                      \"src\": \"3023:14:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"src\": \"3007:30:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"id\": 19170,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3007:30:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19173,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19171,\n                      \"name\": \"admin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19061,\n                      \"src\": \"3048:5:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19172,\n                      \"name\": \"_admin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19108,\n                      \"src\": \"3056:6:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"3048:14:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 19174,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3048:14:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19178,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19175,\n                      \"name\": \"noAdminOverwrite\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19064,\n                      \"src\": \"3073:16:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19177,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"!\",\n                      \"prefix\": true,\n                      \"src\": \"3092:19:99\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19176,\n                        \"name\": \"_canAdminOverwrite\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19110,\n                        \"src\": \"3093:18:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"src\": \"3073:38:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 19179,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3073:38:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19098,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1847:512:99\",\n              \"text\": \" @dev Constructor to initialize state variables.\\n @param underlyings The underlying ERC20 token addresses to link to `_oracles`.\\n @param _oracles The `PriceOracle` contracts to be assigned to `underlyings`.\\n @param _defaultOracle The default `PriceOracle` contract to use.\\n @param _admin The admin who can assign oracles to underlying tokens.\\n @param _canAdminOverwrite Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\"\n            },\n            \"functionSelector\": \"278aa146\",\n            \"id\": 19181,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 19113,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19112,\n                  \"name\": \"initializer\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 24346,\n                  \"src\": \"2524:11:99\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"2524:11:99\"\n              }\n            ],\n            \"name\": \"initialize\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19111,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19101,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlyings\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2385:28:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                    \"typeString\": \"address[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 19099,\n                      \"name\": \"address\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"2385:7:99\",\n                      \"stateMutability\": \"nonpayable\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 19100,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2385:9:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_address_$dyn_storage_ptr\",\n                      \"typeString\": \"address[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19104,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_oracles\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2415:29:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_memory_ptr\",\n                    \"typeString\": \"contract PriceOracle[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"contractScope\": null,\n                      \"id\": 19102,\n                      \"name\": \"PriceOracle\",\n                      \"nodeType\": \"UserDefinedTypeName\",\n                      \"referencedDeclaration\": 9880,\n                      \"src\": \"2415:11:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"id\": 19103,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2415:13:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_storage_ptr\",\n                      \"typeString\": \"contract PriceOracle[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19106,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_defaultOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2446:26:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                    \"typeString\": \"contract PriceOracle\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 19105,\n                    \"name\": \"PriceOracle\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 9880,\n                    \"src\": \"2446:11:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19108,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_admin\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2474:14:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19107,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2474:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19110,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_canAdminOverwrite\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2490:23:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19109,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2490:4:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2384:130:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19114,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2536:0:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"2365:754:99\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 19268,\n              \"nodeType\": \"Block\",\n              \"src\": \"3290:731:99\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        \"id\": 19203,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 19197,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19194,\n                              \"name\": \"underlyings\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19185,\n                              \"src\": \"3338:11:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                                \"typeString\": \"address[] calldata\"\n                              }\n                            },\n                            \"id\": 19195,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"length\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": null,\n                            \"src\": \"3338:18:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \">\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 19196,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"3359:1:99\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          },\n                          \"src\": \"3338:22:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"&&\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 19202,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19198,\n                              \"name\": \"underlyings\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19185,\n                              \"src\": \"3364:11:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                                \"typeString\": \"address[] calldata\"\n                              }\n                            },\n                            \"id\": 19199,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"length\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": null,\n                            \"src\": \"3364:18:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"==\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19200,\n                              \"name\": \"_oracles\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19188,\n                              \"src\": \"3386:8:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_calldata_ptr\",\n                                \"typeString\": \"contract PriceOracle[] calldata\"\n                              }\n                            },\n                            \"id\": 19201,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"length\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": null,\n                            \"src\": \"3386:15:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"3364:37:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"src\": \"3338:63:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4c656e67746873206f6620626f746820617272617973206d75737420626520657175616c20616e642067726561746572207468616e20302e\",\n                        \"id\": 19204,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3403:58:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_0024912e31c6e5c7211aa64ccdb0c2e6097a15ae45c8d5291ee1fa6ba6b29473\",\n                          \"typeString\": \"literal_string \\\"Lengths of both arrays must be equal and greater than 0.\\\"\"\n                        },\n                        \"value\": \"Lengths of both arrays must be equal and greater than 0.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_0024912e31c6e5c7211aa64ccdb0c2e6097a15ae45c8d5291ee1fa6ba6b29473\",\n                          \"typeString\": \"literal_string \\\"Lengths of both arrays must be equal and greater than 0.\\\"\"\n                        }\n                      ],\n                      \"id\": 19193,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"3330:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 19205,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3330:132:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19206,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3330:132:99\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 19266,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"3572:442:99\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [\n                          19219\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19219,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"underlying\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19266,\n                            \"src\": \"3587:18:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            \"typeName\": {\n                              \"id\": 19218,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"3587:7:99\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19223,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19220,\n                            \"name\": \"underlyings\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19185,\n                            \"src\": \"3608:11:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                              \"typeString\": \"address[] calldata\"\n                            }\n                          },\n                          \"id\": 19222,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19221,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19208,\n                            \"src\": \"3620:1:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"3608:14:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"3587:35:99\"\n                      },\n                      {\n                        \"assignments\": [\n                          19225\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19225,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"oldOracle\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19266,\n                            \"src\": \"3637:17:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            \"typeName\": {\n                              \"id\": 19224,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"3637:7:99\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19232,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 19228,\n                                \"name\": \"oracles\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 19055,\n                                \"src\": \"3665:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                                  \"typeString\": \"mapping(address => contract PriceOracle)\"\n                                }\n                              },\n                              \"id\": 19230,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 19229,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 19219,\n                                \"src\": \"3673:10:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"3665:19:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            ],\n                            \"id\": 19227,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"3657:7:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 19226,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"3657:7:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 19231,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3657:28:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"3637:48:99\"\n                      },\n                      {\n                        \"condition\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19233,\n                          \"name\": \"noAdminOverwrite\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19064,\n                          \"src\": \"3704:16:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"falseBody\": null,\n                        \"id\": 19244,\n                        \"nodeType\": \"IfStatement\",\n                        \"src\": \"3700:134:99\",\n                        \"trueBody\": {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                },\n                                \"id\": 19240,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19235,\n                                  \"name\": \"oldOracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19225,\n                                  \"src\": \"3730:9:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \"==\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"hexValue\": \"30\",\n                                      \"id\": 19238,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"kind\": \"number\",\n                                      \"lValueRequested\": false,\n                                      \"nodeType\": \"Literal\",\n                                      \"src\": \"3751:1:99\",\n                                      \"subdenomination\": null,\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                        \"typeString\": \"int_const 0\"\n                                      },\n                                      \"value\": \"0\"\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                        \"typeString\": \"int_const 0\"\n                                      }\n                                    ],\n                                    \"id\": 19237,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"3743:7:99\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_address_$\",\n                                      \"typeString\": \"type(address)\"\n                                    },\n                                    \"typeName\": {\n                                      \"id\": 19236,\n                                      \"name\": \"address\",\n                                      \"nodeType\": \"ElementaryTypeName\",\n                                      \"src\": \"3743:7:99\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": null,\n                                        \"typeString\": null\n                                      }\n                                    }\n                                  },\n                                  \"id\": 19239,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"3743:10:99\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                },\n                                \"src\": \"3730:23:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"41646d696e2063616e6e6f74206f7665727772697465206578697374696e672061737369676e6d656e7473206f66206f7261636c657320746f20756e6465726c79696e6720746f6b656e732e\",\n                                \"id\": 19241,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"string\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"3755:78:99\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_stringliteral_0008efc8c5effd0665ab06a5f13b792241a830a05df39e3c5b14b08a900c09e8\",\n                                  \"typeString\": \"literal_string \\\"Admin cannot overwrite existing assignments of oracles to underlying tokens.\\\"\"\n                                },\n                                \"value\": \"Admin cannot overwrite existing assignments of oracles to underlying tokens.\"\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_0008efc8c5effd0665ab06a5f13b792241a830a05df39e3c5b14b08a900c09e8\",\n                                  \"typeString\": \"literal_string \\\"Admin cannot overwrite existing assignments of oracles to underlying tokens.\\\"\"\n                                }\n                              ],\n                              \"id\": 19234,\n                              \"name\": \"require\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [\n                                -18,\n                                -18\n                              ],\n                              \"referencedDeclaration\": -18,\n                              \"src\": \"3722:7:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                \"typeString\": \"function (bool,string memory) pure\"\n                              }\n                            },\n                            \"id\": 19242,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3722:112:99\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_tuple$__$\",\n                              \"typeString\": \"tuple()\"\n                            }\n                          },\n                          \"id\": 19243,\n                          \"nodeType\": \"ExpressionStatement\",\n                          \"src\": \"3722:112:99\"\n                        }\n                      },\n                      {\n                        \"assignments\": [\n                          19246\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19246,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19266,\n                            \"src\": \"3849:21:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            },\n                            \"typeName\": {\n                              \"contractScope\": null,\n                              \"id\": 19245,\n                              \"name\": \"PriceOracle\",\n                              \"nodeType\": \"UserDefinedTypeName\",\n                              \"referencedDeclaration\": 9880,\n                              \"src\": \"3849:11:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19250,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19247,\n                            \"name\": \"_oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19188,\n                            \"src\": \"3873:8:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_calldata_ptr\",\n                              \"typeString\": \"contract PriceOracle[] calldata\"\n                            }\n                          },\n                          \"id\": 19249,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19248,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19208,\n                            \"src\": \"3882:1:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"3873:11:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"3849:35:99\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19255,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19251,\n                              \"name\": \"oracles\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19055,\n                              \"src\": \"3899:7:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                                \"typeString\": \"mapping(address => contract PriceOracle)\"\n                              }\n                            },\n                            \"id\": 19253,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19252,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19219,\n                              \"src\": \"3907:10:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"3899:19:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19254,\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19246,\n                            \"src\": \"3921:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          },\n                          \"src\": \"3899:31:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"id\": 19256,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"3899:31:99\"\n                      },\n                      {\n                        \"eventCall\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 19258,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19219,\n                              \"src\": \"3960:10:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 19259,\n                              \"name\": \"oldOracle\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19225,\n                              \"src\": \"3972:9:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19262,\n                                  \"name\": \"newOracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19246,\n                                  \"src\": \"3991:9:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                ],\n                                \"id\": 19261,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"3983:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19260,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"3983:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19263,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"3983:18:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 19257,\n                            \"name\": \"NewOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19097,\n                            \"src\": \"3950:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$\",\n                              \"typeString\": \"function (address,address,address)\"\n                            }\n                          },\n                          \"id\": 19264,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3950:52:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 19265,\n                        \"nodeType\": \"EmitStatement\",\n                        \"src\": \"3945:57:99\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 19214,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19211,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19208,\n                      \"src\": \"3543:1:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19212,\n                        \"name\": \"underlyings\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19185,\n                        \"src\": \"3547:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                          \"typeString\": \"address[] calldata\"\n                        }\n                      },\n                      \"id\": 19213,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"length\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"3547:18:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"3543:22:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 19267,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      19208\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 19208,\n                        \"mutability\": \"mutable\",\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"overrides\": null,\n                        \"scope\": 19267,\n                        \"src\": \"3528:9:99\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19207,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"3528:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 19210,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 19209,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"3540:1:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"3528:13:99\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19216,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"3567:3:99\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19215,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19208,\n                        \"src\": \"3567:1:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 19217,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"3567:3:99\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"3523:491:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19182,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"3127:60:99\",\n              \"text\": \" @dev Sets `_oracles` for `underlyings`.\"\n            },\n            \"functionSelector\": \"9c9192c6\",\n            \"id\": 19269,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 19191,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19190,\n                  \"name\": \"onlyAdmin\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 19332,\n                  \"src\": \"3280:9:99\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"3280:9:99\"\n              }\n            ],\n            \"name\": \"add\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19189,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19185,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlyings\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19269,\n                  \"src\": \"3206:30:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                    \"typeString\": \"address[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 19183,\n                      \"name\": \"address\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"3206:7:99\",\n                      \"stateMutability\": \"nonpayable\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 19184,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"3206:9:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_address_$dyn_storage_ptr\",\n                      \"typeString\": \"address[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19188,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_oracles\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19269,\n                  \"src\": \"3238:31:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_calldata_ptr\",\n                    \"typeString\": \"contract PriceOracle[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"contractScope\": null,\n                      \"id\": 19186,\n                      \"name\": \"PriceOracle\",\n                      \"nodeType\": \"UserDefinedTypeName\",\n                      \"referencedDeclaration\": 9880,\n                      \"src\": \"3238:11:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"id\": 19187,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"3238:13:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_storage_ptr\",\n                      \"typeString\": \"contract PriceOracle[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3205:65:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19192,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"3290:0:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"3193:828:99\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 19296,\n              \"nodeType\": \"Block\",\n              \"src\": \"4166:164:99\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    19278\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19278,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oldOracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19296,\n                      \"src\": \"4177:21:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 19277,\n                        \"name\": \"PriceOracle\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 9880,\n                        \"src\": \"4177:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                          \"typeString\": \"contract PriceOracle\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19280,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19279,\n                    \"name\": \"defaultOracle\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 19058,\n                    \"src\": \"4201:13:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4177:37:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19283,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19281,\n                      \"name\": \"defaultOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19058,\n                      \"src\": \"4225:13:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19282,\n                      \"name\": \"newOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19272,\n                      \"src\": \"4241:9:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"src\": \"4225:25:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"id\": 19284,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4225:25:99\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 19288,\n                            \"name\": \"oldOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19278,\n                            \"src\": \"4291:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          ],\n                          \"id\": 19287,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"4283:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 19286,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"4283:7:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 19289,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"4283:18:99\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 19292,\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19272,\n                            \"src\": \"4311:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          ],\n                          \"id\": 19291,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"4303:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 19290,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"4303:7:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 19293,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"4303:18:99\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 19285,\n                      \"name\": \"NewDefaultOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19088,\n                      \"src\": \"4266:16:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 19294,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4266:56:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19295,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"4261:61:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19270,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"4029:63:99\",\n              \"text\": \" @dev Changes the admin and emits an event.\"\n            },\n            \"functionSelector\": \"c44014d2\",\n            \"id\": 19297,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 19275,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19274,\n                  \"name\": \"onlyAdmin\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 19332,\n                  \"src\": \"4156:9:99\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"4156:9:99\"\n              }\n            ],\n            \"name\": \"setDefaultOracle\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19273,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19272,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19297,\n                  \"src\": \"4124:21:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                    \"typeString\": \"contract PriceOracle\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 19271,\n                    \"name\": \"PriceOracle\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 9880,\n                    \"src\": \"4124:11:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4123:23:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19276,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"4166:0:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"4098:232:99\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 19318,\n              \"nodeType\": \"Block\",\n              \"src\": \"4465:114:99\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    19306\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19306,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oldAdmin\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19318,\n                      \"src\": \"4476:16:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 19305,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4476:7:99\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19308,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19307,\n                    \"name\": \"admin\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 19061,\n                    \"src\": \"4495:5:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4476:24:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19311,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19309,\n                      \"name\": \"admin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19061,\n                      \"src\": \"4511:5:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19310,\n                      \"name\": \"newAdmin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19300,\n                      \"src\": \"4519:8:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"4511:16:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 19312,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4511:16:99\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 19314,\n                        \"name\": \"oldAdmin\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19306,\n                        \"src\": \"4552:8:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 19315,\n                        \"name\": \"newAdmin\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19300,\n                        \"src\": \"4562:8:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 19313,\n                      \"name\": \"NewAdmin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19081,\n                      \"src\": \"4543:8:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 19316,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4543:28:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19317,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"4538:33:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19298,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"4338:63:99\",\n              \"text\": \" @dev Changes the admin and emits an event.\"\n            },\n            \"functionSelector\": \"8f283970\",\n            \"id\": 19319,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 19303,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19302,\n                  \"name\": \"onlyAdmin\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 19332,\n                  \"src\": \"4455:9:99\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"4455:9:99\"\n              }\n            ],\n            \"name\": \"changeAdmin\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19301,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19300,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newAdmin\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19319,\n                  \"src\": \"4428:16:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19299,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4428:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4427:18:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19304,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"4465:0:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"4407:172:99\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 19331,\n              \"nodeType\": \"Block\",\n              \"src\": \"4684:87:99\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 19326,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19323,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -15,\n                            \"src\": \"4703:3:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 19324,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"sender\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"4703:10:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19325,\n                          \"name\": \"admin\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19061,\n                          \"src\": \"4717:5:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"src\": \"4703:19:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"53656e646572206973206e6f74207468652061646d696e2e\",\n                        \"id\": 19327,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4724:26:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_937deed29330e2cc004ec82b7b1db60954a566926d1d5d5f7a878cc657e32fae\",\n                          \"typeString\": \"literal_string \\\"Sender is not the admin.\\\"\"\n                        },\n                        \"value\": \"Sender is not the admin.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_937deed29330e2cc004ec82b7b1db60954a566926d1d5d5f7a878cc657e32fae\",\n                          \"typeString\": \"literal_string \\\"Sender is not the admin.\\\"\"\n                        }\n                      ],\n                      \"id\": 19322,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"4695:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 19328,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4695:56:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19329,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4695:56:99\"\n                },\n                {\n                  \"id\": 19330,\n                  \"nodeType\": \"PlaceholderStatement\",\n                  \"src\": \"4762:1:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19320,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"4587:72:99\",\n              \"text\": \" @dev Modifier that checks if `msg.sender == admin`.\"\n            },\n            \"id\": 19332,\n            \"name\": \"onlyAdmin\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19321,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"4684:0:99\"\n            },\n            \"src\": \"4665:106:99\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"baseFunctions\": [\n              9879\n            ],\n            \"body\": {\n              \"id\": 19401,\n              \"nodeType\": \"Block\",\n              \"src\": \"5147:622:99\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    19342\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19342,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19401,\n                      \"src\": \"5205:18:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 19341,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5205:7:99\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19354,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 19348,\n                                    \"name\": \"cToken\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 19335,\n                                    \"src\": \"5249:6:99\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  ],\n                                  \"id\": 19347,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"ElementaryTypeNameExpression\",\n                                  \"src\": \"5241:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_type$_t_address_$\",\n                                    \"typeString\": \"type(address)\"\n                                  },\n                                  \"typeName\": {\n                                    \"id\": 19346,\n                                    \"name\": \"address\",\n                                    \"nodeType\": \"ElementaryTypeName\",\n                                    \"src\": \"5241:7:99\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": null,\n                                      \"typeString\": null\n                                    }\n                                  }\n                                },\n                                \"id\": 19349,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"typeConversion\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"5241:15:99\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 19345,\n                              \"name\": \"CErc20\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9555,\n                              \"src\": \"5234:6:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$9555_$\",\n                                \"typeString\": \"type(contract CErc20)\"\n                              }\n                            },\n                            \"id\": 19350,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"5234:23:99\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_CErc20_$9555\",\n                              \"typeString\": \"contract CErc20\"\n                            }\n                          },\n                          \"id\": 19351,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"underlying\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 9543,\n                          \"src\": \"5234:34:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                            \"typeString\": \"function () view external returns (address)\"\n                          }\n                        },\n                        \"id\": 19352,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"5234:36:99\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 19344,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"5226:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_address_$\",\n                        \"typeString\": \"type(address)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 19343,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5226:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 19353,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"5226:45:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"5205:66:99\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19357,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19355,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19342,\n                      \"src\": \"5321:10:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                      \"id\": 19356,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"5335:42:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      },\n                      \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                    },\n                    \"src\": \"5321:56:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19360,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"5317:73:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 19358,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"5386:4:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 19340,\n                    \"id\": 19359,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"5379:11:99\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    19362\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19362,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19401,\n                      \"src\": \"5457:18:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 19361,\n                        \"name\": \"PriceOracle\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 9880,\n                        \"src\": \"5457:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                          \"typeString\": \"contract PriceOracle\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19366,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"baseExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19363,\n                      \"name\": \"oracles\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19055,\n                      \"src\": \"5478:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                        \"typeString\": \"mapping(address => contract PriceOracle)\"\n                      }\n                    },\n                    \"id\": 19365,\n                    \"indexExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19364,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19342,\n                      \"src\": \"5486:10:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"IndexAccess\",\n                    \"src\": \"5478:19:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"5457:40:99\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19375,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19369,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19362,\n                          \"src\": \"5520:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        ],\n                        \"id\": 19368,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"5512:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19367,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"5512:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19370,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5512:15:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 19373,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5539:1:99\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 19372,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"5531:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19371,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"5531:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19374,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5531:10:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"5512:29:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19381,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"5508:75:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19378,\n                          \"name\": \"cToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19335,\n                          \"src\": \"5576:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19376,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19362,\n                          \"src\": \"5550:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"id\": 19377,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"getUnderlyingPrice\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 9879,\n                        \"src\": \"5550:25:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_contract$_CToken_$9698_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (contract CToken) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 19379,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5550:33:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"functionReturnParameters\": 19340,\n                    \"id\": 19380,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"5543:40:99\"\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19390,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19384,\n                          \"name\": \"defaultOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19058,\n                          \"src\": \"5606:13:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        ],\n                        \"id\": 19383,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"5598:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19382,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"5598:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19385,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5598:22:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 19388,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5632:1:99\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 19387,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"5624:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19386,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"5624:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19389,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5624:10:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"5598:36:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19396,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"5594:89:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19393,\n                          \"name\": \"cToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19335,\n                          \"src\": \"5676:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19391,\n                          \"name\": \"defaultOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19058,\n                          \"src\": \"5643:13:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"id\": 19392,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"getUnderlyingPrice\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 9879,\n                        \"src\": \"5643:32:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_contract$_CToken_$9698_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (contract CToken) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 19394,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5643:40:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"functionReturnParameters\": 19340,\n                    \"id\": 19395,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"5636:47:99\"\n                  }\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"5072696365206f7261636c65206e6f7420666f756e6420666f72207468697320756e6465726c79696e6720746f6b656e20616464726573732e\",\n                        \"id\": 19398,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"5701:59:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_bca42cedac13b8f598dbb8e0556ae4078b48f952c304e7ad347acc420ad294f3\",\n                          \"typeString\": \"literal_string \\\"Price oracle not found for this underlying token address.\\\"\"\n                        },\n                        \"value\": \"Price oracle not found for this underlying token address.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_bca42cedac13b8f598dbb8e0556ae4078b48f952c304e7ad347acc420ad294f3\",\n                          \"typeString\": \"literal_string \\\"Price oracle not found for this underlying token address.\\\"\"\n                        }\n                      ],\n                      \"id\": 19397,\n                      \"name\": \"revert\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -19,\n                        -19\n                      ],\n                      \"referencedDeclaration\": -19,\n                      \"src\": \"5694:6:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_revert_pure$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (string memory) pure\"\n                      }\n                    },\n                    \"id\": 19399,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"5694:67:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19400,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5694:67:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19333,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"4779:281:99\",\n              \"text\": \" @notice Returns the price in ETH of the token underlying `cToken`.\\n @dev Implements the `PriceOracle` interface for Fuse pools (and Compound v2).\\n @return Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`.\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 19402,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 19337,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"5118:8:99\"\n            },\n            \"parameters\": {\n              \"id\": 19336,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19335,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19402,\n                  \"src\": \"5094:13:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 19334,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 9698,\n                    \"src\": \"5094:6:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5093:15:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19340,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19339,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19402,\n                  \"src\": \"5141:4:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19338,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"5141:4:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5140:6:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"5066:703:99\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"baseFunctions\": [\n              15121\n            ],\n            \"body\": {\n              \"id\": 19467,\n              \"nodeType\": \"Block\",\n              \"src\": \"5965:530:99\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19413,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19411,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19405,\n                      \"src\": \"6013:10:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                      \"id\": 19412,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"6027:42:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      },\n                      \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                    },\n                    \"src\": \"6013:56:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19416,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"6009:73:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 19414,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"6078:4:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 19410,\n                    \"id\": 19415,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"6071:11:99\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    19418\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19418,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19467,\n                      \"src\": \"6149:18:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 19417,\n                        \"name\": \"PriceOracle\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 9880,\n                        \"src\": \"6149:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                          \"typeString\": \"contract PriceOracle\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19422,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"baseExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19419,\n                      \"name\": \"oracles\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19055,\n                      \"src\": \"6170:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                        \"typeString\": \"mapping(address => contract PriceOracle)\"\n                      }\n                    },\n                    \"id\": 19421,\n                    \"indexExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19420,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19405,\n                      \"src\": \"6178:10:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"IndexAccess\",\n                    \"src\": \"6170:19:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"6149:40:99\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19431,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19425,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19418,\n                          \"src\": \"6212:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        ],\n                        \"id\": 19424,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6204:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19423,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6204:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19426,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6204:15:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 19429,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6231:1:99\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 19428,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6223:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19427,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6223:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19430,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6223:10:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"6204:29:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19442,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"6200:92:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19439,\n                          \"name\": \"underlying\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19405,\n                          \"src\": \"6281:10:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19435,\n                                  \"name\": \"oracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19418,\n                                  \"src\": \"6266:6:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                ],\n                                \"id\": 19434,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"6258:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19433,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"6258:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19436,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"6258:15:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 19432,\n                            \"name\": \"BasePriceOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 15122,\n                            \"src\": \"6242:15:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$15122_$\",\n                              \"typeString\": \"type(contract BasePriceOracle)\"\n                            }\n                          },\n                          \"id\": 19437,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"6242:32:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_BasePriceOracle_$15122\",\n                            \"typeString\": \"contract BasePriceOracle\"\n                          }\n                        },\n                        \"id\": 19438,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"price\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 15121,\n                        \"src\": \"6242:38:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (address) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 19440,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6242:50:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"functionReturnParameters\": 19410,\n                    \"id\": 19441,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"6235:57:99\"\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19451,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19445,\n                          \"name\": \"defaultOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19058,\n                          \"src\": \"6315:13:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        ],\n                        \"id\": 19444,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6307:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19443,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6307:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19446,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6307:22:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 19449,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6341:1:99\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 19448,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6333:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19447,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6333:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19450,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6333:10:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"6307:36:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19462,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"6303:106:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19459,\n                          \"name\": \"underlying\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19405,\n                          \"src\": \"6398:10:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19455,\n                                  \"name\": \"defaultOracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19058,\n                                  \"src\": \"6376:13:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                ],\n                                \"id\": 19454,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"6368:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19453,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"6368:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19456,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"6368:22:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 19452,\n                            \"name\": \"BasePriceOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 15122,\n                            \"src\": \"6352:15:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$15122_$\",\n                              \"typeString\": \"type(contract BasePriceOracle)\"\n                            }\n                          },\n                          \"id\": 19457,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"6352:39:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_BasePriceOracle_$15122\",\n                            \"typeString\": \"contract BasePriceOracle\"\n                          }\n                        },\n                        \"id\": 19458,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"price\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 15121,\n                        \"src\": \"6352:45:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (address) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 19460,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6352:57:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"functionReturnParameters\": 19410,\n                    \"id\": 19461,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"6345:64:99\"\n                  }\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"5072696365206f7261636c65206e6f7420666f756e6420666f72207468697320756e6465726c79696e6720746f6b656e20616464726573732e\",\n                        \"id\": 19464,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"6427:59:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_bca42cedac13b8f598dbb8e0556ae4078b48f952c304e7ad347acc420ad294f3\",\n                          \"typeString\": \"literal_string \\\"Price oracle not found for this underlying token address.\\\"\"\n                        },\n                        \"value\": \"Price oracle not found for this underlying token address.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_bca42cedac13b8f598dbb8e0556ae4078b48f952c304e7ad347acc420ad294f3\",\n                          \"typeString\": \"literal_string \\\"Price oracle not found for this underlying token address.\\\"\"\n                        }\n                      ],\n                      \"id\": 19463,\n                      \"name\": \"revert\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -19,\n                        -19\n                      ],\n                      \"referencedDeclaration\": -19,\n                      \"src\": \"6420:6:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_revert_pure$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (string memory) pure\"\n                      }\n                    },\n                    \"id\": 19465,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"6420:67:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19466,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"6420:67:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19403,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"5777:109:99\",\n              \"text\": \" @dev Attempts to return the price in ETH of `underlying` (implements `BasePriceOracle`).\"\n            },\n            \"functionSelector\": \"aea91078\",\n            \"id\": 19468,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 19407,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"5936:8:99\"\n            },\n            \"parameters\": {\n              \"id\": 19406,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19405,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19468,\n                  \"src\": \"5907:18:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19404,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"5907:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5906:20:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19410,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19409,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19468,\n                  \"src\": \"5959:4:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19408,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"5959:4:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5958:6:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"5892:603:99\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 19470,\n        \"src\": \"510:5988:99\"\n      }\n    ],\n    \"src\": \"40:6460:99\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/MasterPriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"MasterPriceOracle\": [\n        19469\n      ]\n    },\n    \"id\": 19470,\n    \"license\": \"UNLICENSED\",\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 19038,\n        \"literals\": [\n          \"solidity\",\n          \"0.6\",\n          \".12\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"40:23:99\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\",\n        \"id\": 19039,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 24364,\n        \"src\": \"67:69:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 19040,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 9881,\n        \"src\": \"140:46:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 19041,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 9699,\n        \"src\": \"188:41:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 19042,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 9556,\n        \"src\": \"231:41:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n        \"file\": \"./BasePriceOracle.sol\",\n        \"id\": 19043,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 19470,\n        \"sourceUnit\": 15123,\n        \"src\": \"276:31:99\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 19045,\n              \"name\": \"Initializable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 24363,\n              \"src\": \"540:13:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_Initializable_$24363\",\n                \"typeString\": \"contract Initializable\"\n              }\n            },\n            \"id\": 19046,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"540:13:99\"\n          },\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 19047,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 9880,\n              \"src\": \"555:11:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 19048,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"555:11:99\"\n          },\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 19049,\n              \"name\": \"BasePriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 15122,\n              \"src\": \"568:15:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_BasePriceOracle_$15122\",\n                \"typeString\": \"contract BasePriceOracle\"\n              }\n            },\n            \"id\": 19050,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"568:15:99\"\n          }\n        ],\n        \"contractDependencies\": [\n          9880,\n          15122,\n          24363\n        ],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 19044,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"311:197:99\",\n          \"text\": \" @title MasterPriceOracle\\n @notice Use a combination of price oracles.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 19469,\n        \"linearizedBaseContracts\": [\n          19469,\n          15122,\n          9880,\n          24363\n        ],\n        \"name\": \"MasterPriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 19051,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"591:126:99\",\n              \"text\": \" @dev Maps underlying token addresses to `PriceOracle` contracts (can be `BasePriceOracle` contracts too).\"\n            },\n            \"functionSelector\": \"addd5099\",\n            \"id\": 19055,\n            \"mutability\": \"mutable\",\n            \"name\": \"oracles\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 19469,\n            \"src\": \"723:46:99\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n              \"typeString\": \"mapping(address => contract PriceOracle)\"\n            },\n            \"typeName\": {\n              \"id\": 19054,\n              \"keyType\": {\n                \"id\": 19052,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"731:7:99\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"723:31:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                \"typeString\": \"mapping(address => contract PriceOracle)\"\n              },\n              \"valueType\": {\n                \"contractScope\": null,\n                \"id\": 19053,\n                \"name\": \"PriceOracle\",\n                \"nodeType\": \"UserDefinedTypeName\",\n                \"referencedDeclaration\": 9880,\n                \"src\": \"742:11:99\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                  \"typeString\": \"contract PriceOracle\"\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 19056,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"778:57:99\",\n              \"text\": \" @dev Default/fallback `PriceOracle`.\"\n            },\n            \"functionSelector\": \"80dce169\",\n            \"id\": 19058,\n            \"mutability\": \"mutable\",\n            \"name\": \"defaultOracle\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 19469,\n            \"src\": \"841:32:99\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n              \"typeString\": \"contract PriceOracle\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 19057,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 9880,\n              \"src\": \"841:11:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 19059,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"882:72:99\",\n              \"text\": \" @dev The administrator of this `MasterPriceOracle`.\"\n            },\n            \"functionSelector\": \"f851a440\",\n            \"id\": 19061,\n            \"mutability\": \"mutable\",\n            \"name\": \"admin\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 19469,\n            \"src\": \"960:20:99\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 19060,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"960:7:99\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 19062,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"989:113:99\",\n              \"text\": \" @dev Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\"\n            },\n            \"id\": 19064,\n            \"mutability\": \"mutable\",\n            \"name\": \"noAdminOverwrite\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 19469,\n            \"src\": \"1108:30:99\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_bool\",\n              \"typeString\": \"bool\"\n            },\n            \"typeName\": {\n              \"id\": 19063,\n              \"name\": \"bool\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1108:4:99\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_bool\",\n                \"typeString\": \"bool\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 19073,\n              \"nodeType\": \"Block\",\n              \"src\": \"1344:43:99\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19071,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"UnaryOperation\",\n                    \"operator\": \"!\",\n                    \"prefix\": true,\n                    \"src\": \"1362:17:99\",\n                    \"subExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19070,\n                      \"name\": \"noAdminOverwrite\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19064,\n                      \"src\": \"1363:16:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"functionReturnParameters\": 19069,\n                  \"id\": 19072,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1355:24:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19065,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1147:133:99\",\n              \"text\": \" @dev Returns a boolean indicating if `admin` can overwrite existing assignments of oracles to underlying tokens.\"\n            },\n            \"functionSelector\": \"656b0fd1\",\n            \"id\": 19074,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"canAdminOverwrite\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19066,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1312:2:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19069,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19068,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19074,\n                  \"src\": \"1338:4:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19067,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1338:4:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1337:6:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"1286:101:99\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": {\n              \"id\": 19075,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1395:64:99\",\n              \"text\": \" @dev Event emitted when `admin` is changed.\"\n            },\n            \"id\": 19081,\n            \"name\": \"NewAdmin\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 19080,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19077,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"oldAdmin\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19081,\n                  \"src\": \"1480:16:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19076,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1480:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19079,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newAdmin\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19081,\n                  \"src\": \"1498:16:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19078,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1498:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1479:36:99\"\n            },\n            \"src\": \"1465:51:99\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": {\n              \"id\": 19082,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1524:75:99\",\n              \"text\": \" @dev Event emitted when the default oracle is changed.\"\n            },\n            \"id\": 19088,\n            \"name\": \"NewDefaultOracle\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 19087,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19084,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"oldOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19088,\n                  \"src\": \"1628:17:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19083,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1628:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19086,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19088,\n                  \"src\": \"1647:17:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19085,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1647:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1627:38:99\"\n            },\n            \"src\": \"1605:61:99\"\n          },\n          {\n            \"anonymous\": false,\n            \"documentation\": {\n              \"id\": 19089,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1674:85:99\",\n              \"text\": \" @dev Event emitted when an underlying token's oracle is changed.\"\n            },\n            \"id\": 19097,\n            \"name\": \"NewOracle\",\n            \"nodeType\": \"EventDefinition\",\n            \"parameters\": {\n              \"id\": 19096,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19091,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19097,\n                  \"src\": \"1781:18:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19090,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1781:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19093,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"oldOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19097,\n                  \"src\": \"1801:17:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19092,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1801:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19095,\n                  \"indexed\": false,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19097,\n                  \"src\": \"1820:17:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19094,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1820:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1780:58:99\"\n            },\n            \"src\": \"1765:74:99\"\n          },\n          {\n            \"body\": {\n              \"id\": 19180,\n              \"nodeType\": \"Block\",\n              \"src\": \"2536:583:99\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 19120,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19116,\n                            \"name\": \"underlyings\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19101,\n                            \"src\": \"2584:11:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                              \"typeString\": \"address[] memory\"\n                            }\n                          },\n                          \"id\": 19117,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"length\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2584:18:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19118,\n                            \"name\": \"_oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19104,\n                            \"src\": \"2606:8:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_memory_ptr\",\n                              \"typeString\": \"contract PriceOracle[] memory\"\n                            }\n                          },\n                          \"id\": 19119,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"length\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2606:15:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"2584:37:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4c656e67746873206f6620626f746820617272617973206d75737420626520657175616c2e\",\n                        \"id\": 19121,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"2623:39:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_239018df88f220ade4bb7a4d6f5fd76d8413e195325c61d740c9fde2750f444d\",\n                          \"typeString\": \"literal_string \\\"Lengths of both arrays must be equal.\\\"\"\n                        },\n                        \"value\": \"Lengths of both arrays must be equal.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_239018df88f220ade4bb7a4d6f5fd76d8413e195325c61d740c9fde2750f444d\",\n                          \"typeString\": \"literal_string \\\"Lengths of both arrays must be equal.\\\"\"\n                        }\n                      ],\n                      \"id\": 19115,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"2576:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 19122,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2576:87:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19123,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2576:87:99\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 19165,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2764:231:99\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [\n                          19136\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19136,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"underlying\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19165,\n                            \"src\": \"2779:18:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            \"typeName\": {\n                              \"id\": 19135,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"2779:7:99\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19140,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19137,\n                            \"name\": \"underlyings\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19101,\n                            \"src\": \"2800:11:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                              \"typeString\": \"address[] memory\"\n                            }\n                          },\n                          \"id\": 19139,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19138,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19125,\n                            \"src\": \"2812:1:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2800:14:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"2779:35:99\"\n                      },\n                      {\n                        \"assignments\": [\n                          19142\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19142,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19165,\n                            \"src\": \"2829:21:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            },\n                            \"typeName\": {\n                              \"contractScope\": null,\n                              \"id\": 19141,\n                              \"name\": \"PriceOracle\",\n                              \"nodeType\": \"UserDefinedTypeName\",\n                              \"referencedDeclaration\": 9880,\n                              \"src\": \"2829:11:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19146,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19143,\n                            \"name\": \"_oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19104,\n                            \"src\": \"2853:8:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_memory_ptr\",\n                              \"typeString\": \"contract PriceOracle[] memory\"\n                            }\n                          },\n                          \"id\": 19145,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19144,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19125,\n                            \"src\": \"2862:1:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2853:11:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"2829:35:99\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19151,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19147,\n                              \"name\": \"oracles\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19055,\n                              \"src\": \"2879:7:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                                \"typeString\": \"mapping(address => contract PriceOracle)\"\n                              }\n                            },\n                            \"id\": 19149,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19148,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19136,\n                              \"src\": \"2887:10:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2879:19:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19150,\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19142,\n                            \"src\": \"2901:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          },\n                          \"src\": \"2879:31:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"id\": 19152,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"2879:31:99\"\n                      },\n                      {\n                        \"eventCall\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 19154,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19136,\n                              \"src\": \"2940:10:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"30\",\n                                  \"id\": 19157,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"2960:1:99\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                    \"typeString\": \"int_const 0\"\n                                  },\n                                  \"value\": \"0\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_rational_0_by_1\",\n                                    \"typeString\": \"int_const 0\"\n                                  }\n                                ],\n                                \"id\": 19156,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"2952:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19155,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"2952:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19158,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2952:10:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19161,\n                                  \"name\": \"newOracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19142,\n                                  \"src\": \"2972:9:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                ],\n                                \"id\": 19160,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"2964:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19159,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"2964:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19162,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2964:18:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 19153,\n                            \"name\": \"NewOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19097,\n                            \"src\": \"2930:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$\",\n                              \"typeString\": \"function (address,address,address)\"\n                            }\n                          },\n                          \"id\": 19163,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2930:53:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 19164,\n                        \"nodeType\": \"EmitStatement\",\n                        \"src\": \"2925:58:99\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 19131,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19128,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19125,\n                      \"src\": \"2735:1:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19129,\n                        \"name\": \"underlyings\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19101,\n                        \"src\": \"2739:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                          \"typeString\": \"address[] memory\"\n                        }\n                      },\n                      \"id\": 19130,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"length\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"2739:18:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"2735:22:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 19166,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      19125\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 19125,\n                        \"mutability\": \"mutable\",\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"overrides\": null,\n                        \"scope\": 19166,\n                        \"src\": \"2720:9:99\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19124,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2720:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 19127,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 19126,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2732:1:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"2720:13:99\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19133,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"2759:3:99\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19132,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19125,\n                        \"src\": \"2759:1:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 19134,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"2759:3:99\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"2715:280:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19169,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19167,\n                      \"name\": \"defaultOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19058,\n                      \"src\": \"3007:13:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19168,\n                      \"name\": \"_defaultOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19106,\n                      \"src\": \"3023:14:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"src\": \"3007:30:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"id\": 19170,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3007:30:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19173,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19171,\n                      \"name\": \"admin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19061,\n                      \"src\": \"3048:5:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19172,\n                      \"name\": \"_admin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19108,\n                      \"src\": \"3056:6:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"3048:14:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 19174,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3048:14:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19178,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19175,\n                      \"name\": \"noAdminOverwrite\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19064,\n                      \"src\": \"3073:16:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19177,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"!\",\n                      \"prefix\": true,\n                      \"src\": \"3092:19:99\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19176,\n                        \"name\": \"_canAdminOverwrite\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19110,\n                        \"src\": \"3093:18:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"src\": \"3073:38:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 19179,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3073:38:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19098,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1847:512:99\",\n              \"text\": \" @dev Constructor to initialize state variables.\\n @param underlyings The underlying ERC20 token addresses to link to `_oracles`.\\n @param _oracles The `PriceOracle` contracts to be assigned to `underlyings`.\\n @param _defaultOracle The default `PriceOracle` contract to use.\\n @param _admin The admin who can assign oracles to underlying tokens.\\n @param _canAdminOverwrite Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\"\n            },\n            \"functionSelector\": \"278aa146\",\n            \"id\": 19181,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 19113,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19112,\n                  \"name\": \"initializer\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 24346,\n                  \"src\": \"2524:11:99\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"2524:11:99\"\n              }\n            ],\n            \"name\": \"initialize\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19111,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19101,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlyings\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2385:28:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_address_$dyn_memory_ptr\",\n                    \"typeString\": \"address[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 19099,\n                      \"name\": \"address\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"2385:7:99\",\n                      \"stateMutability\": \"nonpayable\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 19100,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2385:9:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_address_$dyn_storage_ptr\",\n                      \"typeString\": \"address[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19104,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_oracles\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2415:29:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_memory_ptr\",\n                    \"typeString\": \"contract PriceOracle[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"contractScope\": null,\n                      \"id\": 19102,\n                      \"name\": \"PriceOracle\",\n                      \"nodeType\": \"UserDefinedTypeName\",\n                      \"referencedDeclaration\": 9880,\n                      \"src\": \"2415:11:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"id\": 19103,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"2415:13:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_storage_ptr\",\n                      \"typeString\": \"contract PriceOracle[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19106,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_defaultOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2446:26:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                    \"typeString\": \"contract PriceOracle\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 19105,\n                    \"name\": \"PriceOracle\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 9880,\n                    \"src\": \"2446:11:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19108,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_admin\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2474:14:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19107,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2474:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19110,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_canAdminOverwrite\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19181,\n                  \"src\": \"2490:23:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19109,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2490:4:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2384:130:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19114,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"2536:0:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"2365:754:99\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 19268,\n              \"nodeType\": \"Block\",\n              \"src\": \"3290:731:99\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        \"id\": 19203,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 19197,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19194,\n                              \"name\": \"underlyings\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19185,\n                              \"src\": \"3338:11:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                                \"typeString\": \"address[] calldata\"\n                              }\n                            },\n                            \"id\": 19195,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"length\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": null,\n                            \"src\": \"3338:18:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \">\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 19196,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"3359:1:99\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          },\n                          \"src\": \"3338:22:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"&&\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 19202,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19198,\n                              \"name\": \"underlyings\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19185,\n                              \"src\": \"3364:11:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                                \"typeString\": \"address[] calldata\"\n                              }\n                            },\n                            \"id\": 19199,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"length\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": null,\n                            \"src\": \"3364:18:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"==\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19200,\n                              \"name\": \"_oracles\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19188,\n                              \"src\": \"3386:8:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_calldata_ptr\",\n                                \"typeString\": \"contract PriceOracle[] calldata\"\n                              }\n                            },\n                            \"id\": 19201,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"length\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": null,\n                            \"src\": \"3386:15:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"3364:37:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"src\": \"3338:63:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"4c656e67746873206f6620626f746820617272617973206d75737420626520657175616c20616e642067726561746572207468616e20302e\",\n                        \"id\": 19204,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3403:58:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_0024912e31c6e5c7211aa64ccdb0c2e6097a15ae45c8d5291ee1fa6ba6b29473\",\n                          \"typeString\": \"literal_string \\\"Lengths of both arrays must be equal and greater than 0.\\\"\"\n                        },\n                        \"value\": \"Lengths of both arrays must be equal and greater than 0.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_0024912e31c6e5c7211aa64ccdb0c2e6097a15ae45c8d5291ee1fa6ba6b29473\",\n                          \"typeString\": \"literal_string \\\"Lengths of both arrays must be equal and greater than 0.\\\"\"\n                        }\n                      ],\n                      \"id\": 19193,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"3330:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 19205,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3330:132:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19206,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"3330:132:99\"\n                },\n                {\n                  \"body\": {\n                    \"id\": 19266,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"3572:442:99\",\n                    \"statements\": [\n                      {\n                        \"assignments\": [\n                          19219\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19219,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"underlying\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19266,\n                            \"src\": \"3587:18:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            \"typeName\": {\n                              \"id\": 19218,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"3587:7:99\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19223,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19220,\n                            \"name\": \"underlyings\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19185,\n                            \"src\": \"3608:11:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                              \"typeString\": \"address[] calldata\"\n                            }\n                          },\n                          \"id\": 19222,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19221,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19208,\n                            \"src\": \"3620:1:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"3608:14:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"3587:35:99\"\n                      },\n                      {\n                        \"assignments\": [\n                          19225\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19225,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"oldOracle\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19266,\n                            \"src\": \"3637:17:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            \"typeName\": {\n                              \"id\": 19224,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"3637:7:99\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19232,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"baseExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 19228,\n                                \"name\": \"oracles\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 19055,\n                                \"src\": \"3665:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                                  \"typeString\": \"mapping(address => contract PriceOracle)\"\n                                }\n                              },\n                              \"id\": 19230,\n                              \"indexExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 19229,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 19219,\n                                \"src\": \"3673:10:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": true,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"IndexAccess\",\n                              \"src\": \"3665:19:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            ],\n                            \"id\": 19227,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"3657:7:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 19226,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"3657:7:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 19231,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3657:28:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"3637:48:99\"\n                      },\n                      {\n                        \"condition\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19233,\n                          \"name\": \"noAdminOverwrite\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19064,\n                          \"src\": \"3704:16:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"falseBody\": null,\n                        \"id\": 19244,\n                        \"nodeType\": \"IfStatement\",\n                        \"src\": \"3700:134:99\",\n                        \"trueBody\": {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                },\n                                \"id\": 19240,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19235,\n                                  \"name\": \"oldOracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19225,\n                                  \"src\": \"3730:9:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \"==\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"hexValue\": \"30\",\n                                      \"id\": 19238,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"kind\": \"number\",\n                                      \"lValueRequested\": false,\n                                      \"nodeType\": \"Literal\",\n                                      \"src\": \"3751:1:99\",\n                                      \"subdenomination\": null,\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                        \"typeString\": \"int_const 0\"\n                                      },\n                                      \"value\": \"0\"\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                                        \"typeString\": \"int_const 0\"\n                                      }\n                                    ],\n                                    \"id\": 19237,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"3743:7:99\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_address_$\",\n                                      \"typeString\": \"type(address)\"\n                                    },\n                                    \"typeName\": {\n                                      \"id\": 19236,\n                                      \"name\": \"address\",\n                                      \"nodeType\": \"ElementaryTypeName\",\n                                      \"src\": \"3743:7:99\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": null,\n                                        \"typeString\": null\n                                      }\n                                    }\n                                  },\n                                  \"id\": 19239,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"3743:10:99\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address_payable\",\n                                    \"typeString\": \"address payable\"\n                                  }\n                                },\n                                \"src\": \"3730:23:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"41646d696e2063616e6e6f74206f7665727772697465206578697374696e672061737369676e6d656e7473206f66206f7261636c657320746f20756e6465726c79696e6720746f6b656e732e\",\n                                \"id\": 19241,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"string\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"3755:78:99\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_stringliteral_0008efc8c5effd0665ab06a5f13b792241a830a05df39e3c5b14b08a900c09e8\",\n                                  \"typeString\": \"literal_string \\\"Admin cannot overwrite existing assignments of oracles to underlying tokens.\\\"\"\n                                },\n                                \"value\": \"Admin cannot overwrite existing assignments of oracles to underlying tokens.\"\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_0008efc8c5effd0665ab06a5f13b792241a830a05df39e3c5b14b08a900c09e8\",\n                                  \"typeString\": \"literal_string \\\"Admin cannot overwrite existing assignments of oracles to underlying tokens.\\\"\"\n                                }\n                              ],\n                              \"id\": 19234,\n                              \"name\": \"require\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [\n                                -18,\n                                -18\n                              ],\n                              \"referencedDeclaration\": -18,\n                              \"src\": \"3722:7:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                                \"typeString\": \"function (bool,string memory) pure\"\n                              }\n                            },\n                            \"id\": 19242,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3722:112:99\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_tuple$__$\",\n                              \"typeString\": \"tuple()\"\n                            }\n                          },\n                          \"id\": 19243,\n                          \"nodeType\": \"ExpressionStatement\",\n                          \"src\": \"3722:112:99\"\n                        }\n                      },\n                      {\n                        \"assignments\": [\n                          19246\n                        ],\n                        \"declarations\": [\n                          {\n                            \"constant\": false,\n                            \"id\": 19246,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 19266,\n                            \"src\": \"3849:21:99\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            },\n                            \"typeName\": {\n                              \"contractScope\": null,\n                              \"id\": 19245,\n                              \"name\": \"PriceOracle\",\n                              \"nodeType\": \"UserDefinedTypeName\",\n                              \"referencedDeclaration\": 9880,\n                              \"src\": \"3849:11:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          }\n                        ],\n                        \"id\": 19250,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19247,\n                            \"name\": \"_oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19188,\n                            \"src\": \"3873:8:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_calldata_ptr\",\n                              \"typeString\": \"contract PriceOracle[] calldata\"\n                            }\n                          },\n                          \"id\": 19249,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19248,\n                            \"name\": \"i\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19208,\n                            \"src\": \"3882:1:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"3873:11:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"3849:35:99\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19255,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19251,\n                              \"name\": \"oracles\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19055,\n                              \"src\": \"3899:7:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                                \"typeString\": \"mapping(address => contract PriceOracle)\"\n                              }\n                            },\n                            \"id\": 19253,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 19252,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19219,\n                              \"src\": \"3907:10:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": true,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"3899:19:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19254,\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19246,\n                            \"src\": \"3921:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          },\n                          \"src\": \"3899:31:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"id\": 19256,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"3899:31:99\"\n                      },\n                      {\n                        \"eventCall\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 19258,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19219,\n                              \"src\": \"3960:10:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 19259,\n                              \"name\": \"oldOracle\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 19225,\n                              \"src\": \"3972:9:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19262,\n                                  \"name\": \"newOracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19246,\n                                  \"src\": \"3991:9:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                ],\n                                \"id\": 19261,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"3983:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19260,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"3983:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19263,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"3983:18:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 19257,\n                            \"name\": \"NewOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19097,\n                            \"src\": \"3950:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$\",\n                              \"typeString\": \"function (address,address,address)\"\n                            }\n                          },\n                          \"id\": 19264,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3950:52:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$__$\",\n                            \"typeString\": \"tuple()\"\n                          }\n                        },\n                        \"id\": 19265,\n                        \"nodeType\": \"EmitStatement\",\n                        \"src\": \"3945:57:99\"\n                      }\n                    ]\n                  },\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 19214,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19211,\n                      \"name\": \"i\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19208,\n                      \"src\": \"3543:1:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"<\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19212,\n                        \"name\": \"underlyings\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19185,\n                        \"src\": \"3547:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                          \"typeString\": \"address[] calldata\"\n                        }\n                      },\n                      \"id\": 19213,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"length\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": null,\n                      \"src\": \"3547:18:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"3543:22:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"id\": 19267,\n                  \"initializationExpression\": {\n                    \"assignments\": [\n                      19208\n                    ],\n                    \"declarations\": [\n                      {\n                        \"constant\": false,\n                        \"id\": 19208,\n                        \"mutability\": \"mutable\",\n                        \"name\": \"i\",\n                        \"nodeType\": \"VariableDeclaration\",\n                        \"overrides\": null,\n                        \"scope\": 19267,\n                        \"src\": \"3528:9:99\",\n                        \"stateVariable\": false,\n                        \"storageLocation\": \"default\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19207,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"3528:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"value\": null,\n                        \"visibility\": \"internal\"\n                      }\n                    ],\n                    \"id\": 19210,\n                    \"initialValue\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 19209,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"3540:1:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"nodeType\": \"VariableDeclarationStatement\",\n                    \"src\": \"3528:13:99\"\n                  },\n                  \"loopExpression\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19216,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"UnaryOperation\",\n                      \"operator\": \"++\",\n                      \"prefix\": false,\n                      \"src\": \"3567:3:99\",\n                      \"subExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 19215,\n                        \"name\": \"i\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19208,\n                        \"src\": \"3567:1:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 19217,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"3567:3:99\"\n                  },\n                  \"nodeType\": \"ForStatement\",\n                  \"src\": \"3523:491:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19182,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"3127:60:99\",\n              \"text\": \" @dev Sets `_oracles` for `underlyings`.\"\n            },\n            \"functionSelector\": \"9c9192c6\",\n            \"id\": 19269,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 19191,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19190,\n                  \"name\": \"onlyAdmin\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 19332,\n                  \"src\": \"3280:9:99\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"3280:9:99\"\n              }\n            ],\n            \"name\": \"add\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19189,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19185,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlyings\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19269,\n                  \"src\": \"3206:30:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_address_$dyn_calldata_ptr\",\n                    \"typeString\": \"address[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"id\": 19183,\n                      \"name\": \"address\",\n                      \"nodeType\": \"ElementaryTypeName\",\n                      \"src\": \"3206:7:99\",\n                      \"stateMutability\": \"nonpayable\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 19184,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"3206:9:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_address_$dyn_storage_ptr\",\n                      \"typeString\": \"address[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 19188,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_oracles\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19269,\n                  \"src\": \"3238:31:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"calldata\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_calldata_ptr\",\n                    \"typeString\": \"contract PriceOracle[]\"\n                  },\n                  \"typeName\": {\n                    \"baseType\": {\n                      \"contractScope\": null,\n                      \"id\": 19186,\n                      \"name\": \"PriceOracle\",\n                      \"nodeType\": \"UserDefinedTypeName\",\n                      \"referencedDeclaration\": 9880,\n                      \"src\": \"3238:11:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"id\": 19187,\n                    \"length\": null,\n                    \"nodeType\": \"ArrayTypeName\",\n                    \"src\": \"3238:13:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_array$_t_contract$_PriceOracle_$9880_$dyn_storage_ptr\",\n                      \"typeString\": \"contract PriceOracle[]\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3205:65:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19192,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"3290:0:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"3193:828:99\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 19296,\n              \"nodeType\": \"Block\",\n              \"src\": \"4166:164:99\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    19278\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19278,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oldOracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19296,\n                      \"src\": \"4177:21:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 19277,\n                        \"name\": \"PriceOracle\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 9880,\n                        \"src\": \"4177:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                          \"typeString\": \"contract PriceOracle\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19280,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19279,\n                    \"name\": \"defaultOracle\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 19058,\n                    \"src\": \"4201:13:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4177:37:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19283,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19281,\n                      \"name\": \"defaultOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19058,\n                      \"src\": \"4225:13:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19282,\n                      \"name\": \"newOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19272,\n                      \"src\": \"4241:9:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"src\": \"4225:25:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"id\": 19284,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4225:25:99\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 19288,\n                            \"name\": \"oldOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19278,\n                            \"src\": \"4291:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          ],\n                          \"id\": 19287,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"4283:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 19286,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"4283:7:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 19289,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"4283:18:99\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 19292,\n                            \"name\": \"newOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 19272,\n                            \"src\": \"4311:9:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                              \"typeString\": \"contract PriceOracle\"\n                            }\n                          ],\n                          \"id\": 19291,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"4303:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 19290,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"4303:7:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 19293,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"4303:18:99\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 19285,\n                      \"name\": \"NewDefaultOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19088,\n                      \"src\": \"4266:16:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 19294,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4266:56:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19295,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"4261:61:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19270,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"4029:63:99\",\n              \"text\": \" @dev Changes the admin and emits an event.\"\n            },\n            \"functionSelector\": \"c44014d2\",\n            \"id\": 19297,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 19275,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19274,\n                  \"name\": \"onlyAdmin\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 19332,\n                  \"src\": \"4156:9:99\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"4156:9:99\"\n              }\n            ],\n            \"name\": \"setDefaultOracle\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19273,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19272,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19297,\n                  \"src\": \"4124:21:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                    \"typeString\": \"contract PriceOracle\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 19271,\n                    \"name\": \"PriceOracle\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 9880,\n                    \"src\": \"4124:11:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4123:23:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19276,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"4166:0:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"4098:232:99\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 19318,\n              \"nodeType\": \"Block\",\n              \"src\": \"4465:114:99\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    19306\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19306,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oldAdmin\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19318,\n                      \"src\": \"4476:16:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 19305,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4476:7:99\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19308,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19307,\n                    \"name\": \"admin\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 19061,\n                    \"src\": \"4495:5:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4476:24:99\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 19311,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19309,\n                      \"name\": \"admin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19061,\n                      \"src\": \"4511:5:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19310,\n                      \"name\": \"newAdmin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19300,\n                      \"src\": \"4519:8:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"4511:16:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 19312,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4511:16:99\"\n                },\n                {\n                  \"eventCall\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 19314,\n                        \"name\": \"oldAdmin\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19306,\n                        \"src\": \"4552:8:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 19315,\n                        \"name\": \"newAdmin\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 19300,\n                        \"src\": \"4562:8:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 19313,\n                      \"name\": \"NewAdmin\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19081,\n                      \"src\": \"4543:8:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address)\"\n                      }\n                    },\n                    \"id\": 19316,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4543:28:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19317,\n                  \"nodeType\": \"EmitStatement\",\n                  \"src\": \"4538:33:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19298,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"4338:63:99\",\n              \"text\": \" @dev Changes the admin and emits an event.\"\n            },\n            \"functionSelector\": \"8f283970\",\n            \"id\": 19319,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [\n              {\n                \"arguments\": null,\n                \"id\": 19303,\n                \"modifierName\": {\n                  \"argumentTypes\": null,\n                  \"id\": 19302,\n                  \"name\": \"onlyAdmin\",\n                  \"nodeType\": \"Identifier\",\n                  \"overloadedDeclarations\": [],\n                  \"referencedDeclaration\": 19332,\n                  \"src\": \"4455:9:99\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_modifier$__$\",\n                    \"typeString\": \"modifier ()\"\n                  }\n                },\n                \"nodeType\": \"ModifierInvocation\",\n                \"src\": \"4455:9:99\"\n              }\n            ],\n            \"name\": \"changeAdmin\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19301,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19300,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"newAdmin\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19319,\n                  \"src\": \"4428:16:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19299,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4428:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4427:18:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19304,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"4465:0:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"4407:172:99\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 19331,\n              \"nodeType\": \"Block\",\n              \"src\": \"4684:87:99\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 19326,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 19323,\n                            \"name\": \"msg\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -15,\n                            \"src\": \"4703:3:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_message\",\n                              \"typeString\": \"msg\"\n                            }\n                          },\n                          \"id\": 19324,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"sender\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"4703:10:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19325,\n                          \"name\": \"admin\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19061,\n                          \"src\": \"4717:5:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"src\": \"4703:19:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"53656e646572206973206e6f74207468652061646d696e2e\",\n                        \"id\": 19327,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4724:26:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_937deed29330e2cc004ec82b7b1db60954a566926d1d5d5f7a878cc657e32fae\",\n                          \"typeString\": \"literal_string \\\"Sender is not the admin.\\\"\"\n                        },\n                        \"value\": \"Sender is not the admin.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_937deed29330e2cc004ec82b7b1db60954a566926d1d5d5f7a878cc657e32fae\",\n                          \"typeString\": \"literal_string \\\"Sender is not the admin.\\\"\"\n                        }\n                      ],\n                      \"id\": 19322,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"4695:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 19328,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"4695:56:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19329,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4695:56:99\"\n                },\n                {\n                  \"id\": 19330,\n                  \"nodeType\": \"PlaceholderStatement\",\n                  \"src\": \"4762:1:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19320,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"4587:72:99\",\n              \"text\": \" @dev Modifier that checks if `msg.sender == admin`.\"\n            },\n            \"id\": 19332,\n            \"name\": \"onlyAdmin\",\n            \"nodeType\": \"ModifierDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 19321,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"4684:0:99\"\n            },\n            \"src\": \"4665:106:99\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"baseFunctions\": [\n              9879\n            ],\n            \"body\": {\n              \"id\": 19401,\n              \"nodeType\": \"Block\",\n              \"src\": \"5147:622:99\",\n              \"statements\": [\n                {\n                  \"assignments\": [\n                    19342\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19342,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19401,\n                      \"src\": \"5205:18:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 19341,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5205:7:99\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19354,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 19348,\n                                    \"name\": \"cToken\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 19335,\n                                    \"src\": \"5249:6:99\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  ],\n                                  \"id\": 19347,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"ElementaryTypeNameExpression\",\n                                  \"src\": \"5241:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_type$_t_address_$\",\n                                    \"typeString\": \"type(address)\"\n                                  },\n                                  \"typeName\": {\n                                    \"id\": 19346,\n                                    \"name\": \"address\",\n                                    \"nodeType\": \"ElementaryTypeName\",\n                                    \"src\": \"5241:7:99\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": null,\n                                      \"typeString\": null\n                                    }\n                                  }\n                                },\n                                \"id\": 19349,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"typeConversion\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"5241:15:99\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 19345,\n                              \"name\": \"CErc20\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9555,\n                              \"src\": \"5234:6:99\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$9555_$\",\n                                \"typeString\": \"type(contract CErc20)\"\n                              }\n                            },\n                            \"id\": 19350,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"5234:23:99\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_CErc20_$9555\",\n                              \"typeString\": \"contract CErc20\"\n                            }\n                          },\n                          \"id\": 19351,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"underlying\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 9543,\n                          \"src\": \"5234:34:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                            \"typeString\": \"function () view external returns (address)\"\n                          }\n                        },\n                        \"id\": 19352,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"5234:36:99\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 19344,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"5226:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_address_$\",\n                        \"typeString\": \"type(address)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 19343,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5226:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 19353,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"5226:45:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"5205:66:99\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19357,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19355,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19342,\n                      \"src\": \"5321:10:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                      \"id\": 19356,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"5335:42:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      },\n                      \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                    },\n                    \"src\": \"5321:56:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19360,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"5317:73:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 19358,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"5386:4:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 19340,\n                    \"id\": 19359,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"5379:11:99\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    19362\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19362,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19401,\n                      \"src\": \"5457:18:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 19361,\n                        \"name\": \"PriceOracle\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 9880,\n                        \"src\": \"5457:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                          \"typeString\": \"contract PriceOracle\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19366,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"baseExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19363,\n                      \"name\": \"oracles\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19055,\n                      \"src\": \"5478:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                        \"typeString\": \"mapping(address => contract PriceOracle)\"\n                      }\n                    },\n                    \"id\": 19365,\n                    \"indexExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19364,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19342,\n                      \"src\": \"5486:10:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"IndexAccess\",\n                    \"src\": \"5478:19:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"5457:40:99\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19375,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19369,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19362,\n                          \"src\": \"5520:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        ],\n                        \"id\": 19368,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"5512:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19367,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"5512:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19370,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5512:15:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 19373,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5539:1:99\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 19372,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"5531:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19371,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"5531:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19374,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5531:10:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"5512:29:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19381,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"5508:75:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19378,\n                          \"name\": \"cToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19335,\n                          \"src\": \"5576:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19376,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19362,\n                          \"src\": \"5550:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"id\": 19377,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"getUnderlyingPrice\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 9879,\n                        \"src\": \"5550:25:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_contract$_CToken_$9698_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (contract CToken) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 19379,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5550:33:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"functionReturnParameters\": 19340,\n                    \"id\": 19380,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"5543:40:99\"\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19390,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19384,\n                          \"name\": \"defaultOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19058,\n                          \"src\": \"5606:13:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        ],\n                        \"id\": 19383,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"5598:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19382,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"5598:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19385,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5598:22:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 19388,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"5632:1:99\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 19387,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"5624:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19386,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"5624:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19389,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5624:10:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"5598:36:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19396,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"5594:89:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19393,\n                          \"name\": \"cToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19335,\n                          \"src\": \"5676:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 19391,\n                          \"name\": \"defaultOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19058,\n                          \"src\": \"5643:13:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        },\n                        \"id\": 19392,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"getUnderlyingPrice\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 9879,\n                        \"src\": \"5643:32:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_contract$_CToken_$9698_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (contract CToken) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 19394,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"5643:40:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"functionReturnParameters\": 19340,\n                    \"id\": 19395,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"5636:47:99\"\n                  }\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"5072696365206f7261636c65206e6f7420666f756e6420666f72207468697320756e6465726c79696e6720746f6b656e20616464726573732e\",\n                        \"id\": 19398,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"5701:59:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_bca42cedac13b8f598dbb8e0556ae4078b48f952c304e7ad347acc420ad294f3\",\n                          \"typeString\": \"literal_string \\\"Price oracle not found for this underlying token address.\\\"\"\n                        },\n                        \"value\": \"Price oracle not found for this underlying token address.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_bca42cedac13b8f598dbb8e0556ae4078b48f952c304e7ad347acc420ad294f3\",\n                          \"typeString\": \"literal_string \\\"Price oracle not found for this underlying token address.\\\"\"\n                        }\n                      ],\n                      \"id\": 19397,\n                      \"name\": \"revert\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -19,\n                        -19\n                      ],\n                      \"referencedDeclaration\": -19,\n                      \"src\": \"5694:6:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_revert_pure$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (string memory) pure\"\n                      }\n                    },\n                    \"id\": 19399,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"5694:67:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19400,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"5694:67:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19333,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"4779:281:99\",\n              \"text\": \" @notice Returns the price in ETH of the token underlying `cToken`.\\n @dev Implements the `PriceOracle` interface for Fuse pools (and Compound v2).\\n @return Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`.\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 19402,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 19337,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"5118:8:99\"\n            },\n            \"parameters\": {\n              \"id\": 19336,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19335,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19402,\n                  \"src\": \"5094:13:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 19334,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 9698,\n                    \"src\": \"5094:6:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$9698\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5093:15:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19340,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19339,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19402,\n                  \"src\": \"5141:4:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19338,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"5141:4:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5140:6:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"5066:703:99\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"baseFunctions\": [\n              15121\n            ],\n            \"body\": {\n              \"id\": 19467,\n              \"nodeType\": \"Block\",\n              \"src\": \"5965:530:99\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19413,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19411,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19405,\n                      \"src\": \"6013:10:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                      \"id\": 19412,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"6027:42:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      },\n                      \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                    },\n                    \"src\": \"6013:56:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19416,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"6009:73:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 19414,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"6078:4:99\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 19410,\n                    \"id\": 19415,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"6071:11:99\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    19418\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 19418,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 19467,\n                      \"src\": \"6149:18:99\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                        \"typeString\": \"contract PriceOracle\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 19417,\n                        \"name\": \"PriceOracle\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 9880,\n                        \"src\": \"6149:11:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                          \"typeString\": \"contract PriceOracle\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 19422,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"baseExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19419,\n                      \"name\": \"oracles\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19055,\n                      \"src\": \"6170:7:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_PriceOracle_$9880_$\",\n                        \"typeString\": \"mapping(address => contract PriceOracle)\"\n                      }\n                    },\n                    \"id\": 19421,\n                    \"indexExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 19420,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 19405,\n                      \"src\": \"6178:10:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"isConstant\": false,\n                    \"isLValue\": true,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"IndexAccess\",\n                    \"src\": \"6170:19:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"6149:40:99\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19431,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19425,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19418,\n                          \"src\": \"6212:6:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        ],\n                        \"id\": 19424,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6204:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19423,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6204:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19426,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6204:15:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 19429,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6231:1:99\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 19428,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6223:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19427,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6223:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19430,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6223:10:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"6204:29:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19442,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"6200:92:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19439,\n                          \"name\": \"underlying\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19405,\n                          \"src\": \"6281:10:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19435,\n                                  \"name\": \"oracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19418,\n                                  \"src\": \"6266:6:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                ],\n                                \"id\": 19434,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"6258:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19433,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"6258:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19436,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"6258:15:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 19432,\n                            \"name\": \"BasePriceOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 15122,\n                            \"src\": \"6242:15:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$15122_$\",\n                              \"typeString\": \"type(contract BasePriceOracle)\"\n                            }\n                          },\n                          \"id\": 19437,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"6242:32:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_BasePriceOracle_$15122\",\n                            \"typeString\": \"contract BasePriceOracle\"\n                          }\n                        },\n                        \"id\": 19438,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"price\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 15121,\n                        \"src\": \"6242:38:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (address) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 19440,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6242:50:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"functionReturnParameters\": 19410,\n                    \"id\": 19441,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"6235:57:99\"\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 19451,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19445,\n                          \"name\": \"defaultOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19058,\n                          \"src\": \"6315:13:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                            \"typeString\": \"contract PriceOracle\"\n                          }\n                        ],\n                        \"id\": 19444,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6307:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19443,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6307:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19446,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6307:22:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 19449,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"6341:1:99\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 19448,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"6333:7:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 19447,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"6333:7:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 19450,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6333:10:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"6307:36:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 19462,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"6303:106:99\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 19459,\n                          \"name\": \"underlying\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 19405,\n                          \"src\": \"6398:10:99\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 19455,\n                                  \"name\": \"defaultOracle\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 19058,\n                                  \"src\": \"6376:13:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_contract$_PriceOracle_$9880\",\n                                    \"typeString\": \"contract PriceOracle\"\n                                  }\n                                ],\n                                \"id\": 19454,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"6368:7:99\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_address_$\",\n                                  \"typeString\": \"type(address)\"\n                                },\n                                \"typeName\": {\n                                  \"id\": 19453,\n                                  \"name\": \"address\",\n                                  \"nodeType\": \"ElementaryTypeName\",\n                                  \"src\": \"6368:7:99\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": null,\n                                    \"typeString\": null\n                                  }\n                                }\n                              },\n                              \"id\": 19456,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"6368:22:99\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 19452,\n                            \"name\": \"BasePriceOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 15122,\n                            \"src\": \"6352:15:99\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$15122_$\",\n                              \"typeString\": \"type(contract BasePriceOracle)\"\n                            }\n                          },\n                          \"id\": 19457,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"6352:39:99\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_BasePriceOracle_$15122\",\n                            \"typeString\": \"contract BasePriceOracle\"\n                          }\n                        },\n                        \"id\": 19458,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"price\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 15121,\n                        \"src\": \"6352:45:99\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (address) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 19460,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"6352:57:99\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"functionReturnParameters\": 19410,\n                    \"id\": 19461,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"6345:64:99\"\n                  }\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"5072696365206f7261636c65206e6f7420666f756e6420666f72207468697320756e6465726c79696e6720746f6b656e20616464726573732e\",\n                        \"id\": 19464,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"6427:59:99\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_bca42cedac13b8f598dbb8e0556ae4078b48f952c304e7ad347acc420ad294f3\",\n                          \"typeString\": \"literal_string \\\"Price oracle not found for this underlying token address.\\\"\"\n                        },\n                        \"value\": \"Price oracle not found for this underlying token address.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_bca42cedac13b8f598dbb8e0556ae4078b48f952c304e7ad347acc420ad294f3\",\n                          \"typeString\": \"literal_string \\\"Price oracle not found for this underlying token address.\\\"\"\n                        }\n                      ],\n                      \"id\": 19463,\n                      \"name\": \"revert\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -19,\n                        -19\n                      ],\n                      \"referencedDeclaration\": -19,\n                      \"src\": \"6420:6:99\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_revert_pure$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (string memory) pure\"\n                      }\n                    },\n                    \"id\": 19465,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"6420:67:99\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 19466,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"6420:67:99\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 19403,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"5777:109:99\",\n              \"text\": \" @dev Attempts to return the price in ETH of `underlying` (implements `BasePriceOracle`).\"\n            },\n            \"functionSelector\": \"aea91078\",\n            \"id\": 19468,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 19407,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"5936:8:99\"\n            },\n            \"parameters\": {\n              \"id\": 19406,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19405,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19468,\n                  \"src\": \"5907:18:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19404,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"5907:7:99\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5906:20:99\"\n            },\n            \"returnParameters\": {\n              \"id\": 19410,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 19409,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 19468,\n                  \"src\": \"5959:4:99\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 19408,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"5959:4:99\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"5958:6:99\"\n            },\n            \"scope\": 19469,\n            \"src\": \"5892:603:99\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 19470,\n        \"src\": \"510:5988:99\"\n      }\n    ],\n    \"src\": \"40:6460:99\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.2.3\",\n  \"updatedAt\": \"2021-10-07T22:41:35.498Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements `PriceOracle`.\",\n    \"events\": {\n      \"NewAdmin(address,address)\": {\n        \"details\": \"Event emitted when `admin` is changed.\"\n      },\n      \"NewDefaultOracle(address,address)\": {\n        \"details\": \"Event emitted when the default oracle is changed.\"\n      },\n      \"NewOracle(address,address,address)\": {\n        \"details\": \"Event emitted when an underlying token's oracle is changed.\"\n      }\n    },\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"add(address[],address[])\": {\n        \"details\": \"Sets `_oracles` for `underlyings`.\"\n      },\n      \"canAdminOverwrite()\": {\n        \"details\": \"Returns a boolean indicating if `admin` can overwrite existing assignments of oracles to underlying tokens.\"\n      },\n      \"changeAdmin(address)\": {\n        \"details\": \"Changes the admin and emits an event.\"\n      },\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Implements the `PriceOracle` interface for Fuse pools (and Compound v2).\",\n        \"returns\": {\n          \"_0\": \"Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`.\"\n        }\n      },\n      \"initialize(address[],address[],address,address,bool)\": {\n        \"details\": \"Constructor to initialize state variables.\",\n        \"params\": {\n          \"_admin\": \"The admin who can assign oracles to underlying tokens.\",\n          \"_canAdminOverwrite\": \"Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\",\n          \"_defaultOracle\": \"The default `PriceOracle` contract to use.\",\n          \"_oracles\": \"The `PriceOracle` contracts to be assigned to `underlyings`.\",\n          \"underlyings\": \"The underlying ERC20 token addresses to link to `_oracles`.\"\n        }\n      },\n      \"price(address)\": {\n        \"details\": \"Attempts to return the price in ETH of `underlying` (implements `BasePriceOracle`).\"\n      },\n      \"setDefaultOracle(address)\": {\n        \"details\": \"Changes the admin and emits an event.\"\n      }\n    },\n    \"stateVariables\": {\n      \"admin\": {\n        \"details\": \"The administrator of this `MasterPriceOracle`.\"\n      },\n      \"defaultOracle\": {\n        \"details\": \"Default/fallback `PriceOracle`.\"\n      },\n      \"noAdminOverwrite\": {\n        \"details\": \"Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.\"\n      },\n      \"oracles\": {\n        \"details\": \"Maps underlying token addresses to `PriceOracle` contracts (can be `BasePriceOracle` contracts too).\"\n      }\n    },\n    \"title\": \"MasterPriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"notice\": \"Returns the price in ETH of the token underlying `cToken`.\"\n      }\n    },\n    \"notice\": \"Use a combination of price oracles.\",\n    \"version\": 1\n  }\n}"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/PreferredPriceOracle.json",
    "content": "{\n  \"contractName\": \"PreferredPriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract ChainlinkPriceOracle\",\n          \"name\": \"_chainlinkOracle\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"contract PriceOracle\",\n          \"name\": \"_secondaryOracle\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"chainlinkOracle\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract ChainlinkPriceOracle\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"secondaryOracle\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract PriceOracle\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ChainlinkPriceOracle\\\",\\\"name\\\":\\\"_chainlinkOracle\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"_secondaryOracle\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"chainlinkOracle\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ChainlinkPriceOracle\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"secondaryOracle\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract PriceOracle\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements `PriceOracle`.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Constructor to set the primary `ChainlinkPriceOracle` and the secondary `PriceOracle`.\\\"},\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\\"}},\\\"stateVariables\\\":{\\\"chainlinkOracle\\\":{\\\"details\\\":\\\"The primary `ChainlinkPriceOracle`.\\\"},\\\"secondaryOracle\\\":{\\\"details\\\":\\\"The secondary `PriceOracle`.\\\"}},\\\"title\\\":\\\"PreferredPriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"notice\\\":\\\"Returns prices from Chainlink or prices from a secondary oracle if an asset's price is not available via Chainlink.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/PreferredPriceOracle.sol\\\":\\\"PreferredPriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/chainlink/AggregatorV3Interface.sol\\\":{\\\"keccak256\\\":\\\"0x19b0055692673667799f6698d674fe1b4d938a2e6d89911583b91544ccf588e1\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://72ca4a7259eb42c9aa1d2966b937f375f54ed9ec139d398f369446e1c55dc999\\\",\\\"dweb:/ipfs/Qmc6XsqaVsgWGDJmgdt5Wbx7wmnWZgWMHA8c6Mq8NcXX7G\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xf267cd7f597c43c528b18543849347126d814357a0c3e262ac657f3054260a89\\\",\\\"urls\\\":[\\\"bzz-raw://d315fcc20e26f6378189167f4ab86893819903823ea18a485588f355aab5e036\\\",\\\"dweb:/ipfs/QmYG9oa8Rti6u7bAoBWJC8TtSqM1V8QsBiivsQo9y4wkAF\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/ChainlinkPriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xbed744696246b10ae4129f56d7007a234f3270e18967bdcad58ee4ae0138dc50\\\",\\\"urls\\\":[\\\"bzz-raw://cfe9587fe9a17486518dea4d342403f76c1f7cb95faa2fae3e32c59353254c2f\\\",\\\"dweb:/ipfs/QmRBecikWFCVJ2VFkcoSwVcyXmyzfT78u3Sp8mTMsHjayy\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/PreferredPriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xc5f527050654ac911bedbc8111f95be1bd2bc07c5cbe217c3d6f21328596088c\\\",\\\"urls\\\":[\\\"bzz-raw://74e775f10145ea2436a4b1cd774e94a974ca924905e97092ce5e220819e4f168\\\",\\\"dweb:/ipfs/QmUyzm3G9MgqaXmdMqocTgjYprkFQo2bcz33qk4M9LFMkK\\\"]},\\\"@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\\\",\\\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\\\",\\\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x9e71cf53c2ee5c9e4f183e168028fc208560493aaf48668bca0981bb2c8359c2\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7cb9d29f7bc76b077649ccef2043e1492a462afcb2410f443e63233f206a95dd\\\",\\\"dweb:/ipfs/QmRDXEro4hh2E6rTUAWvBkHzivAS1TBmtSLP1mRGAHVnnL\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506040516104c73803806104c78339818101604052604081101561003357600080fd5b5080516020909101516001600160a01b038216610097576040805162461bcd60e51b815260206004820152601d60248201527f436861696e6c696e6b50726963654f7261636c65206e6f74207365742e000000604482015290519081900360640190fd5b6001600160a01b0381166100f2576040805162461bcd60e51b815260206004820152601f60248201527f5365636f6e64617279207072696365206f7261636c65206e6f74207365742e00604482015290519081900360640190fd5b600080546001600160a01b039384166001600160a01b0319918216179091556001805492909316911617905561039a8061012d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063329d460914610046578063ef06e72c1461006a578063fc57d4df14610072575b600080fd5b61004e6100aa565b604080516001600160a01b039092168252519081900360200190f35b61004e6100b9565b6100986004803603602081101561008857600080fd5b50356001600160a01b03166100c8565b60408051918252519081900360200190f35b6001546001600160a01b031681565b6000546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561010357600080fd5b505afa158015610117573d6000803e3d6000fd5b505050506040513d602081101561012d57600080fd5b5051156101435750670de0b6b3a764000061035f565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03821614156101e257670de0b6b3a764000091505061035f565b600054604080516305bcc1d160e11b81526001600160a01b03848116600483015291519190921691630b7983a2916024808301926020929190829003018186803b15801561022f57600080fd5b505afa158015610243573d6000803e3d6000fd5b505050506040513d602081101561025957600080fd5b5051156102e2576000546040805163fc57d4df60e01b81526001600160a01b0386811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b1580156102ad57600080fd5b505afa1580156102c1573d6000803e3d6000fd5b505050506040513d60208110156102d757600080fd5b5051915061035f9050565b6001546040805163fc57d4df60e01b81526001600160a01b0386811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b15801561032f57600080fd5b505afa158015610343573d6000803e3d6000fd5b505050506040513d602081101561035957600080fd5b50519150505b91905056fea2646970667358221220a4182f85109c7c483ea01fe286c461e179f7a53787f10054f420b5c819b994cc64736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063329d460914610046578063ef06e72c1461006a578063fc57d4df14610072575b600080fd5b61004e6100aa565b604080516001600160a01b039092168252519081900360200190f35b61004e6100b9565b6100986004803603602081101561008857600080fd5b50356001600160a01b03166100c8565b60408051918252519081900360200190f35b6001546001600160a01b031681565b6000546001600160a01b031681565b6000816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561010357600080fd5b505afa158015610117573d6000803e3d6000fd5b505050506040513d602081101561012d57600080fd5b5051156101435750670de0b6b3a764000061035f565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051905073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03821614156101e257670de0b6b3a764000091505061035f565b600054604080516305bcc1d160e11b81526001600160a01b03848116600483015291519190921691630b7983a2916024808301926020929190829003018186803b15801561022f57600080fd5b505afa158015610243573d6000803e3d6000fd5b505050506040513d602081101561025957600080fd5b5051156102e2576000546040805163fc57d4df60e01b81526001600160a01b0386811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b1580156102ad57600080fd5b505afa1580156102c1573d6000803e3d6000fd5b505050506040513d60208110156102d757600080fd5b5051915061035f9050565b6001546040805163fc57d4df60e01b81526001600160a01b0386811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b15801561032f57600080fd5b505afa158015610343573d6000803e3d6000fd5b505050506040513d602081101561035957600080fd5b50519150505b91905056fea2646970667358221220a4182f85109c7c483ea01fe286c461e179f7a53787f10054f420b5c819b994cc64736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"485:1571:39:-:0;;;881:372;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;881:372:39;;;;;;;-1:-1:-1;;;;;988:39:39;;980:81;;;;;-1:-1:-1;;;980:81:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1080:39:39;;1072:83;;;;;-1:-1:-1;;;1072:83:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;1166:15;:34;;-1:-1:-1;;;;;1166:34:39;;;-1:-1:-1;;;;;;1166:34:39;;;;;;;;1211;;;;;;;;;;;485:1571;;;;;;\",\n  \"deployedSourceMap\": \"485:1571:39:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;716:34;;;:::i;:::-;;;;-1:-1:-1;;;;;716:34:39;;;;;;;;;;;;;;604:43;;;:::i;1378:675::-;;;;;;;;;;;;;;;;-1:-1:-1;1378:675:39;-1:-1:-1;;;;;1378:675:39;;:::i;:::-;;;;;;;;;;;;;;;;716:34;;;-1:-1:-1;;;;;716:34:39;;:::o;604:43::-;;;-1:-1:-1;;;;;604:43:39;;:::o;1378:675::-;1453:4;1506:6;-1:-1:-1;;;;;1506:15:39;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1506:17:39;1502:34;;;-1:-1:-1;1532:4:39;1525:11;;1502:34;1596:18;1640:6;-1:-1:-1;;;;;1625:34:39;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1625:36:39;;-1:-1:-1;1726:42:39;-1:-1:-1;;;;;1712:56:39;;;1708:73;;;1777:4;1770:11;;;;;1708:73;1837:15;;:40;;;-1:-1:-1;;;1837:40:39;;-1:-1:-1;;;;;1837:40:39;;;;;;;;;:15;;;;;:28;;:40;;;;;;;;;;;;;;:15;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1837:40:39;1833:95;;;1886:15;;:42;;;-1:-1:-1;;;1886:42:39;;-1:-1:-1;;;;;1886:42:39;;;;;;;;;:15;;;;;:34;;:42;;;;;;;;;;;;;;:15;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1886:42:39;;-1:-1:-1;1879:49:39;;-1:-1:-1;1879:49:39;1833:95;2003:15;;:42;;;-1:-1:-1;;;2003:42:39;;-1:-1:-1;;;;;2003:42:39;;;;;;;;;:15;;;;;:34;;:42;;;;;;;;;;;;;;:15;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2003:42:39;;-1:-1:-1;;1378:675:39;;;;:::o\",\n  \"source\": \"pragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CToken.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"./ChainlinkPriceOracle.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title PreferredPriceOracle\\r\\n * @notice Returns prices from Chainlink or prices from a secondary oracle if an asset's price is not available via Chainlink.\\r\\n * @dev Implements `PriceOracle`.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract PreferredPriceOracle is PriceOracle {\\r\\n    /**\\r\\n     * @dev The primary `ChainlinkPriceOracle`.\\r\\n     */\\r\\n    ChainlinkPriceOracle public chainlinkOracle;\\r\\n\\r\\n    /**\\r\\n     * @dev The secondary `PriceOracle`.\\r\\n     */\\r\\n    PriceOracle public secondaryOracle;\\r\\n    \\r\\n    /**\\r\\n     * @dev Constructor to set the primary `ChainlinkPriceOracle` and the secondary `PriceOracle`.\\r\\n     */\\r\\n    constructor(ChainlinkPriceOracle _chainlinkOracle, PriceOracle _secondaryOracle) public {\\r\\n        require(address(_chainlinkOracle) != address(0), \\\"ChainlinkPriceOracle not set.\\\");\\r\\n        require(address(_secondaryOracle) != address(0), \\\"Secondary price oracle not set.\\\");\\r\\n        chainlinkOracle = _chainlinkOracle;\\r\\n        secondaryOracle = _secondaryOracle;\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        // Return 1e18 for ETH\\r\\n        if (cToken.isCEther()) return 1e18;\\r\\n\\r\\n        // Get underlying ERC20 token address\\r\\n        address underlying = address(CErc20(address(cToken)).underlying());\\r\\n\\r\\n        // Return 1e18 for WETH\\r\\n        if (underlying == 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2) return 1e18;\\r\\n\\r\\n        // Try to get Chainlink price\\r\\n        if (chainlinkOracle.hasPriceFeed(underlying)) return chainlinkOracle.getUnderlyingPrice(cToken);\\r\\n\\r\\n        // Otherwise, get price from secondary oracle\\r\\n        return secondaryOracle.getUnderlyingPrice(cToken);\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/PreferredPriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/PreferredPriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"PreferredPriceOracle\": [9700]\n    },\n    \"id\": 9701,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 9592,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"0:23:39\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 9593,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9701,\n        \"sourceUnit\": 6024,\n        \"src\": \"27:46:39\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 9594,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9701,\n        \"sourceUnit\": 5867,\n        \"src\": \"75:41:39\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 9595,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9701,\n        \"sourceUnit\": 5724,\n        \"src\": \"118:41:39\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/ChainlinkPriceOracle.sol\",\n        \"file\": \"./ChainlinkPriceOracle.sol\",\n        \"id\": 9596,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9701,\n        \"sourceUnit\": 8906,\n        \"src\": \"163:36:39\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 9598,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"518:11:39\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 9599,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"518:11:39\"\n          }\n        ],\n        \"contractDependencies\": [6023],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 9597,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"203:280:39\",\n          \"text\": \" @title PreferredPriceOracle\\n @notice Returns prices from Chainlink or prices from a secondary oracle if an asset's price is not available via Chainlink.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 9700,\n        \"linearizedBaseContracts\": [9700, 6023],\n        \"name\": \"PreferredPriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 9600,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"537:61:39\",\n              \"text\": \" @dev The primary `ChainlinkPriceOracle`.\"\n            },\n            \"functionSelector\": \"ef06e72c\",\n            \"id\": 9602,\n            \"mutability\": \"mutable\",\n            \"name\": \"chainlinkOracle\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9700,\n            \"src\": \"604:43:39\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n              \"typeString\": \"contract ChainlinkPriceOracle\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 9601,\n              \"name\": \"ChainlinkPriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 8905,\n              \"src\": \"604:20:39\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                \"typeString\": \"contract ChainlinkPriceOracle\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 9603,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"656:54:39\",\n              \"text\": \" @dev The secondary `PriceOracle`.\"\n            },\n            \"functionSelector\": \"329d4609\",\n            \"id\": 9605,\n            \"mutability\": \"mutable\",\n            \"name\": \"secondaryOracle\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9700,\n            \"src\": \"716:34:39\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n              \"typeString\": \"contract PriceOracle\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 9604,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"716:11:39\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 9647,\n              \"nodeType\": \"Block\",\n              \"src\": \"969:284:39\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 9622,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 9616,\n                              \"name\": \"_chainlinkOracle\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9608,\n                              \"src\": \"996:16:39\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                                \"typeString\": \"contract ChainlinkPriceOracle\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                                \"typeString\": \"contract ChainlinkPriceOracle\"\n                              }\n                            ],\n                            \"id\": 9615,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"988:7:39\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9614,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"988:7:39\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 9617,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"988:25:39\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 9620,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"1025:1:39\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 9619,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1017:7:39\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9618,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1017:7:39\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 9621,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1017:10:39\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"988:39:39\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"436861696e6c696e6b50726963654f7261636c65206e6f74207365742e\",\n                        \"id\": 9623,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1029:31:39\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_9b57049bc5d2a58d48dece658a810bef75ba957085d6d3a2360c0c37bbd4e00c\",\n                          \"typeString\": \"literal_string \\\"ChainlinkPriceOracle not set.\\\"\"\n                        },\n                        \"value\": \"ChainlinkPriceOracle not set.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_9b57049bc5d2a58d48dece658a810bef75ba957085d6d3a2360c0c37bbd4e00c\",\n                          \"typeString\": \"literal_string \\\"ChainlinkPriceOracle not set.\\\"\"\n                        }\n                      ],\n                      \"id\": 9613,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"980:7:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 9624,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"980:81:39\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 9625,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"980:81:39\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 9635,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 9629,\n                              \"name\": \"_secondaryOracle\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9610,\n                              \"src\": \"1088:16:39\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                                \"typeString\": \"contract PriceOracle\"\n                              }\n                            ],\n                            \"id\": 9628,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1080:7:39\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9627,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1080:7:39\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 9630,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1080:25:39\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 9633,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"1117:1:39\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 9632,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1109:7:39\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9631,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1109:7:39\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 9634,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1109:10:39\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"1080:39:39\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"5365636f6e64617279207072696365206f7261636c65206e6f74207365742e\",\n                        \"id\": 9636,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1121:33:39\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_ebd9734216fd97e27c38a134d929d7944d591c553f7345c5494b181c6fc8b0ba\",\n                          \"typeString\": \"literal_string \\\"Secondary price oracle not set.\\\"\"\n                        },\n                        \"value\": \"Secondary price oracle not set.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_ebd9734216fd97e27c38a134d929d7944d591c553f7345c5494b181c6fc8b0ba\",\n                          \"typeString\": \"literal_string \\\"Secondary price oracle not set.\\\"\"\n                        }\n                      ],\n                      \"id\": 9626,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [-18, -18],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"1072:7:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 9637,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1072:83:39\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 9638,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1072:83:39\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 9641,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9639,\n                      \"name\": \"chainlinkOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9602,\n                      \"src\": \"1166:15:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                        \"typeString\": \"contract ChainlinkPriceOracle\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9640,\n                      \"name\": \"_chainlinkOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9608,\n                      \"src\": \"1184:16:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                        \"typeString\": \"contract ChainlinkPriceOracle\"\n                      }\n                    },\n                    \"src\": \"1166:34:39\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                      \"typeString\": \"contract ChainlinkPriceOracle\"\n                    }\n                  },\n                  \"id\": 9642,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1166:34:39\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 9645,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9643,\n                      \"name\": \"secondaryOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9605,\n                      \"src\": \"1211:15:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9644,\n                      \"name\": \"_secondaryOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9610,\n                      \"src\": \"1229:16:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                        \"typeString\": \"contract PriceOracle\"\n                      }\n                    },\n                    \"src\": \"1211:34:39\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"id\": 9646,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1211:34:39\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9606,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"763:112:39\",\n              \"text\": \" @dev Constructor to set the primary `ChainlinkPriceOracle` and the secondary `PriceOracle`.\"\n            },\n            \"id\": 9648,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9611,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9608,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_chainlinkOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9648,\n                  \"src\": \"893:37:39\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                    \"typeString\": \"contract ChainlinkPriceOracle\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 9607,\n                    \"name\": \"ChainlinkPriceOracle\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 8905,\n                    \"src\": \"893:20:39\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                      \"typeString\": \"contract ChainlinkPriceOracle\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 9610,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_secondaryOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9648,\n                  \"src\": \"932:28:39\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                    \"typeString\": \"contract PriceOracle\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 9609,\n                    \"name\": \"PriceOracle\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 6023,\n                    \"src\": \"932:11:39\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                      \"typeString\": \"contract PriceOracle\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"892:69:39\"\n            },\n            \"returnParameters\": {\n              \"id\": 9612,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"969:0:39\"\n            },\n            \"scope\": 9700,\n            \"src\": \"881:372:39\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"public\"\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 9698,\n              \"nodeType\": \"Block\",\n              \"src\": \"1459:594:39\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9657,\n                        \"name\": \"cToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9651,\n                        \"src\": \"1506:6:39\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                          \"typeString\": \"contract CToken\"\n                        }\n                      },\n                      \"id\": 9658,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"isCEther\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5805,\n                      \"src\": \"1506:15:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_bool_$\",\n                        \"typeString\": \"function () view external returns (bool)\"\n                      }\n                    },\n                    \"id\": 9659,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1506:17:39\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9662,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1502:34:39\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 9660,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1532:4:39\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 9656,\n                    \"id\": 9661,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"1525:11:39\"\n                  }\n                },\n                {\n                  \"assignments\": [9664],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9664,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9698,\n                      \"src\": \"1596:18:39\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9663,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1596:7:39\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9676,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 9670,\n                                    \"name\": \"cToken\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 9651,\n                                    \"src\": \"1640:6:39\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  ],\n                                  \"id\": 9669,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"ElementaryTypeNameExpression\",\n                                  \"src\": \"1632:7:39\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_type$_t_address_$\",\n                                    \"typeString\": \"type(address)\"\n                                  },\n                                  \"typeName\": {\n                                    \"id\": 9668,\n                                    \"name\": \"address\",\n                                    \"nodeType\": \"ElementaryTypeName\",\n                                    \"src\": \"1632:7:39\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": null,\n                                      \"typeString\": null\n                                    }\n                                  }\n                                },\n                                \"id\": 9671,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"typeConversion\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"1632:15:39\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 9667,\n                              \"name\": \"CErc20\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 5723,\n                              \"src\": \"1625:6:39\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                                \"typeString\": \"type(contract CErc20)\"\n                              }\n                            },\n                            \"id\": 9672,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1625:23:39\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                              \"typeString\": \"contract CErc20\"\n                            }\n                          },\n                          \"id\": 9673,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"underlying\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5711,\n                          \"src\": \"1625:34:39\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                            \"typeString\": \"function () view external returns (address)\"\n                          }\n                        },\n                        \"id\": 9674,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1625:36:39\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 9666,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"1617:7:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_address_$\",\n                        \"typeString\": \"type(address)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9665,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1617:7:39\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 9675,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1617:45:39\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1596:66:39\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 9679,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9677,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9664,\n                      \"src\": \"1712:10:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                      \"id\": 9678,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1726:42:39\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      },\n                      \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                    },\n                    \"src\": \"1712:56:39\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9682,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1708:73:39\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 9680,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1777:4:39\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"functionReturnParameters\": 9656,\n                    \"id\": 9681,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"1770:11:39\"\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9685,\n                        \"name\": \"underlying\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9664,\n                        \"src\": \"1866:10:39\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9683,\n                        \"name\": \"chainlinkOracle\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9602,\n                        \"src\": \"1837:15:39\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                          \"typeString\": \"contract ChainlinkPriceOracle\"\n                        }\n                      },\n                      \"id\": 9684,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"hasPriceFeed\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 8577,\n                      \"src\": \"1837:28:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_bool_$\",\n                        \"typeString\": \"function (address) view external returns (bool)\"\n                      }\n                    },\n                    \"id\": 9686,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1837:40:39\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9692,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1833:95:39\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 9689,\n                          \"name\": \"cToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9651,\n                          \"src\": \"1921:6:39\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9687,\n                          \"name\": \"chainlinkOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9602,\n                          \"src\": \"1886:15:39\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                            \"typeString\": \"contract ChainlinkPriceOracle\"\n                          }\n                        },\n                        \"id\": 9688,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"getUnderlyingPrice\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 8904,\n                        \"src\": \"1886:34:39\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_contract$_CToken_$5866_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (contract CToken) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 9690,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1886:42:39\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"functionReturnParameters\": 9656,\n                    \"id\": 9691,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"1879:49:39\"\n                  }\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9695,\n                        \"name\": \"cToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9651,\n                        \"src\": \"2038:6:39\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                          \"typeString\": \"contract CToken\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                          \"typeString\": \"contract CToken\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 9693,\n                        \"name\": \"secondaryOracle\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9605,\n                        \"src\": \"2003:15:39\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                          \"typeString\": \"contract PriceOracle\"\n                        }\n                      },\n                      \"id\": 9694,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"getUnderlyingPrice\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6022,\n                      \"src\": \"2003:34:39\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$_t_contract$_CToken_$5866_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (contract CToken) view external returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9696,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2003:42:39\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 9656,\n                  \"id\": 9697,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1996:49:39\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9649,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1261:111:39\",\n              \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 9699,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 9653,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"1430:8:39\"\n            },\n            \"parameters\": {\n              \"id\": 9652,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9651,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9699,\n                  \"src\": \"1406:13:39\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 9650,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"1406:6:39\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1405:15:39\"\n            },\n            \"returnParameters\": {\n              \"id\": 9656,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9655,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9699,\n                  \"src\": \"1453:4:39\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9654,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1453:4:39\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1452:6:39\"\n            },\n            \"scope\": 9700,\n            \"src\": \"1378:675:39\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 9701,\n        \"src\": \"485:1571:39\"\n      }\n    ],\n    \"src\": \"0:2058:39\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/PreferredPriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"PreferredPriceOracle\": [9700]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 9592,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"0:23:39\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 9701,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9593,\n        \"name\": \"ImportDirective\",\n        \"src\": \"27:46:39\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5867,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n          \"file\": \"../external/compound/CToken.sol\",\n          \"scope\": 9701,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9594,\n        \"name\": \"ImportDirective\",\n        \"src\": \"75:41:39\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 9701,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9595,\n        \"name\": \"ImportDirective\",\n        \"src\": \"118:41:39\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 8906,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/ChainlinkPriceOracle.sol\",\n          \"file\": \"./ChainlinkPriceOracle.sol\",\n          \"scope\": 9701,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9596,\n        \"name\": \"ImportDirective\",\n        \"src\": \"163:36:39\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [9700, 6023],\n          \"name\": \"PreferredPriceOracle\",\n          \"scope\": 9701\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title PreferredPriceOracle\\n @notice Returns prices from Chainlink or prices from a secondary oracle if an asset's price is not available via Chainlink.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n            },\n            \"id\": 9597,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"203:280:39\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 9598,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"518:11:39\"\n              }\n            ],\n            \"id\": 9599,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"518:11:39\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"ef06e72c\",\n              \"mutability\": \"mutable\",\n              \"name\": \"chainlinkOracle\",\n              \"overrides\": null,\n              \"scope\": 9700,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"contract ChainlinkPriceOracle\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"ChainlinkPriceOracle\",\n                  \"referencedDeclaration\": 8905,\n                  \"type\": \"contract ChainlinkPriceOracle\"\n                },\n                \"id\": 9601,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"604:20:39\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev The primary `ChainlinkPriceOracle`.\"\n                },\n                \"id\": 9600,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"537:61:39\"\n              }\n            ],\n            \"id\": 9602,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"604:43:39\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": false,\n              \"functionSelector\": \"329d4609\",\n              \"mutability\": \"mutable\",\n              \"name\": \"secondaryOracle\",\n              \"overrides\": null,\n              \"scope\": 9700,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"contract PriceOracle\",\n              \"value\": null,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 9604,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"716:11:39\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev The secondary `PriceOracle`.\"\n                },\n                \"id\": 9603,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"656:54:39\"\n              }\n            ],\n            \"id\": 9605,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"716:34:39\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": true,\n              \"kind\": \"constructor\",\n              \"modifiers\": [null],\n              \"name\": \"\",\n              \"overrides\": null,\n              \"scope\": 9700,\n              \"stateMutability\": \"nonpayable\",\n              \"virtual\": false,\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Constructor to set the primary `ChainlinkPriceOracle` and the secondary `PriceOracle`.\"\n                },\n                \"id\": 9606,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"763:112:39\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"_chainlinkOracle\",\n                      \"overrides\": null,\n                      \"scope\": 9648,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract ChainlinkPriceOracle\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"ChainlinkPriceOracle\",\n                          \"referencedDeclaration\": 8905,\n                          \"type\": \"contract ChainlinkPriceOracle\"\n                        },\n                        \"id\": 9607,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"893:20:39\"\n                      }\n                    ],\n                    \"id\": 9608,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"893:37:39\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"_secondaryOracle\",\n                      \"overrides\": null,\n                      \"scope\": 9648,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract PriceOracle\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"PriceOracle\",\n                          \"referencedDeclaration\": 6023,\n                          \"type\": \"contract PriceOracle\"\n                        },\n                        \"id\": 9609,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"932:11:39\"\n                      }\n                    ],\n                    \"id\": 9610,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"932:28:39\"\n                  }\n                ],\n                \"id\": 9611,\n                \"name\": \"ParameterList\",\n                \"src\": \"892:69:39\"\n              },\n              {\n                \"attributes\": {\n                  \"parameters\": [null]\n                },\n                \"children\": [],\n                \"id\": 9612,\n                \"name\": \"ParameterList\",\n                \"src\": \"969:0:39\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_9b57049bc5d2a58d48dece658a810bef75ba957085d6d3a2360c0c37bbd4e00c\",\n                                  \"typeString\": \"literal_string \\\"ChainlinkPriceOracle not set.\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 9613,\n                            \"name\": \"Identifier\",\n                            \"src\": \"980:7:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"!=\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_contract$_ChainlinkPriceOracle_$8905\",\n                                          \"typeString\": \"contract ChainlinkPriceOracle\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 9614,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"988:7:39\"\n                                      }\n                                    ],\n                                    \"id\": 9615,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"988:7:39\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9608,\n                                      \"type\": \"contract ChainlinkPriceOracle\",\n                                      \"value\": \"_chainlinkOracle\"\n                                    },\n                                    \"id\": 9616,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"996:16:39\"\n                                  }\n                                ],\n                                \"id\": 9617,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"988:25:39\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address payable\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_0_by_1\",\n                                          \"typeString\": \"int_const 0\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 9618,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"1017:7:39\"\n                                      }\n                                    ],\n                                    \"id\": 9619,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"1017:7:39\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 9620,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"1025:1:39\"\n                                  }\n                                ],\n                                \"id\": 9621,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1017:10:39\"\n                              }\n                            ],\n                            \"id\": 9622,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"988:39:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"436861696e6c696e6b50726963654f7261636c65206e6f74207365742e\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"ChainlinkPriceOracle not set.\\\"\",\n                              \"value\": \"ChainlinkPriceOracle not set.\"\n                            },\n                            \"id\": 9623,\n                            \"name\": \"Literal\",\n                            \"src\": \"1029:31:39\"\n                          }\n                        ],\n                        \"id\": 9624,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"980:81:39\"\n                      }\n                    ],\n                    \"id\": 9625,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"980:81:39\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple()\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bool\",\n                                  \"typeString\": \"bool\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_ebd9734216fd97e27c38a134d929d7944d591c553f7345c5494b181c6fc8b0ba\",\n                                  \"typeString\": \"literal_string \\\"Secondary price oracle not set.\\\"\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [-18, -18],\n                              \"referencedDeclaration\": -18,\n                              \"type\": \"function (bool,string memory) pure\",\n                              \"value\": \"require\"\n                            },\n                            \"id\": 9626,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1072:7:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"!=\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                                          \"typeString\": \"contract PriceOracle\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 9627,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"1080:7:39\"\n                                      }\n                                    ],\n                                    \"id\": 9628,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"1080:7:39\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9610,\n                                      \"type\": \"contract PriceOracle\",\n                                      \"value\": \"_secondaryOracle\"\n                                    },\n                                    \"id\": 9629,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"1088:16:39\"\n                                  }\n                                ],\n                                \"id\": 9630,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1080:25:39\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"address payable\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_0_by_1\",\n                                          \"typeString\": \"int_const 0\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(address)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"address\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 9631,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"1109:7:39\"\n                                      }\n                                    ],\n                                    \"id\": 9632,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"1109:7:39\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 9633,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"1117:1:39\"\n                                  }\n                                ],\n                                \"id\": 9634,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1109:10:39\"\n                              }\n                            ],\n                            \"id\": 9635,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"1080:39:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"5365636f6e64617279207072696365206f7261636c65206e6f74207365742e\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"string\",\n                              \"type\": \"literal_string \\\"Secondary price oracle not set.\\\"\",\n                              \"value\": \"Secondary price oracle not set.\"\n                            },\n                            \"id\": 9636,\n                            \"name\": \"Literal\",\n                            \"src\": \"1121:33:39\"\n                          }\n                        ],\n                        \"id\": 9637,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1072:83:39\"\n                      }\n                    ],\n                    \"id\": 9638,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"1072:83:39\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract ChainlinkPriceOracle\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9602,\n                              \"type\": \"contract ChainlinkPriceOracle\",\n                              \"value\": \"chainlinkOracle\"\n                            },\n                            \"id\": 9639,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1166:15:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9608,\n                              \"type\": \"contract ChainlinkPriceOracle\",\n                              \"value\": \"_chainlinkOracle\"\n                            },\n                            \"id\": 9640,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1184:16:39\"\n                          }\n                        ],\n                        \"id\": 9641,\n                        \"name\": \"Assignment\",\n                        \"src\": \"1166:34:39\"\n                      }\n                    ],\n                    \"id\": 9642,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"1166:34:39\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"contract PriceOracle\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9605,\n                              \"type\": \"contract PriceOracle\",\n                              \"value\": \"secondaryOracle\"\n                            },\n                            \"id\": 9643,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1211:15:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9610,\n                              \"type\": \"contract PriceOracle\",\n                              \"value\": \"_secondaryOracle\"\n                            },\n                            \"id\": 9644,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1229:16:39\"\n                          }\n                        ],\n                        \"id\": 9645,\n                        \"name\": \"Assignment\",\n                        \"src\": \"1211:34:39\"\n                      }\n                    ],\n                    \"id\": 9646,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"1211:34:39\"\n                  }\n                ],\n                \"id\": 9647,\n                \"name\": \"Block\",\n                \"src\": \"969:284:39\"\n              }\n            ],\n            \"id\": 9648,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"881:372:39\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 9700,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n                },\n                \"id\": 9649,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1261:111:39\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 9653,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"1430:8:39\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 9699,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 9650,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"1406:6:39\"\n                      }\n                    ],\n                    \"id\": 9651,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1406:13:39\"\n                  }\n                ],\n                \"id\": 9652,\n                \"name\": \"ParameterList\",\n                \"src\": \"1405:15:39\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9699,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9654,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1453:4:39\"\n                      }\n                    ],\n                    \"id\": 9655,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1453:4:39\"\n                  }\n                ],\n                \"id\": 9656,\n                \"name\": \"ParameterList\",\n                \"src\": \"1452:6:39\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"bool\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"isCEther\",\n                              \"referencedDeclaration\": 5805,\n                              \"type\": \"function () view external returns (bool)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9651,\n                                  \"type\": \"contract CToken\",\n                                  \"value\": \"cToken\"\n                                },\n                                \"id\": 9657,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1506:6:39\"\n                              }\n                            ],\n                            \"id\": 9658,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1506:15:39\"\n                          }\n                        ],\n                        \"id\": 9659,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1506:17:39\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"functionReturnParameters\": 9656\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 9660,\n                            \"name\": \"Literal\",\n                            \"src\": \"1532:4:39\"\n                          }\n                        ],\n                        \"id\": 9661,\n                        \"name\": \"Return\",\n                        \"src\": \"1525:11:39\"\n                      }\n                    ],\n                    \"id\": 9662,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"1502:34:39\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9664]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlying\",\n                          \"overrides\": null,\n                          \"scope\": 9698,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 9663,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1596:7:39\"\n                          }\n                        ],\n                        \"id\": 9664,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1596:18:39\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"type\": \"type(address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"name\": \"address\",\n                                  \"type\": null\n                                },\n                                \"id\": 9665,\n                                \"name\": \"ElementaryTypeName\",\n                                \"src\": \"1617:7:39\"\n                              }\n                            ],\n                            \"id\": 9666,\n                            \"name\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1617:7:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"underlying\",\n                                  \"referencedDeclaration\": 5711,\n                                  \"type\": \"function () view external returns (address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract CErc20\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 5723,\n                                          \"type\": \"type(contract CErc20)\",\n                                          \"value\": \"CErc20\"\n                                        },\n                                        \"id\": 9667,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1625:6:39\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"address\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                                  \"typeString\": \"contract CToken\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"type\": \"type(address)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"name\": \"address\",\n                                                  \"type\": null\n                                                },\n                                                \"id\": 9668,\n                                                \"name\": \"ElementaryTypeName\",\n                                                \"src\": \"1632:7:39\"\n                                              }\n                                            ],\n                                            \"id\": 9669,\n                                            \"name\": \"ElementaryTypeNameExpression\",\n                                            \"src\": \"1632:7:39\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9651,\n                                              \"type\": \"contract CToken\",\n                                              \"value\": \"cToken\"\n                                            },\n                                            \"id\": 9670,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1640:6:39\"\n                                          }\n                                        ],\n                                        \"id\": 9671,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1632:15:39\"\n                                      }\n                                    ],\n                                    \"id\": 9672,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1625:23:39\"\n                                  }\n                                ],\n                                \"id\": 9673,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1625:34:39\"\n                              }\n                            ],\n                            \"id\": 9674,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1625:36:39\"\n                          }\n                        ],\n                        \"id\": 9675,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1617:45:39\"\n                      }\n                    ],\n                    \"id\": 9676,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1596:66:39\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"==\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9664,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 9677,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1712:10:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"address payable\",\n                              \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                            },\n                            \"id\": 9678,\n                            \"name\": \"Literal\",\n                            \"src\": \"1726:42:39\"\n                          }\n                        ],\n                        \"id\": 9679,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"1712:56:39\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"functionReturnParameters\": 9656\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 9680,\n                            \"name\": \"Literal\",\n                            \"src\": \"1777:4:39\"\n                          }\n                        ],\n                        \"id\": 9681,\n                        \"name\": \"Return\",\n                        \"src\": \"1770:11:39\"\n                      }\n                    ],\n                    \"id\": 9682,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"1708:73:39\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"bool\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"hasPriceFeed\",\n                              \"referencedDeclaration\": 8577,\n                              \"type\": \"function (address) view external returns (bool)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9602,\n                                  \"type\": \"contract ChainlinkPriceOracle\",\n                                  \"value\": \"chainlinkOracle\"\n                                },\n                                \"id\": 9683,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1837:15:39\"\n                              }\n                            ],\n                            \"id\": 9684,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1837:28:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9664,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 9685,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1866:10:39\"\n                          }\n                        ],\n                        \"id\": 9686,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1837:40:39\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"functionReturnParameters\": 9656\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"getUnderlyingPrice\",\n                                  \"referencedDeclaration\": 8904,\n                                  \"type\": \"function (contract CToken) view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9602,\n                                      \"type\": \"contract ChainlinkPriceOracle\",\n                                      \"value\": \"chainlinkOracle\"\n                                    },\n                                    \"id\": 9687,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"1886:15:39\"\n                                  }\n                                ],\n                                \"id\": 9688,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1886:34:39\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9651,\n                                  \"type\": \"contract CToken\",\n                                  \"value\": \"cToken\"\n                                },\n                                \"id\": 9689,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1921:6:39\"\n                              }\n                            ],\n                            \"id\": 9690,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1886:42:39\"\n                          }\n                        ],\n                        \"id\": 9691,\n                        \"name\": \"Return\",\n                        \"src\": \"1879:49:39\"\n                      }\n                    ],\n                    \"id\": 9692,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"1833:95:39\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 9656\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"getUnderlyingPrice\",\n                              \"referencedDeclaration\": 6022,\n                              \"type\": \"function (contract CToken) view external returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9605,\n                                  \"type\": \"contract PriceOracle\",\n                                  \"value\": \"secondaryOracle\"\n                                },\n                                \"id\": 9693,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2003:15:39\"\n                              }\n                            ],\n                            \"id\": 9694,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2003:34:39\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9651,\n                              \"type\": \"contract CToken\",\n                              \"value\": \"cToken\"\n                            },\n                            \"id\": 9695,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2038:6:39\"\n                          }\n                        ],\n                        \"id\": 9696,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2003:42:39\"\n                      }\n                    ],\n                    \"id\": 9697,\n                    \"name\": \"Return\",\n                    \"src\": \"1996:49:39\"\n                  }\n                ],\n                \"id\": 9698,\n                \"name\": \"Block\",\n                \"src\": \"1459:594:39\"\n              }\n            ],\n            \"id\": 9699,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1378:675:39\"\n          }\n        ],\n        \"id\": 9700,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"485:1571:39\"\n      }\n    ],\n    \"id\": 9701,\n    \"name\": \"SourceUnit\",\n    \"src\": \"0:2058:39\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.156Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements `PriceOracle`.\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Constructor to set the primary `ChainlinkPriceOracle` and the secondary `PriceOracle`.\"\n      },\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n      }\n    },\n    \"stateVariables\": {\n      \"chainlinkOracle\": {\n        \"details\": \"The primary `ChainlinkPriceOracle`.\"\n      },\n      \"secondaryOracle\": {\n        \"details\": \"The secondary `PriceOracle`.\"\n      }\n    },\n    \"title\": \"PreferredPriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"notice\": \"Returns prices from Chainlink or prices from a secondary oracle if an asset's price is not available via Chainlink.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/RecursivePriceOracle.json",
    "content": "{\n  \"contractName\": \"RecursivePriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [],\n      \"name\": \"COMPOUND_COMPTROLLER\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"CREAM_COMPTROLLER\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"ETH_USD_PRICE_FEED\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract AggregatorV3Interface\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[],\\\"name\\\":\\\"COMPOUND_COMPTROLLER\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"CREAM_COMPTROLLER\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ETH_USD_PRICE_FEED\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract AggregatorV3Interface\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements `PriceOracle`.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\\"}},\\\"stateVariables\\\":{\\\"COMPOUND_COMPTROLLER\\\":{\\\"details\\\":\\\"Compound Comptroller address.\\\"},\\\"CREAM_COMPTROLLER\\\":{\\\"details\\\":\\\"Cream Comptroller address.\\\"},\\\"ETH_USD_PRICE_FEED\\\":{\\\"details\\\":\\\"Chainlink ETH/USD price feed contract.\\\"}},\\\"title\\\":\\\"RecursivePriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"notice\\\":\\\"Returns prices from other cTokens (from Compound or from Fuse).\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/RecursivePriceOracle.sol\\\":\\\"RecursivePriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/chainlink/AggregatorV3Interface.sol\\\":{\\\"keccak256\\\":\\\"0x19b0055692673667799f6698d674fe1b4d938a2e6d89911583b91544ccf588e1\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://72ca4a7259eb42c9aa1d2966b937f375f54ed9ec139d398f369446e1c55dc999\\\",\\\"dweb:/ipfs/Qmc6XsqaVsgWGDJmgdt5Wbx7wmnWZgWMHA8c6Mq8NcXX7G\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/Comptroller.sol\\\":{\\\"keccak256\\\":\\\"0x5f97234ddf1e06e772873628cf27c3d6771058c1c1410fd41529474995693a39\\\",\\\"urls\\\":[\\\"bzz-raw://6931064c9a213e55b092021d7288fc2a5ca62600ed6edc43db1a8eb88f7e3f40\\\",\\\"dweb:/ipfs/Qmf1DDqLipbFjnj9BhqKBykZ1wQECs2K3WSvuHY47vMNas\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/Unitroller.sol\\\":{\\\"keccak256\\\":\\\"0x064f920ca73908e3721016ac06bd7ad8f14369bc9c2ab3d6d99a3140da36f0dc\\\",\\\"urls\\\":[\\\"bzz-raw://4261e89d8e86565412543089e2d63fbe09aa4f4a89f755226e6d8f963fcc29ba\\\",\\\"dweb:/ipfs/QmYMLi5NkZn753VqaC49GoDtXboepSX6312KcMaD7dUM13\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/RecursivePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xb0fc885906891f166c06e865ddbd2aaa5d8f991446fbe0ea0b9537562049940f\\\",\\\"urls\\\":[\\\"bzz-raw://4925693b150e2f11f660cb2beb8d8639a28fb323033b47b0393f9f8a494532f6\\\",\\\"dweb:/ipfs/QmTK89YiKMp2BghPdeeYmDNxPveZpUXPuZ9FTP39TyiLBM\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50610abe806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063b0f0abe914610051578063cccfe35414610075578063f32192121461007d578063fc57d4df14610085575b600080fd5b6100596100bd565b604080516001600160a01b039092168252519081900360200190f35b6100596100d5565b6100596100ed565b6100ab6004803603602081101561009b57600080fd5b50356001600160a01b0316610105565b60408051918252519081900360200190f35b735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b733d5bc3c8d13dcb8bf317092d84783c2697ae925881565b733d9819210a31b4961b30ef54be2aed79b9c9cd3b81565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561014157600080fd5b505afa158015610155573d6000803e3d6000fd5b505050506040513d602081101561016b57600080fd5b505160408051635fe3b56760e01b815290519192506000916001600160a01b03841691635fe3b567916004808301926020929190829003018186803b1580156101b357600080fd5b505afa1580156101c7573d6000803e3d6000fd5b505050506040513d60208110156101dd57600080fd5b505190506001600160a01b038116733d9819210a31b4961b30ef54be2aed79b9c9cd3b14156105c55761034b826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561024257600080fd5b505afa158015610256573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561027f57600080fd5b810190808051604051939291908464010000000082111561029f57600080fd5b9083019060208201858111156102b457600080fd5b82516401000000008111828201881017156102ce57600080fd5b82525081516020918201929091019080838360005b838110156102fb5781810151838201526020016102e3565b50505050905090810190601f1680156103285780820380516001836020036101000a031916815260200191505b506040818101905260048152630c68aa8960e31b60208201529250610840915050565b156103bf57816001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561038957600080fd5b505afa15801561039d573d6000803e3d6000fd5b505050506040513d60208110156103b357600080fd5b5051925061083b915050565b6000735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561040e57600080fd5b505afa158015610422573d6000803e3d6000fd5b505050506040513d60a081101561043857600080fd5b5060200151905060008113610453576000935050505061083b565b6105bb610465826402540be400610928565b6105b5846001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b1580156104a157600080fd5b505afa1580156104b5573d6000803e3d6000fd5b505050506040513d60208110156104cb57600080fd5b50516040805163fc57d4df60e01b81526001600160a01b0389811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b15801561051757600080fd5b505afa15801561052b573d6000803e3d6000fd5b505050506040513d602081101561054157600080fd5b50516040805163182df0f560e01b815290516001600160a01b0389169163182df0f5916004808301926020929190829003018186803b15801561058357600080fd5b505afa158015610597573d6000803e3d6000fd5b505050506040513d60208110156105ad57600080fd5b505190610928565b90610988565b935050505061083b565b6001600160a01b038116733d5bc3c8d13dcb8bf317092d84783c2697ae9258141561066957610626826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561024257600080fd5b1561066457816001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561038957600080fd5b61070c565b816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106a257600080fd5b505afa1580156106b6573d6000803e3d6000fd5b505050506040513d60208110156106cc57600080fd5b50511561070c57816001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561038957600080fd5b610836670de0b6b3a76400006105b5836001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561075457600080fd5b505afa158015610768573d6000803e3d6000fd5b505050506040513d602081101561077e57600080fd5b50516040805163fc57d4df60e01b81526001600160a01b0388811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b1580156107ca57600080fd5b505afa1580156107de573d6000803e3d6000fd5b505050506040513d60208110156107f457600080fd5b50516040805163182df0f560e01b815290516001600160a01b0388169163182df0f5916004808301926020929190829003018186803b15801561058357600080fd5b925050505b919050565b6000816040516020018082805190602001908083835b602083106108755780518252601f199092019160209182019101610856565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106108e35780518252601f1990920191602091820191016108c4565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b60008261093757506000610922565b8282028284828161094457fe5b04146109815760405162461bcd60e51b8152600401808060200182810382526021815260200180610a686021913960400191505060405180910390fd5b9392505050565b600061098183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060008183610a515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a165781810151838201526020016109fe565b50505050905090810190601f168015610a435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610a5d57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220811c61669b838ecccd9e8422ad14cac5a29df6427d1cf51747b1efc2155bae3f64736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063b0f0abe914610051578063cccfe35414610075578063f32192121461007d578063fc57d4df14610085575b600080fd5b6100596100bd565b604080516001600160a01b039092168252519081900360200190f35b6100596100d5565b6100596100ed565b6100ab6004803603602081101561009b57600080fd5b50356001600160a01b0316610105565b60408051918252519081900360200190f35b735f4ec3df9cbd43714fe2740f5e3616155c5b841981565b733d5bc3c8d13dcb8bf317092d84783c2697ae925881565b733d9819210a31b4961b30ef54be2aed79b9c9cd3b81565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561014157600080fd5b505afa158015610155573d6000803e3d6000fd5b505050506040513d602081101561016b57600080fd5b505160408051635fe3b56760e01b815290519192506000916001600160a01b03841691635fe3b567916004808301926020929190829003018186803b1580156101b357600080fd5b505afa1580156101c7573d6000803e3d6000fd5b505050506040513d60208110156101dd57600080fd5b505190506001600160a01b038116733d9819210a31b4961b30ef54be2aed79b9c9cd3b14156105c55761034b826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561024257600080fd5b505afa158015610256573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561027f57600080fd5b810190808051604051939291908464010000000082111561029f57600080fd5b9083019060208201858111156102b457600080fd5b82516401000000008111828201881017156102ce57600080fd5b82525081516020918201929091019080838360005b838110156102fb5781810151838201526020016102e3565b50505050905090810190601f1680156103285780820380516001836020036101000a031916815260200191505b506040818101905260048152630c68aa8960e31b60208201529250610840915050565b156103bf57816001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561038957600080fd5b505afa15801561039d573d6000803e3d6000fd5b505050506040513d60208110156103b357600080fd5b5051925061083b915050565b6000735f4ec3df9cbd43714fe2740f5e3616155c5b84196001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b15801561040e57600080fd5b505afa158015610422573d6000803e3d6000fd5b505050506040513d60a081101561043857600080fd5b5060200151905060008113610453576000935050505061083b565b6105bb610465826402540be400610928565b6105b5846001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b1580156104a157600080fd5b505afa1580156104b5573d6000803e3d6000fd5b505050506040513d60208110156104cb57600080fd5b50516040805163fc57d4df60e01b81526001600160a01b0389811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b15801561051757600080fd5b505afa15801561052b573d6000803e3d6000fd5b505050506040513d602081101561054157600080fd5b50516040805163182df0f560e01b815290516001600160a01b0389169163182df0f5916004808301926020929190829003018186803b15801561058357600080fd5b505afa158015610597573d6000803e3d6000fd5b505050506040513d60208110156105ad57600080fd5b505190610928565b90610988565b935050505061083b565b6001600160a01b038116733d5bc3c8d13dcb8bf317092d84783c2697ae9258141561066957610626826001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561024257600080fd5b1561066457816001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561038957600080fd5b61070c565b816001600160a01b031663ac784ddc6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106a257600080fd5b505afa1580156106b6573d6000803e3d6000fd5b505050506040513d60208110156106cc57600080fd5b50511561070c57816001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561038957600080fd5b610836670de0b6b3a76400006105b5836001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561075457600080fd5b505afa158015610768573d6000803e3d6000fd5b505050506040513d602081101561077e57600080fd5b50516040805163fc57d4df60e01b81526001600160a01b0388811660048301529151919092169163fc57d4df916024808301926020929190829003018186803b1580156107ca57600080fd5b505afa1580156107de573d6000803e3d6000fd5b505050506040513d60208110156107f457600080fd5b50516040805163182df0f560e01b815290516001600160a01b0388169163182df0f5916004808301926020929190829003018186803b15801561058357600080fd5b925050505b919050565b6000816040516020018082805190602001908083835b602083106108755780518252601f199092019160209182019101610856565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106108e35780518252601f1990920191602091820191016108c4565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001201490505b92915050565b60008261093757506000610922565b8282028284828161094457fe5b04146109815760405162461bcd60e51b8152600401808060200182810382526021815260200180610a686021913960400191505060405180910390fd5b9392505050565b600061098183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060008183610a515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a165781810151838201526020016109fe565b50505050905090810190601f168015610a435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610a5d57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220811c61669b838ecccd9e8422ad14cac5a29df6427d1cf51747b1efc2155bae3f64736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"892:2501:40:-:0;;;;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"892:2501:40:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1372:124;;;:::i;:::-;;;;-1:-1:-1;;;;;1372:124:40;;;;;;;;;;;;;;1207:86;;;:::i;1051:89::-;;;:::i;1622:1524::-;;;;;;;;;;;;;;;;-1:-1:-1;1622:1524:40;-1:-1:-1;;;;;1622:1524:40;;:::i;:::-;;;;;;;;;;;;;;;;1372:124;1453:42;1372:124;:::o;1207:86::-;1251:42;1207:86;:::o;1051:89::-;1098:42;1051:89;:::o;1622:1524::-;1697:4;1757:17;1799:6;-1:-1:-1;;;;;1784:34:40;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1784:36:40;1900:24;;;-1:-1:-1;;;1900:24:40;;;;1784:36;;-1:-1:-1;1862:23:40;;-1:-1:-1;;;;;1900:22:40;;;;;:24;;;;;1784:36;;1900:24;;;;;;;:22;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1900:24:40;;-1:-1:-1;;;;;;1985:44:40;;1098:42;1985:44;1981:593;;;2105:43;2120:10;-1:-1:-1;;;;;2120:17:40;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2120:19:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2120:19:40;;;;;;;;;;-1:-1:-1;2120:19:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2120:19:40;2105:43;;;;;;;;-1:-1:-1;;;2105:43:40;;;;2120:19;-1:-1:-1;2105:14:40;;-1:-1:-1;;2105:43:40:i;:::-;2101:87;;;2157:10;-1:-1:-1;;;;;2157:29:40;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2157:31:40;;-1:-1:-1;2150:38:40;;-1:-1:-1;;2150:38:40;2101:87;2313:16;1453:42;-1:-1:-1;;;;;2339:34:40;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2339:36:40;;;;-1:-1:-1;2407:1:40;2394:14;;2390:28;;2417:1;2410:8;;;;;;;2390:28;2440:122;2533:28;2541:9;2556:4;2533:22;:28::i;:::-;2440:88;2476:11;-1:-1:-1;;;;;2476:18:40;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2476:20:40;:51;;;-1:-1:-1;;;2476:51:40;;-1:-1:-1;;;;;2476:51:40;;;;;;;;;:39;;;;;;;:51;;;;;:20;;:51;;;;;;;:39;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2476:51:40;2440:31;;;-1:-1:-1;;;2440:31:40;;;;-1:-1:-1;;;;;2440:29:40;;;;;:31;;;;;2476:51;;2440:31;;;;;;;:29;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2440:31:40;;:35;:88::i;:::-;:92;;:122::i;:::-;2433:129;;;;;;;1981:593;-1:-1:-1;;;;;2641:41:40;;1251:42;2641:41;2637:302;;;2725:43;2740:10;-1:-1:-1;;;;;2740:17:40;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2725:43;2721:87;;;2777:10;-1:-1:-1;;;;;2777:29:40;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2721:87;2637:302;;;2830:10;-1:-1:-1;;;;;2830:19:40;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2830:21:40;2826:113;;;2896:10;-1:-1:-1;;;;;2896:29:40;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2826:113;3040:98;3133:4;3040:88;3076:11;-1:-1:-1;;;;;3076:18:40;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3076:20:40;:51;;;-1:-1:-1;;;3076:51:40;;-1:-1:-1;;;;;3076:51:40;;;;;;;;;:39;;;;;;;:51;;;;;:20;;:51;;;;;;;:39;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3076:51:40;3040:31;;;-1:-1:-1;;;3040:31:40;;;;-1:-1:-1;;;;;3040:29:40;;;;;:31;;;;;3076:51;;3040:31;;;;;;;:29;:31;;;;;;;;;;:98;3033:105;;;;1622:1524;;;;:::o;3207:183::-;3288:4;3377:1;3359:21;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3359:21:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3349:32;;;;;;3341:1;3323:21;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3323:21:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3313:32;;;;;;:68;3305:77;;3207:183;;;;;:::o;2199:459:47:-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:47;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:1;2199:459;-1:-1:-1;;;2199:459:47:o;3120:130::-;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:47:o\",\n  \"source\": \"/**\\r\\n * COPYRIGHT © 2020 RARI CAPITAL, INC. ALL RIGHTS RESERVED.\\r\\n * No one is permitted to use the software for any purpose without the explicit permission of David Lucid of Rari Capital, Inc.\\r\\n * This license is liable to change at any time at the sole discretion of David Lucid of Rari Capital, Inc.\\r\\n */\\r\\n\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CToken.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\nimport \\\"../external/compound/Comptroller.sol\\\";\\r\\n\\r\\nimport \\\"../external/chainlink/AggregatorV3Interface.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title RecursivePriceOracle\\r\\n * @notice Returns prices from other cTokens (from Compound or from Fuse).\\r\\n * @dev Implements `PriceOracle`.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract RecursivePriceOracle is PriceOracle {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @dev Compound Comptroller address.\\r\\n     */\\r\\n    address public constant COMPOUND_COMPTROLLER = 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B;\\r\\n\\r\\n    /**\\r\\n     * @dev Cream Comptroller address.\\r\\n     */\\r\\n    address public constant CREAM_COMPTROLLER = 0x3d5BC3c8d13dcB8bF317092d84783c2697AE9258;\\r\\n\\r\\n    /**\\r\\n     * @dev Chainlink ETH/USD price feed contract.\\r\\n     */\\r\\n    AggregatorV3Interface public constant ETH_USD_PRICE_FEED = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);\\r\\n\\r\\n    /**\\r\\n     * @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        // Get cToken's underlying cToken\\r\\n        CToken underlying = CToken(CErc20(address(cToken)).underlying());\\r\\n\\r\\n        // Get Comptroller\\r\\n        Comptroller comptroller = Comptroller(underlying.comptroller());\\r\\n\\r\\n        // Check for Compound Comptroller\\r\\n        if (address(comptroller) == COMPOUND_COMPTROLLER) {\\r\\n            // If cETH, return cETH/ETH exchange rate\\r\\n            if (compareStrings(underlying.symbol(), \\\"cETH\\\")) return underlying.exchangeRateStored();\\r\\n\\r\\n            // Compound cErc20: cToken/token price * token/USD price / ETH/USD price = cToken/ETH price\\r\\n            (, int256 usdPerEth, , , ) = ETH_USD_PRICE_FEED.latestRoundData();\\r\\n            if (usdPerEth <= 0) return 0;\\r\\n            return underlying.exchangeRateStored().mul(comptroller.oracle().getUnderlyingPrice(underlying)).div(uint256(usdPerEth).mul(1e10));\\r\\n        }\\r\\n\\r\\n        // If cETH, return cETH/ETH exchange rate\\r\\n        if (address(comptroller) == CREAM_COMPTROLLER) {\\r\\n            // Cream\\r\\n            if (compareStrings(underlying.symbol(), \\\"cETH\\\")) return underlying.exchangeRateStored();\\r\\n        } else if (underlying.isCEther()) {\\r\\n            // Fuse\\r\\n            return underlying.exchangeRateStored();\\r\\n        }\\r\\n\\r\\n        // Fuse cTokens: cToken/token price * token/ETH price = cToken/ETH price\\r\\n        return underlying.exchangeRateStored().mul(comptroller.oracle().getUnderlyingPrice(underlying)).div(1e18);\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Compares two strings.\\r\\n     */\\r\\n    function compareStrings(string memory a, string memory b) internal pure returns (bool) {\\r\\n        return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b))));\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/RecursivePriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/RecursivePriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"RecursivePriceOracle\": [9883]\n    },\n    \"id\": 9884,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 9702,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"312:23:40\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 9703,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9884,\n        \"sourceUnit\": 10933,\n        \"src\": \"339:74:40\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 9704,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9884,\n        \"sourceUnit\": 6024,\n        \"src\": \"417:46:40\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 9705,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9884,\n        \"sourceUnit\": 5867,\n        \"src\": \"465:41:40\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 9706,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9884,\n        \"sourceUnit\": 5724,\n        \"src\": \"508:41:40\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/Comptroller.sol\",\n        \"file\": \"../external/compound/Comptroller.sol\",\n        \"id\": 9707,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9884,\n        \"sourceUnit\": 6012,\n        \"src\": \"551:46:40\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/chainlink/AggregatorV3Interface.sol\",\n        \"file\": \"../external/chainlink/AggregatorV3Interface.sol\",\n        \"id\": 9708,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9884,\n        \"sourceUnit\": 5701,\n        \"src\": \"601:57:40\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 9710,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"925:11:40\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 9711,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"925:11:40\"\n          }\n        ],\n        \"contractDependencies\": [6023],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 9709,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"662:228:40\",\n          \"text\": \" @title RecursivePriceOracle\\n @notice Returns prices from other cTokens (from Compound or from Fuse).\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 9883,\n        \"linearizedBaseContracts\": [9883, 6023],\n        \"name\": \"RecursivePriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 9714,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 9712,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 10932,\n              \"src\": \"950:19:40\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$10932\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"944:38:40\",\n            \"typeName\": {\n              \"id\": 9713,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"974:7:40\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 9715,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"990:55:40\",\n              \"text\": \" @dev Compound Comptroller address.\"\n            },\n            \"functionSelector\": \"f3219212\",\n            \"id\": 9718,\n            \"mutability\": \"constant\",\n            \"name\": \"COMPOUND_COMPTROLLER\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9883,\n            \"src\": \"1051:89:40\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 9716,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1051:7:40\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"307833643938313932313041333162343936316233304546353462453261654437394239633943643342\",\n              \"id\": 9717,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"1098:42:40\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              },\n              \"value\": \"0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 9719,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1149:52:40\",\n              \"text\": \" @dev Cream Comptroller address.\"\n            },\n            \"functionSelector\": \"cccfe354\",\n            \"id\": 9722,\n            \"mutability\": \"constant\",\n            \"name\": \"CREAM_COMPTROLLER\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9883,\n            \"src\": \"1207:86:40\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 9720,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1207:7:40\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"307833643542433363386431336463423862463331373039326438343738336332363937414539323538\",\n              \"id\": 9721,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"1251:42:40\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              },\n              \"value\": \"0x3d5BC3c8d13dcB8bF317092d84783c2697AE9258\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 9723,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1302:64:40\",\n              \"text\": \" @dev Chainlink ETH/USD price feed contract.\"\n            },\n            \"functionSelector\": \"b0f0abe9\",\n            \"id\": 9728,\n            \"mutability\": \"constant\",\n            \"name\": \"ETH_USD_PRICE_FEED\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 9883,\n            \"src\": \"1372:124:40\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n              \"typeString\": \"contract AggregatorV3Interface\"\n            },\n            \"typeName\": {\n              \"contractScope\": null,\n              \"id\": 9724,\n              \"name\": \"AggregatorV3Interface\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 5700,\n              \"src\": \"1372:21:40\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                \"typeString\": \"contract AggregatorV3Interface\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"arguments\": [\n                {\n                  \"argumentTypes\": null,\n                  \"hexValue\": \"307835663465433344663963626434333731344645323734306635453336313631353563356238343139\",\n                  \"id\": 9726,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"kind\": \"number\",\n                  \"lValueRequested\": false,\n                  \"nodeType\": \"Literal\",\n                  \"src\": \"1453:42:40\",\n                  \"subdenomination\": null,\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  },\n                  \"value\": \"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419\"\n                }\n              ],\n              \"expression\": {\n                \"argumentTypes\": [\n                  {\n                    \"typeIdentifier\": \"t_address_payable\",\n                    \"typeString\": \"address payable\"\n                  }\n                ],\n                \"id\": 9725,\n                \"name\": \"AggregatorV3Interface\",\n                \"nodeType\": \"Identifier\",\n                \"overloadedDeclarations\": [],\n                \"referencedDeclaration\": 5700,\n                \"src\": \"1431:21:40\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_type$_t_contract$_AggregatorV3Interface_$5700_$\",\n                  \"typeString\": \"type(contract AggregatorV3Interface)\"\n                }\n              },\n              \"id\": 9727,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"typeConversion\",\n              \"lValueRequested\": false,\n              \"names\": [],\n              \"nodeType\": \"FunctionCall\",\n              \"src\": \"1431:65:40\",\n              \"tryCall\": false,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                \"typeString\": \"contract AggregatorV3Interface\"\n              }\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 9853,\n              \"nodeType\": \"Block\",\n              \"src\": \"1703:1443:40\",\n              \"statements\": [\n                {\n                  \"assignments\": [9738],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9738,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9853,\n                      \"src\": \"1757:17:40\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                        \"typeString\": \"contract CToken\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 9737,\n                        \"name\": \"CToken\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 5866,\n                        \"src\": \"1757:6:40\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                          \"typeString\": \"contract CToken\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9749,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 9743,\n                                    \"name\": \"cToken\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 9731,\n                                    \"src\": \"1799:6:40\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  ],\n                                  \"id\": 9742,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"ElementaryTypeNameExpression\",\n                                  \"src\": \"1791:7:40\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_type$_t_address_$\",\n                                    \"typeString\": \"type(address)\"\n                                  },\n                                  \"typeName\": {\n                                    \"id\": 9741,\n                                    \"name\": \"address\",\n                                    \"nodeType\": \"ElementaryTypeName\",\n                                    \"src\": \"1791:7:40\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": null,\n                                      \"typeString\": null\n                                    }\n                                  }\n                                },\n                                \"id\": 9744,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"typeConversion\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"1791:15:40\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 9740,\n                              \"name\": \"CErc20\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 5723,\n                              \"src\": \"1784:6:40\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                                \"typeString\": \"type(contract CErc20)\"\n                              }\n                            },\n                            \"id\": 9745,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1784:23:40\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                              \"typeString\": \"contract CErc20\"\n                            }\n                          },\n                          \"id\": 9746,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"underlying\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5711,\n                          \"src\": \"1784:34:40\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                            \"typeString\": \"function () view external returns (address)\"\n                          }\n                        },\n                        \"id\": 9747,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1784:36:40\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 9739,\n                      \"name\": \"CToken\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 5866,\n                      \"src\": \"1777:6:40\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_CToken_$5866_$\",\n                        \"typeString\": \"type(contract CToken)\"\n                      }\n                    },\n                    \"id\": 9748,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1777:44:40\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1757:64:40\"\n                },\n                {\n                  \"assignments\": [9751],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9751,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"comptroller\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9853,\n                      \"src\": \"1862:23:40\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                        \"typeString\": \"contract Comptroller\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 9750,\n                        \"name\": \"Comptroller\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 6011,\n                        \"src\": \"1862:11:40\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                          \"typeString\": \"contract Comptroller\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9757,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9753,\n                            \"name\": \"underlying\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9738,\n                            \"src\": \"1900:10:40\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                              \"typeString\": \"contract CToken\"\n                            }\n                          },\n                          \"id\": 9754,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"comptroller\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5765,\n                          \"src\": \"1900:22:40\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                            \"typeString\": \"function () view external returns (address)\"\n                          }\n                        },\n                        \"id\": 9755,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1900:24:40\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 9752,\n                      \"name\": \"Comptroller\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 6011,\n                      \"src\": \"1888:11:40\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_Comptroller_$6011_$\",\n                        \"typeString\": \"type(contract Comptroller)\"\n                      }\n                    },\n                    \"id\": 9756,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1888:37:40\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                      \"typeString\": \"contract Comptroller\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1862:63:40\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 9763,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 9760,\n                          \"name\": \"comptroller\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9751,\n                          \"src\": \"1993:11:40\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                            \"typeString\": \"contract Comptroller\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                            \"typeString\": \"contract Comptroller\"\n                          }\n                        ],\n                        \"id\": 9759,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1985:7:40\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 9758,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1985:7:40\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 9761,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1985:20:40\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9762,\n                      \"name\": \"COMPOUND_COMPTROLLER\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9718,\n                      \"src\": \"2009:20:40\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1985:44:40\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 9809,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1981:593:40\",\n                  \"trueBody\": {\n                    \"id\": 9808,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2031:543:40\",\n                    \"statements\": [\n                      {\n                        \"condition\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [],\n                              \"expression\": {\n                                \"argumentTypes\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 9765,\n                                  \"name\": \"underlying\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 9738,\n                                  \"src\": \"2120:10:40\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                    \"typeString\": \"contract CToken\"\n                                  }\n                                },\n                                \"id\": 9766,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"symbol\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 5760,\n                                \"src\": \"2120:17:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_external_view$__$returns$_t_string_memory_ptr_$\",\n                                  \"typeString\": \"function () view external returns (string memory)\"\n                                }\n                              },\n                              \"id\": 9767,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2120:19:40\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_string_memory_ptr\",\n                                \"typeString\": \"string memory\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"63455448\",\n                              \"id\": 9768,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"string\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2141:6:40\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_stringliteral_b3c46c78043b5ff6963757142af6c297cddb5a0d3d823357472228eb35c8e890\",\n                                \"typeString\": \"literal_string \\\"cETH\\\"\"\n                              },\n                              \"value\": \"cETH\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_string_memory_ptr\",\n                                \"typeString\": \"string memory\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_stringliteral_b3c46c78043b5ff6963757142af6c297cddb5a0d3d823357472228eb35c8e890\",\n                                \"typeString\": \"literal_string \\\"cETH\\\"\"\n                              }\n                            ],\n                            \"id\": 9764,\n                            \"name\": \"compareStrings\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9882,\n                            \"src\": \"2105:14:40\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$\",\n                              \"typeString\": \"function (string memory,string memory) pure returns (bool)\"\n                            }\n                          },\n                          \"id\": 9769,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2105:43:40\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"falseBody\": null,\n                        \"id\": 9774,\n                        \"nodeType\": \"IfStatement\",\n                        \"src\": \"2101:87:40\",\n                        \"trueBody\": {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [],\n                            \"expression\": {\n                              \"argumentTypes\": [],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 9770,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9738,\n                                \"src\": \"2157:10:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              },\n                              \"id\": 9771,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"exchangeRateStored\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 5846,\n                              \"src\": \"2157:29:40\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                                \"typeString\": \"function () view external returns (uint256)\"\n                              }\n                            },\n                            \"id\": 9772,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"2157:31:40\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"functionReturnParameters\": 9736,\n                          \"id\": 9773,\n                          \"nodeType\": \"Return\",\n                          \"src\": \"2150:38:40\"\n                        }\n                      },\n                      {\n                        \"assignments\": [null, 9776, null, null, null],\n                        \"declarations\": [\n                          null,\n                          {\n                            \"constant\": false,\n                            \"id\": 9776,\n                            \"mutability\": \"mutable\",\n                            \"name\": \"usdPerEth\",\n                            \"nodeType\": \"VariableDeclaration\",\n                            \"overrides\": null,\n                            \"scope\": 9808,\n                            \"src\": \"2313:16:40\",\n                            \"stateVariable\": false,\n                            \"storageLocation\": \"default\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_int256\",\n                              \"typeString\": \"int256\"\n                            },\n                            \"typeName\": {\n                              \"id\": 9775,\n                              \"name\": \"int256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"2313:6:40\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_int256\",\n                                \"typeString\": \"int256\"\n                              }\n                            },\n                            \"value\": null,\n                            \"visibility\": \"internal\"\n                          },\n                          null,\n                          null,\n                          null\n                        ],\n                        \"id\": 9780,\n                        \"initialValue\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 9777,\n                              \"name\": \"ETH_USD_PRICE_FEED\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9728,\n                              \"src\": \"2339:18:40\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_AggregatorV3Interface_$5700\",\n                                \"typeString\": \"contract AggregatorV3Interface\"\n                              }\n                            },\n                            \"id\": 9778,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"latestRoundData\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 5699,\n                            \"src\": \"2339:34:40\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                              \"typeString\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                            }\n                          },\n                          \"id\": 9779,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2339:36:40\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_tuple$_t_uint80_$_t_int256_$_t_uint256_$_t_uint256_$_t_uint80_$\",\n                            \"typeString\": \"tuple(uint80,int256,uint256,uint256,uint80)\"\n                          }\n                        },\n                        \"nodeType\": \"VariableDeclarationStatement\",\n                        \"src\": \"2310:65:40\"\n                      },\n                      {\n                        \"condition\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_int256\",\n                            \"typeString\": \"int256\"\n                          },\n                          \"id\": 9783,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 9781,\n                            \"name\": \"usdPerEth\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9776,\n                            \"src\": \"2394:9:40\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_int256\",\n                              \"typeString\": \"int256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"<=\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 9782,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"2407:1:40\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          },\n                          \"src\": \"2394:14:40\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"falseBody\": null,\n                        \"id\": 9786,\n                        \"nodeType\": \"IfStatement\",\n                        \"src\": \"2390:28:40\",\n                        \"trueBody\": {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"30\",\n                            \"id\": 9784,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"2417:1:40\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_0_by_1\",\n                              \"typeString\": \"int_const 0\"\n                            },\n                            \"value\": \"0\"\n                          },\n                          \"functionReturnParameters\": 9736,\n                          \"id\": 9785,\n                          \"nodeType\": \"Return\",\n                          \"src\": \"2410:8:40\"\n                        }\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"31653130\",\n                                  \"id\": 9804,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"2556:4:40\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_10000000000_by_1\",\n                                    \"typeString\": \"int_const 10000000000\"\n                                  },\n                                  \"value\": \"1e10\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_rational_10000000000_by_1\",\n                                    \"typeString\": \"int_const 10000000000\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"id\": 9801,\n                                      \"name\": \"usdPerEth\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 9776,\n                                      \"src\": \"2541:9:40\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_int256\",\n                                        \"typeString\": \"int256\"\n                                      }\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_int256\",\n                                        \"typeString\": \"int256\"\n                                      }\n                                    ],\n                                    \"id\": 9800,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": true,\n                                    \"lValueRequested\": false,\n                                    \"nodeType\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"2533:7:40\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                      \"typeString\": \"type(uint256)\"\n                                    },\n                                    \"typeName\": {\n                                      \"id\": 9799,\n                                      \"name\": \"uint256\",\n                                      \"nodeType\": \"ElementaryTypeName\",\n                                      \"src\": \"2533:7:40\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": null,\n                                        \"typeString\": null\n                                      }\n                                    }\n                                  },\n                                  \"id\": 9802,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"2533:18:40\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"id\": 9803,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"mul\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 10845,\n                                \"src\": \"2533:22:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                  \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                }\n                              },\n                              \"id\": 9805,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2533:28:40\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"id\": 9795,\n                                      \"name\": \"underlying\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 9738,\n                                      \"src\": \"2516:10:40\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                        \"typeString\": \"contract CToken\"\n                                      }\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                        \"typeString\": \"contract CToken\"\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [],\n                                      \"expression\": {\n                                        \"argumentTypes\": [],\n                                        \"expression\": {\n                                          \"argumentTypes\": null,\n                                          \"id\": 9791,\n                                          \"name\": \"comptroller\",\n                                          \"nodeType\": \"Identifier\",\n                                          \"overloadedDeclarations\": [],\n                                          \"referencedDeclaration\": 9751,\n                                          \"src\": \"2476:11:40\",\n                                          \"typeDescriptions\": {\n                                            \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                                            \"typeString\": \"contract Comptroller\"\n                                          }\n                                        },\n                                        \"id\": 9792,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": false,\n                                        \"lValueRequested\": false,\n                                        \"memberName\": \"oracle\",\n                                        \"nodeType\": \"MemberAccess\",\n                                        \"referencedDeclaration\": 5892,\n                                        \"src\": \"2476:18:40\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_function_external_view$__$returns$_t_contract$_PriceOracle_$6023_$\",\n                                          \"typeString\": \"function () view external returns (contract PriceOracle)\"\n                                        }\n                                      },\n                                      \"id\": 9793,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"kind\": \"functionCall\",\n                                      \"lValueRequested\": false,\n                                      \"names\": [],\n                                      \"nodeType\": \"FunctionCall\",\n                                      \"src\": \"2476:20:40\",\n                                      \"tryCall\": false,\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                                        \"typeString\": \"contract PriceOracle\"\n                                      }\n                                    },\n                                    \"id\": 9794,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"memberName\": \"getUnderlyingPrice\",\n                                    \"nodeType\": \"MemberAccess\",\n                                    \"referencedDeclaration\": 6022,\n                                    \"src\": \"2476:39:40\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_function_external_view$_t_contract$_CToken_$5866_$returns$_t_uint256_$\",\n                                      \"typeString\": \"function (contract CToken) view external returns (uint256)\"\n                                    }\n                                  },\n                                  \"id\": 9796,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"functionCall\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"2476:51:40\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [],\n                                  \"expression\": {\n                                    \"argumentTypes\": [],\n                                    \"expression\": {\n                                      \"argumentTypes\": null,\n                                      \"id\": 9787,\n                                      \"name\": \"underlying\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 9738,\n                                      \"src\": \"2440:10:40\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                        \"typeString\": \"contract CToken\"\n                                      }\n                                    },\n                                    \"id\": 9788,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"lValueRequested\": false,\n                                    \"memberName\": \"exchangeRateStored\",\n                                    \"nodeType\": \"MemberAccess\",\n                                    \"referencedDeclaration\": 5846,\n                                    \"src\": \"2440:29:40\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                                      \"typeString\": \"function () view external returns (uint256)\"\n                                    }\n                                  },\n                                  \"id\": 9789,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"functionCall\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"2440:31:40\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  }\n                                },\n                                \"id\": 9790,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"mul\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 10845,\n                                \"src\": \"2440:35:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                  \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                }\n                              },\n                              \"id\": 9797,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2440:88:40\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"id\": 9798,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"div\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 10862,\n                            \"src\": \"2440:92:40\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                              \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                            }\n                          },\n                          \"id\": 9806,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2440:122:40\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"functionReturnParameters\": 9736,\n                        \"id\": 9807,\n                        \"nodeType\": \"Return\",\n                        \"src\": \"2433:129:40\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 9815,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 9812,\n                          \"name\": \"comptroller\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9751,\n                          \"src\": \"2649:11:40\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                            \"typeString\": \"contract Comptroller\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                            \"typeString\": \"contract Comptroller\"\n                          }\n                        ],\n                        \"id\": 9811,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"2641:7:40\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 9810,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2641:7:40\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 9813,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2641:20:40\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9814,\n                      \"name\": \"CREAM_COMPTROLLER\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9722,\n                      \"src\": \"2665:17:40\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"2641:41:40\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": {\n                    \"condition\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [],\n                      \"expression\": {\n                        \"argumentTypes\": [],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 9828,\n                          \"name\": \"underlying\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 9738,\n                          \"src\": \"2830:10:40\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                            \"typeString\": \"contract CToken\"\n                          }\n                        },\n                        \"id\": 9829,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"isCEther\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 5805,\n                        \"src\": \"2830:19:40\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$__$returns$_t_bool_$\",\n                          \"typeString\": \"function () view external returns (bool)\"\n                        }\n                      },\n                      \"id\": 9830,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2830:21:40\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"falseBody\": null,\n                    \"id\": 9836,\n                    \"nodeType\": \"IfStatement\",\n                    \"src\": \"2826:113:40\",\n                    \"trueBody\": {\n                      \"id\": 9835,\n                      \"nodeType\": \"Block\",\n                      \"src\": \"2853:86:40\",\n                      \"statements\": [\n                        {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [],\n                            \"expression\": {\n                              \"argumentTypes\": [],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 9831,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9738,\n                                \"src\": \"2896:10:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              },\n                              \"id\": 9832,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"exchangeRateStored\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 5846,\n                              \"src\": \"2896:29:40\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                                \"typeString\": \"function () view external returns (uint256)\"\n                              }\n                            },\n                            \"id\": 9833,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"2896:31:40\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"functionReturnParameters\": 9736,\n                          \"id\": 9834,\n                          \"nodeType\": \"Return\",\n                          \"src\": \"2889:38:40\"\n                        }\n                      ]\n                    }\n                  },\n                  \"id\": 9837,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2637:302:40\",\n                  \"trueBody\": {\n                    \"id\": 9827,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"2684:136:40\",\n                    \"statements\": [\n                      {\n                        \"condition\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [],\n                              \"expression\": {\n                                \"argumentTypes\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 9817,\n                                  \"name\": \"underlying\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 9738,\n                                  \"src\": \"2740:10:40\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                    \"typeString\": \"contract CToken\"\n                                  }\n                                },\n                                \"id\": 9818,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"symbol\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 5760,\n                                \"src\": \"2740:17:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_external_view$__$returns$_t_string_memory_ptr_$\",\n                                  \"typeString\": \"function () view external returns (string memory)\"\n                                }\n                              },\n                              \"id\": 9819,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2740:19:40\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_string_memory_ptr\",\n                                \"typeString\": \"string memory\"\n                              }\n                            },\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"63455448\",\n                              \"id\": 9820,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"string\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"2761:6:40\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_stringliteral_b3c46c78043b5ff6963757142af6c297cddb5a0d3d823357472228eb35c8e890\",\n                                \"typeString\": \"literal_string \\\"cETH\\\"\"\n                              },\n                              \"value\": \"cETH\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_string_memory_ptr\",\n                                \"typeString\": \"string memory\"\n                              },\n                              {\n                                \"typeIdentifier\": \"t_stringliteral_b3c46c78043b5ff6963757142af6c297cddb5a0d3d823357472228eb35c8e890\",\n                                \"typeString\": \"literal_string \\\"cETH\\\"\"\n                              }\n                            ],\n                            \"id\": 9816,\n                            \"name\": \"compareStrings\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 9882,\n                            \"src\": \"2725:14:40\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bool_$\",\n                              \"typeString\": \"function (string memory,string memory) pure returns (bool)\"\n                            }\n                          },\n                          \"id\": 9821,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2725:43:40\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"falseBody\": null,\n                        \"id\": 9826,\n                        \"nodeType\": \"IfStatement\",\n                        \"src\": \"2721:87:40\",\n                        \"trueBody\": {\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [],\n                            \"expression\": {\n                              \"argumentTypes\": [],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 9822,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9738,\n                                \"src\": \"2777:10:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              },\n                              \"id\": 9823,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"exchangeRateStored\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 5846,\n                              \"src\": \"2777:29:40\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                                \"typeString\": \"function () view external returns (uint256)\"\n                              }\n                            },\n                            \"id\": 9824,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"2777:31:40\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"functionReturnParameters\": 9736,\n                          \"id\": 9825,\n                          \"nodeType\": \"Return\",\n                          \"src\": \"2770:38:40\"\n                        }\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"31653138\",\n                        \"id\": 9850,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"3133:4:40\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                          \"typeString\": \"int_const 1000000000000000000\"\n                        },\n                        \"value\": \"1e18\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                          \"typeString\": \"int_const 1000000000000000000\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9846,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9738,\n                                \"src\": \"3116:10:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"arguments\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": [],\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 9842,\n                                    \"name\": \"comptroller\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 9751,\n                                    \"src\": \"3076:11:40\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                                      \"typeString\": \"contract Comptroller\"\n                                    }\n                                  },\n                                  \"id\": 9843,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"oracle\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": 5892,\n                                  \"src\": \"3076:18:40\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_external_view$__$returns$_t_contract$_PriceOracle_$6023_$\",\n                                    \"typeString\": \"function () view external returns (contract PriceOracle)\"\n                                  }\n                                },\n                                \"id\": 9844,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"3076:20:40\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                                  \"typeString\": \"contract PriceOracle\"\n                                }\n                              },\n                              \"id\": 9845,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"getUnderlyingPrice\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 6022,\n                              \"src\": \"3076:39:40\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$_t_contract$_CToken_$5866_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (contract CToken) view external returns (uint256)\"\n                              }\n                            },\n                            \"id\": 9847,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3076:51:40\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [],\n                            \"expression\": {\n                              \"argumentTypes\": [],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 9838,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9738,\n                                \"src\": \"3040:10:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              },\n                              \"id\": 9839,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"exchangeRateStored\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 5846,\n                              \"src\": \"3040:29:40\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                                \"typeString\": \"function () view external returns (uint256)\"\n                              }\n                            },\n                            \"id\": 9840,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3040:31:40\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 9841,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"3040:35:40\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 9848,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3040:88:40\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 9849,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"3040:92:40\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9851,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3040:98:40\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 9736,\n                  \"id\": 9852,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"3033:105:40\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9729,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1505:111:40\",\n              \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 9854,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 9733,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"1674:8:40\"\n            },\n            \"parameters\": {\n              \"id\": 9732,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9731,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9854,\n                  \"src\": \"1650:13:40\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 9730,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"1650:6:40\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1649:15:40\"\n            },\n            \"returnParameters\": {\n              \"id\": 9736,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9735,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9854,\n                  \"src\": \"1697:4:40\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9734,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1697:4:40\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1696:6:40\"\n            },\n            \"scope\": 9883,\n            \"src\": \"1622:1524:40\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 9881,\n              \"nodeType\": \"Block\",\n              \"src\": \"3294:96:40\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"components\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        },\n                        \"id\": 9878,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"components\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"id\": 9867,\n                                      \"name\": \"a\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 9857,\n                                      \"src\": \"3341:1:40\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                                        \"typeString\": \"string memory\"\n                                      }\n                                    }\n                                  ],\n                                  \"id\": 9868,\n                                  \"isConstant\": false,\n                                  \"isInlineArray\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"TupleExpression\",\n                                  \"src\": \"3340:3:40\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                                    \"typeString\": \"string memory\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                                    \"typeString\": \"string memory\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 9865,\n                                  \"name\": \"abi\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": -1,\n                                  \"src\": \"3323:3:40\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_magic_abi\",\n                                    \"typeString\": \"abi\"\n                                  }\n                                },\n                                \"id\": 9866,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"encodePacked\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": null,\n                                \"src\": \"3323:16:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\n                                  \"typeString\": \"function () pure returns (bytes memory)\"\n                                }\n                              },\n                              \"id\": 9869,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"3323:21:40\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                                \"typeString\": \"bytes memory\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                                \"typeString\": \"bytes memory\"\n                              }\n                            ],\n                            \"id\": 9864,\n                            \"name\": \"keccak256\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -8,\n                            \"src\": \"3313:9:40\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n                              \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n                            }\n                          },\n                          \"id\": 9870,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3313:32:40\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bytes32\",\n                            \"typeString\": \"bytes32\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"==\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"components\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"id\": 9874,\n                                      \"name\": \"b\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 9859,\n                                      \"src\": \"3377:1:40\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_string_memory_ptr\",\n                                        \"typeString\": \"string memory\"\n                                      }\n                                    }\n                                  ],\n                                  \"id\": 9875,\n                                  \"isConstant\": false,\n                                  \"isInlineArray\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"TupleExpression\",\n                                  \"src\": \"3376:3:40\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                                    \"typeString\": \"string memory\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                                    \"typeString\": \"string memory\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"id\": 9872,\n                                  \"name\": \"abi\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": -1,\n                                  \"src\": \"3359:3:40\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_magic_abi\",\n                                    \"typeString\": \"abi\"\n                                  }\n                                },\n                                \"id\": 9873,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"encodePacked\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": null,\n                                \"src\": \"3359:16:40\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\n                                  \"typeString\": \"function () pure returns (bytes memory)\"\n                                }\n                              },\n                              \"id\": 9876,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"3359:21:40\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                                \"typeString\": \"bytes memory\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                                \"typeString\": \"bytes memory\"\n                              }\n                            ],\n                            \"id\": 9871,\n                            \"name\": \"keccak256\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -8,\n                            \"src\": \"3349:9:40\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n                              \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n                            }\n                          },\n                          \"id\": 9877,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3349:32:40\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bytes32\",\n                            \"typeString\": \"bytes32\"\n                          }\n                        },\n                        \"src\": \"3313:68:40\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      }\n                    ],\n                    \"id\": 9879,\n                    \"isConstant\": false,\n                    \"isInlineArray\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"TupleExpression\",\n                    \"src\": \"3312:70:40\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"functionReturnParameters\": 9863,\n                  \"id\": 9880,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"3305:77:40\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9855,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"3154:47:40\",\n              \"text\": \" @dev Compares two strings.\"\n            },\n            \"id\": 9882,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"compareStrings\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9860,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9857,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"a\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9882,\n                  \"src\": \"3231:15:40\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9856,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3231:6:40\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 9859,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"b\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9882,\n                  \"src\": \"3248:15:40\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"memory\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_string_memory_ptr\",\n                    \"typeString\": \"string\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9858,\n                    \"name\": \"string\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3248:6:40\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_string_storage_ptr\",\n                      \"typeString\": \"string\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3230:34:40\"\n            },\n            \"returnParameters\": {\n              \"id\": 9863,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9862,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9882,\n                  \"src\": \"3288:4:40\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_bool\",\n                    \"typeString\": \"bool\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9861,\n                    \"name\": \"bool\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"3288:4:40\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"3287:6:40\"\n            },\n            \"scope\": 9883,\n            \"src\": \"3207:183:40\",\n            \"stateMutability\": \"pure\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 9884,\n        \"src\": \"892:2501:40\"\n      }\n    ],\n    \"src\": \"312:3083:40\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/RecursivePriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"RecursivePriceOracle\": [9883]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 9702,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"312:23:40\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 10933,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 9884,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9703,\n        \"name\": \"ImportDirective\",\n        \"src\": \"339:74:40\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 9884,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9704,\n        \"name\": \"ImportDirective\",\n        \"src\": \"417:46:40\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5867,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n          \"file\": \"../external/compound/CToken.sol\",\n          \"scope\": 9884,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9705,\n        \"name\": \"ImportDirective\",\n        \"src\": \"465:41:40\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 9884,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9706,\n        \"name\": \"ImportDirective\",\n        \"src\": \"508:41:40\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6012,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/Comptroller.sol\",\n          \"file\": \"../external/compound/Comptroller.sol\",\n          \"scope\": 9884,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9707,\n        \"name\": \"ImportDirective\",\n        \"src\": \"551:46:40\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5701,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/chainlink/AggregatorV3Interface.sol\",\n          \"file\": \"../external/chainlink/AggregatorV3Interface.sol\",\n          \"scope\": 9884,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9708,\n        \"name\": \"ImportDirective\",\n        \"src\": \"601:57:40\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [9883, 6023],\n          \"name\": \"RecursivePriceOracle\",\n          \"scope\": 9884\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title RecursivePriceOracle\\n @notice Returns prices from other cTokens (from Compound or from Fuse).\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n            },\n            \"id\": 9709,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"662:228:40\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 9710,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"925:11:40\"\n              }\n            ],\n            \"id\": 9711,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"925:11:40\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 10932,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 9712,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"950:19:40\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 9713,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"974:7:40\"\n              }\n            ],\n            \"id\": 9714,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"944:38:40\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"f3219212\",\n              \"mutability\": \"constant\",\n              \"name\": \"COMPOUND_COMPTROLLER\",\n              \"overrides\": null,\n              \"scope\": 9883,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"address\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"name\": \"address\",\n                  \"stateMutability\": \"nonpayable\",\n                  \"type\": \"address\"\n                },\n                \"id\": 9716,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"1051:7:40\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"hexvalue\": \"307833643938313932313041333162343936316233304546353462453261654437394239633943643342\",\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"lValueRequested\": false,\n                  \"subdenomination\": null,\n                  \"token\": \"number\",\n                  \"type\": \"address payable\",\n                  \"value\": \"0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B\"\n                },\n                \"id\": 9717,\n                \"name\": \"Literal\",\n                \"src\": \"1098:42:40\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Compound Comptroller address.\"\n                },\n                \"id\": 9715,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"990:55:40\"\n              }\n            ],\n            \"id\": 9718,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1051:89:40\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"cccfe354\",\n              \"mutability\": \"constant\",\n              \"name\": \"CREAM_COMPTROLLER\",\n              \"overrides\": null,\n              \"scope\": 9883,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"address\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"name\": \"address\",\n                  \"stateMutability\": \"nonpayable\",\n                  \"type\": \"address\"\n                },\n                \"id\": 9720,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"1207:7:40\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"hexvalue\": \"307833643542433363386431336463423862463331373039326438343738336332363937414539323538\",\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"lValueRequested\": false,\n                  \"subdenomination\": null,\n                  \"token\": \"number\",\n                  \"type\": \"address payable\",\n                  \"value\": \"0x3d5BC3c8d13dcB8bF317092d84783c2697AE9258\"\n                },\n                \"id\": 9721,\n                \"name\": \"Literal\",\n                \"src\": \"1251:42:40\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Cream Comptroller address.\"\n                },\n                \"id\": 9719,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1149:52:40\"\n              }\n            ],\n            \"id\": 9722,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1207:86:40\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"functionSelector\": \"b0f0abe9\",\n              \"mutability\": \"constant\",\n              \"name\": \"ETH_USD_PRICE_FEED\",\n              \"overrides\": null,\n              \"scope\": 9883,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"contract AggregatorV3Interface\",\n              \"visibility\": \"public\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"AggregatorV3Interface\",\n                  \"referencedDeclaration\": 5700,\n                  \"type\": \"contract AggregatorV3Interface\"\n                },\n                \"id\": 9724,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1372:21:40\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"isStructConstructorCall\": false,\n                  \"lValueRequested\": false,\n                  \"names\": [null],\n                  \"tryCall\": false,\n                  \"type\": \"contract AggregatorV3Interface\",\n                  \"type_conversion\": true\n                },\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        }\n                      ],\n                      \"overloadedDeclarations\": [null],\n                      \"referencedDeclaration\": 5700,\n                      \"type\": \"type(contract AggregatorV3Interface)\",\n                      \"value\": \"AggregatorV3Interface\"\n                    },\n                    \"id\": 9725,\n                    \"name\": \"Identifier\",\n                    \"src\": \"1431:21:40\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"argumentTypes\": null,\n                      \"hexvalue\": \"307835663465433344663963626434333731344645323734306635453336313631353563356238343139\",\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"subdenomination\": null,\n                      \"token\": \"number\",\n                      \"type\": \"address payable\",\n                      \"value\": \"0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419\"\n                    },\n                    \"id\": 9726,\n                    \"name\": \"Literal\",\n                    \"src\": \"1453:42:40\"\n                  }\n                ],\n                \"id\": 9727,\n                \"name\": \"FunctionCall\",\n                \"src\": \"1431:65:40\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Chainlink ETH/USD price feed contract.\"\n                },\n                \"id\": 9723,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1302:64:40\"\n              }\n            ],\n            \"id\": 9728,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1372:124:40\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 9883,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n                },\n                \"id\": 9729,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1505:111:40\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 9733,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"1674:8:40\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 9854,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 9730,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"1650:6:40\"\n                      }\n                    ],\n                    \"id\": 9731,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1650:13:40\"\n                  }\n                ],\n                \"id\": 9732,\n                \"name\": \"ParameterList\",\n                \"src\": \"1649:15:40\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9854,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9734,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1697:4:40\"\n                      }\n                    ],\n                    \"id\": 9735,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1697:4:40\"\n                  }\n                ],\n                \"id\": 9736,\n                \"name\": \"ParameterList\",\n                \"src\": \"1696:6:40\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9738]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlying\",\n                          \"overrides\": null,\n                          \"scope\": 9853,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"contract CToken\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"contractScope\": null,\n                              \"name\": \"CToken\",\n                              \"referencedDeclaration\": 5866,\n                              \"type\": \"contract CToken\"\n                            },\n                            \"id\": 9737,\n                            \"name\": \"UserDefinedTypeName\",\n                            \"src\": \"1757:6:40\"\n                          }\n                        ],\n                        \"id\": 9738,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1757:17:40\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"contract CToken\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 5866,\n                              \"type\": \"type(contract CToken)\",\n                              \"value\": \"CToken\"\n                            },\n                            \"id\": 9739,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1777:6:40\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"underlying\",\n                                  \"referencedDeclaration\": 5711,\n                                  \"type\": \"function () view external returns (address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract CErc20\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 5723,\n                                          \"type\": \"type(contract CErc20)\",\n                                          \"value\": \"CErc20\"\n                                        },\n                                        \"id\": 9740,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1784:6:40\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"address\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                                  \"typeString\": \"contract CToken\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"type\": \"type(address)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"name\": \"address\",\n                                                  \"type\": null\n                                                },\n                                                \"id\": 9741,\n                                                \"name\": \"ElementaryTypeName\",\n                                                \"src\": \"1791:7:40\"\n                                              }\n                                            ],\n                                            \"id\": 9742,\n                                            \"name\": \"ElementaryTypeNameExpression\",\n                                            \"src\": \"1791:7:40\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9731,\n                                              \"type\": \"contract CToken\",\n                                              \"value\": \"cToken\"\n                                            },\n                                            \"id\": 9743,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1799:6:40\"\n                                          }\n                                        ],\n                                        \"id\": 9744,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1791:15:40\"\n                                      }\n                                    ],\n                                    \"id\": 9745,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1784:23:40\"\n                                  }\n                                ],\n                                \"id\": 9746,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1784:34:40\"\n                              }\n                            ],\n                            \"id\": 9747,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1784:36:40\"\n                          }\n                        ],\n                        \"id\": 9748,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1777:44:40\"\n                      }\n                    ],\n                    \"id\": 9749,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1757:64:40\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9751]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"comptroller\",\n                          \"overrides\": null,\n                          \"scope\": 9853,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"contract Comptroller\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"contractScope\": null,\n                              \"name\": \"Comptroller\",\n                              \"referencedDeclaration\": 6011,\n                              \"type\": \"contract Comptroller\"\n                            },\n                            \"id\": 9750,\n                            \"name\": \"UserDefinedTypeName\",\n                            \"src\": \"1862:11:40\"\n                          }\n                        ],\n                        \"id\": 9751,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1862:23:40\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"contract Comptroller\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 6011,\n                              \"type\": \"type(contract Comptroller)\",\n                              \"value\": \"Comptroller\"\n                            },\n                            \"id\": 9752,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1888:11:40\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"comptroller\",\n                                  \"referencedDeclaration\": 5765,\n                                  \"type\": \"function () view external returns (address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9738,\n                                      \"type\": \"contract CToken\",\n                                      \"value\": \"underlying\"\n                                    },\n                                    \"id\": 9753,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"1900:10:40\"\n                                  }\n                                ],\n                                \"id\": 9754,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1900:22:40\"\n                              }\n                            ],\n                            \"id\": 9755,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1900:24:40\"\n                          }\n                        ],\n                        \"id\": 9756,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1888:37:40\"\n                      }\n                    ],\n                    \"id\": 9757,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1862:63:40\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"==\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                                      \"typeString\": \"contract Comptroller\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"type(address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"address\",\n                                      \"type\": null\n                                    },\n                                    \"id\": 9758,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"1985:7:40\"\n                                  }\n                                ],\n                                \"id\": 9759,\n                                \"name\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"1985:7:40\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9751,\n                                  \"type\": \"contract Comptroller\",\n                                  \"value\": \"comptroller\"\n                                },\n                                \"id\": 9760,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1993:11:40\"\n                              }\n                            ],\n                            \"id\": 9761,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1985:20:40\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9718,\n                              \"type\": \"address\",\n                              \"value\": \"COMPOUND_COMPTROLLER\"\n                            },\n                            \"id\": 9762,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2009:20:40\"\n                          }\n                        ],\n                        \"id\": 9763,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"1985:44:40\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"falseBody\": null\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"bool\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                                          \"typeString\": \"string memory\"\n                                        },\n                                        {\n                                          \"typeIdentifier\": \"t_stringliteral_b3c46c78043b5ff6963757142af6c297cddb5a0d3d823357472228eb35c8e890\",\n                                          \"typeString\": \"literal_string \\\"cETH\\\"\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9882,\n                                      \"type\": \"function (string memory,string memory) pure returns (bool)\",\n                                      \"value\": \"compareStrings\"\n                                    },\n                                    \"id\": 9764,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2105:14:40\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"string memory\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"symbol\",\n                                          \"referencedDeclaration\": 5760,\n                                          \"type\": \"function () view external returns (string memory)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9738,\n                                              \"type\": \"contract CToken\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 9765,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2120:10:40\"\n                                          }\n                                        ],\n                                        \"id\": 9766,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"2120:17:40\"\n                                      }\n                                    ],\n                                    \"id\": 9767,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2120:19:40\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"63455448\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"string\",\n                                      \"type\": \"literal_string \\\"cETH\\\"\",\n                                      \"value\": \"cETH\"\n                                    },\n                                    \"id\": 9768,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"2141:6:40\"\n                                  }\n                                ],\n                                \"id\": 9769,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2105:43:40\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"functionReturnParameters\": 9736\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"exchangeRateStored\",\n                                          \"referencedDeclaration\": 5846,\n                                          \"type\": \"function () view external returns (uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9738,\n                                              \"type\": \"contract CToken\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 9770,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2157:10:40\"\n                                          }\n                                        ],\n                                        \"id\": 9771,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"2157:29:40\"\n                                      }\n                                    ],\n                                    \"id\": 9772,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2157:31:40\"\n                                  }\n                                ],\n                                \"id\": 9773,\n                                \"name\": \"Return\",\n                                \"src\": \"2150:38:40\"\n                              }\n                            ],\n                            \"id\": 9774,\n                            \"name\": \"IfStatement\",\n                            \"src\": \"2101:87:40\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"assignments\": [null, 9776, null, null, null]\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"constant\": false,\n                                  \"mutability\": \"mutable\",\n                                  \"name\": \"usdPerEth\",\n                                  \"overrides\": null,\n                                  \"scope\": 9808,\n                                  \"stateVariable\": false,\n                                  \"storageLocation\": \"default\",\n                                  \"type\": \"int256\",\n                                  \"value\": null,\n                                  \"visibility\": \"internal\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"int256\",\n                                      \"type\": \"int256\"\n                                    },\n                                    \"id\": 9775,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"2313:6:40\"\n                                  }\n                                ],\n                                \"id\": 9776,\n                                \"name\": \"VariableDeclaration\",\n                                \"src\": \"2313:16:40\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"tuple(uint80,int256,uint256,uint256,uint80)\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"latestRoundData\",\n                                      \"referencedDeclaration\": 5699,\n                                      \"type\": \"function () view external returns (uint80,int256,uint256,uint256,uint80)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9728,\n                                          \"type\": \"contract AggregatorV3Interface\",\n                                          \"value\": \"ETH_USD_PRICE_FEED\"\n                                        },\n                                        \"id\": 9777,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2339:18:40\"\n                                      }\n                                    ],\n                                    \"id\": 9778,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2339:34:40\"\n                                  }\n                                ],\n                                \"id\": 9779,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2339:36:40\"\n                              }\n                            ],\n                            \"id\": 9780,\n                            \"name\": \"VariableDeclarationStatement\",\n                            \"src\": \"2310:65:40\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"falseBody\": null\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_int256\",\n                                    \"typeString\": \"int256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<=\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9776,\n                                      \"type\": \"int256\",\n                                      \"value\": \"usdPerEth\"\n                                    },\n                                    \"id\": 9781,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2394:9:40\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 9782,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"2407:1:40\"\n                                  }\n                                ],\n                                \"id\": 9783,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"2394:14:40\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"functionReturnParameters\": 9736\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"30\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 0\",\n                                      \"value\": \"0\"\n                                    },\n                                    \"id\": 9784,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"2417:1:40\"\n                                  }\n                                ],\n                                \"id\": 9785,\n                                \"name\": \"Return\",\n                                \"src\": \"2410:8:40\"\n                              }\n                            ],\n                            \"id\": 9786,\n                            \"name\": \"IfStatement\",\n                            \"src\": \"2390:28:40\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"functionReturnParameters\": 9736\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"div\",\n                                      \"referencedDeclaration\": 10862,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"mul\",\n                                              \"referencedDeclaration\": 10845,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"arguments\": [null],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"uint256\",\n                                                  \"type_conversion\": false\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [null],\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"member_name\": \"exchangeRateStored\",\n                                                      \"referencedDeclaration\": 5846,\n                                                      \"type\": \"function () view external returns (uint256)\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 9738,\n                                                          \"type\": \"contract CToken\",\n                                                          \"value\": \"underlying\"\n                                                        },\n                                                        \"id\": 9787,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"2440:10:40\"\n                                                      }\n                                                    ],\n                                                    \"id\": 9788,\n                                                    \"name\": \"MemberAccess\",\n                                                    \"src\": \"2440:29:40\"\n                                                  }\n                                                ],\n                                                \"id\": 9789,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"2440:31:40\"\n                                              }\n                                            ],\n                                            \"id\": 9790,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"2440:35:40\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"uint256\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                                      \"typeString\": \"contract CToken\"\n                                                    }\n                                                  ],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"getUnderlyingPrice\",\n                                                  \"referencedDeclaration\": 6022,\n                                                  \"type\": \"function (contract CToken) view external returns (uint256)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"arguments\": [null],\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"isStructConstructorCall\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"names\": [null],\n                                                      \"tryCall\": false,\n                                                      \"type\": \"contract PriceOracle\",\n                                                      \"type_conversion\": false\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": [\n                                                            null\n                                                          ],\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"member_name\": \"oracle\",\n                                                          \"referencedDeclaration\": 5892,\n                                                          \"type\": \"function () view external returns (contract PriceOracle)\"\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": 9751,\n                                                              \"type\": \"contract Comptroller\",\n                                                              \"value\": \"comptroller\"\n                                                            },\n                                                            \"id\": 9791,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"2476:11:40\"\n                                                          }\n                                                        ],\n                                                        \"id\": 9792,\n                                                        \"name\": \"MemberAccess\",\n                                                        \"src\": \"2476:18:40\"\n                                                      }\n                                                    ],\n                                                    \"id\": 9793,\n                                                    \"name\": \"FunctionCall\",\n                                                    \"src\": \"2476:20:40\"\n                                                  }\n                                                ],\n                                                \"id\": 9794,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"2476:39:40\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 9738,\n                                                  \"type\": \"contract CToken\",\n                                                  \"value\": \"underlying\"\n                                                },\n                                                \"id\": 9795,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"2516:10:40\"\n                                              }\n                                            ],\n                                            \"id\": 9796,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"2476:51:40\"\n                                          }\n                                        ],\n                                        \"id\": 9797,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"2440:88:40\"\n                                      }\n                                    ],\n                                    \"id\": 9798,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2440:92:40\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_rational_10000000000_by_1\",\n                                              \"typeString\": \"int_const 10000000000\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"mul\",\n                                          \"referencedDeclaration\": 10845,\n                                          \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"uint256\",\n                                              \"type_conversion\": true\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_int256\",\n                                                      \"typeString\": \"int256\"\n                                                    }\n                                                  ],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"type\": \"type(uint256)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"name\": \"uint256\",\n                                                      \"type\": null\n                                                    },\n                                                    \"id\": 9799,\n                                                    \"name\": \"ElementaryTypeName\",\n                                                    \"src\": \"2533:7:40\"\n                                                  }\n                                                ],\n                                                \"id\": 9800,\n                                                \"name\": \"ElementaryTypeNameExpression\",\n                                                \"src\": \"2533:7:40\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 9776,\n                                                  \"type\": \"int256\",\n                                                  \"value\": \"usdPerEth\"\n                                                },\n                                                \"id\": 9801,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"2541:9:40\"\n                                              }\n                                            ],\n                                            \"id\": 9802,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"2533:18:40\"\n                                          }\n                                        ],\n                                        \"id\": 9803,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"2533:22:40\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"31653130\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 10000000000\",\n                                          \"value\": \"1e10\"\n                                        },\n                                        \"id\": 9804,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"2556:4:40\"\n                                      }\n                                    ],\n                                    \"id\": 9805,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2533:28:40\"\n                                  }\n                                ],\n                                \"id\": 9806,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2440:122:40\"\n                              }\n                            ],\n                            \"id\": 9807,\n                            \"name\": \"Return\",\n                            \"src\": \"2433:129:40\"\n                          }\n                        ],\n                        \"id\": 9808,\n                        \"name\": \"Block\",\n                        \"src\": \"2031:543:40\"\n                      }\n                    ],\n                    \"id\": 9809,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"1981:593:40\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"==\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_Comptroller_$6011\",\n                                      \"typeString\": \"contract Comptroller\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"type(address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"address\",\n                                      \"type\": null\n                                    },\n                                    \"id\": 9810,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"2641:7:40\"\n                                  }\n                                ],\n                                \"id\": 9811,\n                                \"name\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"2641:7:40\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9751,\n                                  \"type\": \"contract Comptroller\",\n                                  \"value\": \"comptroller\"\n                                },\n                                \"id\": 9812,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2649:11:40\"\n                              }\n                            ],\n                            \"id\": 9813,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"2641:20:40\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9722,\n                              \"type\": \"address\",\n                              \"value\": \"CREAM_COMPTROLLER\"\n                            },\n                            \"id\": 9814,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2665:17:40\"\n                          }\n                        ],\n                        \"id\": 9815,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"2641:41:40\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"falseBody\": null\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"bool\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_string_memory_ptr\",\n                                          \"typeString\": \"string memory\"\n                                        },\n                                        {\n                                          \"typeIdentifier\": \"t_stringliteral_b3c46c78043b5ff6963757142af6c297cddb5a0d3d823357472228eb35c8e890\",\n                                          \"typeString\": \"literal_string \\\"cETH\\\"\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9882,\n                                      \"type\": \"function (string memory,string memory) pure returns (bool)\",\n                                      \"value\": \"compareStrings\"\n                                    },\n                                    \"id\": 9816,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2725:14:40\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"string memory\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"symbol\",\n                                          \"referencedDeclaration\": 5760,\n                                          \"type\": \"function () view external returns (string memory)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9738,\n                                              \"type\": \"contract CToken\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 9817,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2740:10:40\"\n                                          }\n                                        ],\n                                        \"id\": 9818,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"2740:17:40\"\n                                      }\n                                    ],\n                                    \"id\": 9819,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2740:19:40\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"63455448\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"string\",\n                                      \"type\": \"literal_string \\\"cETH\\\"\",\n                                      \"value\": \"cETH\"\n                                    },\n                                    \"id\": 9820,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"2761:6:40\"\n                                  }\n                                ],\n                                \"id\": 9821,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2725:43:40\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"functionReturnParameters\": 9736\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"exchangeRateStored\",\n                                          \"referencedDeclaration\": 5846,\n                                          \"type\": \"function () view external returns (uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9738,\n                                              \"type\": \"contract CToken\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 9822,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2777:10:40\"\n                                          }\n                                        ],\n                                        \"id\": 9823,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"2777:29:40\"\n                                      }\n                                    ],\n                                    \"id\": 9824,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2777:31:40\"\n                                  }\n                                ],\n                                \"id\": 9825,\n                                \"name\": \"Return\",\n                                \"src\": \"2770:38:40\"\n                              }\n                            ],\n                            \"id\": 9826,\n                            \"name\": \"IfStatement\",\n                            \"src\": \"2721:87:40\"\n                          }\n                        ],\n                        \"id\": 9827,\n                        \"name\": \"Block\",\n                        \"src\": \"2684:136:40\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"falseBody\": null\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"bool\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"isCEther\",\n                                  \"referencedDeclaration\": 5805,\n                                  \"type\": \"function () view external returns (bool)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 9738,\n                                      \"type\": \"contract CToken\",\n                                      \"value\": \"underlying\"\n                                    },\n                                    \"id\": 9828,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2830:10:40\"\n                                  }\n                                ],\n                                \"id\": 9829,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"2830:19:40\"\n                              }\n                            ],\n                            \"id\": 9830,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"2830:21:40\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"functionReturnParameters\": 9736\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"exchangeRateStored\",\n                                          \"referencedDeclaration\": 5846,\n                                          \"type\": \"function () view external returns (uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9738,\n                                              \"type\": \"contract CToken\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 9831,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2896:10:40\"\n                                          }\n                                        ],\n                                        \"id\": 9832,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"2896:29:40\"\n                                      }\n                                    ],\n                                    \"id\": 9833,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2896:31:40\"\n                                  }\n                                ],\n                                \"id\": 9834,\n                                \"name\": \"Return\",\n                                \"src\": \"2889:38:40\"\n                              }\n                            ],\n                            \"id\": 9835,\n                            \"name\": \"Block\",\n                            \"src\": \"2853:86:40\"\n                          }\n                        ],\n                        \"id\": 9836,\n                        \"name\": \"IfStatement\",\n                        \"src\": \"2826:113:40\"\n                      }\n                    ],\n                    \"id\": 9837,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"2637:302:40\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 9736\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                  \"typeString\": \"int_const 1000000000000000000\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"arguments\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"exchangeRateStored\",\n                                              \"referencedDeclaration\": 5846,\n                                              \"type\": \"function () view external returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 9738,\n                                                  \"type\": \"contract CToken\",\n                                                  \"value\": \"underlying\"\n                                                },\n                                                \"id\": 9838,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"3040:10:40\"\n                                              }\n                                            ],\n                                            \"id\": 9839,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"3040:29:40\"\n                                          }\n                                        ],\n                                        \"id\": 9840,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"3040:31:40\"\n                                      }\n                                    ],\n                                    \"id\": 9841,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"3040:35:40\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                              \"typeString\": \"contract CToken\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"getUnderlyingPrice\",\n                                          \"referencedDeclaration\": 6022,\n                                          \"type\": \"function (contract CToken) view external returns (uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"arguments\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"contract PriceOracle\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [null],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"oracle\",\n                                                  \"referencedDeclaration\": 5892,\n                                                  \"type\": \"function () view external returns (contract PriceOracle)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 9751,\n                                                      \"type\": \"contract Comptroller\",\n                                                      \"value\": \"comptroller\"\n                                                    },\n                                                    \"id\": 9842,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"3076:11:40\"\n                                                  }\n                                                ],\n                                                \"id\": 9843,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"3076:18:40\"\n                                              }\n                                            ],\n                                            \"id\": 9844,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"3076:20:40\"\n                                          }\n                                        ],\n                                        \"id\": 9845,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"3076:39:40\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9738,\n                                          \"type\": \"contract CToken\",\n                                          \"value\": \"underlying\"\n                                        },\n                                        \"id\": 9846,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3116:10:40\"\n                                      }\n                                    ],\n                                    \"id\": 9847,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3076:51:40\"\n                                  }\n                                ],\n                                \"id\": 9848,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3040:88:40\"\n                              }\n                            ],\n                            \"id\": 9849,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"3040:92:40\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 9850,\n                            \"name\": \"Literal\",\n                            \"src\": \"3133:4:40\"\n                          }\n                        ],\n                        \"id\": 9851,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3040:98:40\"\n                      }\n                    ],\n                    \"id\": 9852,\n                    \"name\": \"Return\",\n                    \"src\": \"3033:105:40\"\n                  }\n                ],\n                \"id\": 9853,\n                \"name\": \"Block\",\n                \"src\": \"1703:1443:40\"\n              }\n            ],\n            \"id\": 9854,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1622:1524:40\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"compareStrings\",\n              \"overrides\": null,\n              \"scope\": 9883,\n              \"stateMutability\": \"pure\",\n              \"virtual\": false,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Compares two strings.\"\n                },\n                \"id\": 9855,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"3154:47:40\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"a\",\n                      \"overrides\": null,\n                      \"scope\": 9882,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"type\": \"string\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"string\",\n                          \"type\": \"string\"\n                        },\n                        \"id\": 9856,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"3231:6:40\"\n                      }\n                    ],\n                    \"id\": 9857,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"3231:15:40\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"b\",\n                      \"overrides\": null,\n                      \"scope\": 9882,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"memory\",\n                      \"type\": \"string\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"string\",\n                          \"type\": \"string\"\n                        },\n                        \"id\": 9858,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"3248:6:40\"\n                      }\n                    ],\n                    \"id\": 9859,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"3248:15:40\"\n                  }\n                ],\n                \"id\": 9860,\n                \"name\": \"ParameterList\",\n                \"src\": \"3230:34:40\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9882,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"bool\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"bool\",\n                          \"type\": \"bool\"\n                        },\n                        \"id\": 9861,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"3288:4:40\"\n                      }\n                    ],\n                    \"id\": 9862,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"3288:4:40\"\n                  }\n                ],\n                \"id\": 9863,\n                \"name\": \"ParameterList\",\n                \"src\": \"3287:6:40\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 9863\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isInlineArray\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_bytes32\",\n                                \"typeString\": \"bytes32\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"==\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"bytes32\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                                          \"typeString\": \"bytes memory\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": -8,\n                                      \"type\": \"function (bytes memory) pure returns (bytes32)\",\n                                      \"value\": \"keccak256\"\n                                    },\n                                    \"id\": 9864,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3313:9:40\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"bytes memory\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_string_memory_ptr\",\n                                              \"typeString\": \"string memory\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"encodePacked\",\n                                          \"referencedDeclaration\": null,\n                                          \"type\": \"function () pure returns (bytes memory)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": -1,\n                                              \"type\": \"abi\",\n                                              \"value\": \"abi\"\n                                            },\n                                            \"id\": 9865,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"3323:3:40\"\n                                          }\n                                        ],\n                                        \"id\": 9866,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"3323:16:40\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isInlineArray\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"string memory\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9857,\n                                              \"type\": \"string memory\",\n                                              \"value\": \"a\"\n                                            },\n                                            \"id\": 9867,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"3341:1:40\"\n                                          }\n                                        ],\n                                        \"id\": 9868,\n                                        \"name\": \"TupleExpression\",\n                                        \"src\": \"3340:3:40\"\n                                      }\n                                    ],\n                                    \"id\": 9869,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3323:21:40\"\n                                  }\n                                ],\n                                \"id\": 9870,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3313:32:40\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"bytes32\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                                          \"typeString\": \"bytes memory\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": -8,\n                                      \"type\": \"function (bytes memory) pure returns (bytes32)\",\n                                      \"value\": \"keccak256\"\n                                    },\n                                    \"id\": 9871,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"3349:9:40\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"bytes memory\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_string_memory_ptr\",\n                                              \"typeString\": \"string memory\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"encodePacked\",\n                                          \"referencedDeclaration\": null,\n                                          \"type\": \"function () pure returns (bytes memory)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": -1,\n                                              \"type\": \"abi\",\n                                              \"value\": \"abi\"\n                                            },\n                                            \"id\": 9872,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"3359:3:40\"\n                                          }\n                                        ],\n                                        \"id\": 9873,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"3359:16:40\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isInlineArray\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"string memory\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9859,\n                                              \"type\": \"string memory\",\n                                              \"value\": \"b\"\n                                            },\n                                            \"id\": 9874,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"3377:1:40\"\n                                          }\n                                        ],\n                                        \"id\": 9875,\n                                        \"name\": \"TupleExpression\",\n                                        \"src\": \"3376:3:40\"\n                                      }\n                                    ],\n                                    \"id\": 9876,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3359:21:40\"\n                                  }\n                                ],\n                                \"id\": 9877,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3349:32:40\"\n                              }\n                            ],\n                            \"id\": 9878,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3313:68:40\"\n                          }\n                        ],\n                        \"id\": 9879,\n                        \"name\": \"TupleExpression\",\n                        \"src\": \"3312:70:40\"\n                      }\n                    ],\n                    \"id\": 9880,\n                    \"name\": \"Return\",\n                    \"src\": \"3305:77:40\"\n                  }\n                ],\n                \"id\": 9881,\n                \"name\": \"Block\",\n                \"src\": \"3294:96:40\"\n              }\n            ],\n            \"id\": 9882,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"3207:183:40\"\n          }\n        ],\n        \"id\": 9883,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"892:2501:40\"\n      }\n    ],\n    \"id\": 9884,\n    \"name\": \"SourceUnit\",\n    \"src\": \"312:3083:40\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.160Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements `PriceOracle`.\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n      }\n    },\n    \"stateVariables\": {\n      \"COMPOUND_COMPTROLLER\": {\n        \"details\": \"Compound Comptroller address.\"\n      },\n      \"CREAM_COMPTROLLER\": {\n        \"details\": \"Cream Comptroller address.\"\n      },\n      \"ETH_USD_PRICE_FEED\": {\n        \"details\": \"Chainlink ETH/USD price feed contract.\"\n      }\n    },\n    \"title\": \"RecursivePriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"notice\": \"Returns prices from other cTokens (from Compound or from Fuse).\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/SynthetixPriceOracle.json",
    "content": "{\n  \"contractName\": \"SynthetixPriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements `PriceOracle`.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\\"}},\\\"title\\\":\\\"SynthetixPriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"notice\\\":\\\"Returns prices for Synths from Synthetix's official `ExchangeRates` contract.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/SynthetixPriceOracle.sol\\\":\\\"SynthetixPriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/AddressResolver.sol\\\":{\\\"keccak256\\\":\\\"0x8f375b9deb3a9366215186f21b00d8801c1eae7d28cc33208b512edb50d65bfc\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://c969e90e6fcdbc03bd5b87f2ec4a82ba21e2990c0415deac80be6d5daf4f21eb\\\",\\\"dweb:/ipfs/QmZsHLzmg3Avq3wxGJmcgKCAUXLA2wT6tXoktJcPGk6WBA\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/ExchangeRates.sol\\\":{\\\"keccak256\\\":\\\"0x52131288630cde7a4444ed641bc2aa448fb938b27f8c11271a8fbc3d3973505d\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://a4338a2dccac108009a9f4cd92794d750d453ced9252655df1dac83642c32eb6\\\",\\\"dweb:/ipfs/QmWb4Jw1FvrRBtMyLyXACaHatHWEpH838xRoFKro5EcDSn\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/ISynth.sol\\\":{\\\"keccak256\\\":\\\"0x2addc22dd579da4c91a42733ca1e28dfb16a3c746e820a079415ad666d782881\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://9f9db5274ea7e5e421e85d84f8eb8f9499f4fed28483e8ced14f1f581d81a189\\\",\\\"dweb:/ipfs/QmQmx53dtNcKKRVyVtWKpt7Kq58obgb23ic2ge2Q8cqbRt\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/MixinResolver.sol\\\":{\\\"keccak256\\\":\\\"0x9db81dba25a1e657cfbbf030404b057d9585b266f5ea9b9e7e927e4d78012858\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://ffe8170c4b08e3d760ca8caeb04e2f2a76a170886c3c7aa0e555630c1028a450\\\",\\\"dweb:/ipfs/QmPiWQZhS5guZUxxizT48YnHuXWFxqJko8qFm5GGTdEYeL\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/Proxy.sol\\\":{\\\"keccak256\\\":\\\"0x5c82ccc7277f2ade5705ae44d523a0ade39b054512ab64e339b909f9de1a7d97\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://d15c32231d229cbef0a0f28974a14687ea04cf450d278b60d8a99d2a3af06ee9\\\",\\\"dweb:/ipfs/Qmefkvex932LCSEMGXy6GwrL2c75jxG3f7DvEn3X6xFhjv\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/SynthetixPriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x064fa28a86e1d95c7caa68be26cb418311250f9a1a8b00fe5f874246d0505ae4\\\",\\\"urls\\\":[\\\"bzz-raw://bf67236ef11e92aa7212be54e6f56f04b2b0a315d50a3a51eca86d3c19d75c12\\\",\\\"dweb:/ipfs/QmRnNG6GdHb2DG15N7G7urTkLecooppzgMYtARPvdGTtWn\\\"]},\\\"@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\\\",\\\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\\\",\\\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x9e71cf53c2ee5c9e4f183e168028fc208560493aaf48668bca0981bb2c8359c2\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7cb9d29f7bc76b077649ccef2043e1492a462afcb2410f443e63233f206a95dd\\\",\\\"dweb:/ipfs/QmRDXEro4hh2E6rTUAWvBkHzivAS1TBmtSLP1mRGAHVnnL\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b506105bf806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063fc57d4df14610030575b600080fd5b6100566004803603602081101561004657600080fd5b50356001600160a01b0316610068565b60408051918252519081900360200190f35b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156100a457600080fd5b505afa1580156100b8573d6000803e3d6000fd5b505050506040513d60208110156100ce57600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561011657600080fd5b505afa15801561012a573d6000803e3d6000fd5b505050506040513d602081101561014057600080fd5b505160408051636a5c1cc960e11b8152905160ff909216600a0a92506001600160a01b0384169163d4b8399291600480820192602092909190829003018186803b15801561018d57600080fd5b505afa1580156101a1573d6000803e3d6000fd5b505050506040513d60208110156101b757600080fd5b50516040805163013cef3b60e21b815290519193506000916001600160a01b038516916304f3bcec916004808301926020929190829003018186803b1580156101ff57600080fd5b505afa158015610213573d6000803e3d6000fd5b505050506040513d602081101561022957600080fd5b50516040805163dacb2d0160e01b81526c45786368616e6765526174657360981b60048201908152602482019283526039604483018190526001600160a01b039094169363dacb2d0193919260640190610530823960400191505060206040518083038186803b15801561029c57600080fd5b505afa1580156102b0573d6000803e3d6000fd5b505050506040513d60208110156102c657600080fd5b810190808051906020019092919050505090506103e5826103df670de0b6b3a7640000846001600160a01b031663654a60ac886001600160a01b031663dbd06c856040518163ffffffff1660e01b815260040160206040518083038186803b15801561033157600080fd5b505afa158015610345573d6000803e3d6000fd5b505050506040513d602081101561035b57600080fd5b5051604080516001600160e01b031960e085901b1681526004810192909252602482018a90526208aa8960eb1b6044830152516064808301926020929190829003018186803b1580156103ad57600080fd5b505afa1580156103c1573d6000803e3d6000fd5b505050506040513d60208110156103d757600080fd5b5051906103ee565b90610450565b95945050505050565b6000826103fd5750600061044a565b8282028284828161040a57fe5b04146104475760405162461bcd60e51b81526004018080602001828103825260218152602001806105696021913960400191505060405180910390fd5b90505b92915050565b600061044783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836105195760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156104de5781810151838201526020016104c6565b50505050905090810190601f16801561050b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161052557fe5b049594505050505056fe4661696c656420746f206765742053796e74686574697827732045786368616e6765526174657320636f6e747261637420616464726573732e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122068a8c40c60dca7c006749932a1593aacc226f4bc138ab0c6b9752450175cb68164736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063fc57d4df14610030575b600080fd5b6100566004803603602081101561004657600080fd5b50356001600160a01b0316610068565b60408051918252519081900360200190f35b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156100a457600080fd5b505afa1580156100b8573d6000803e3d6000fd5b505050506040513d60208110156100ce57600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561011657600080fd5b505afa15801561012a573d6000803e3d6000fd5b505050506040513d602081101561014057600080fd5b505160408051636a5c1cc960e11b8152905160ff909216600a0a92506001600160a01b0384169163d4b8399291600480820192602092909190829003018186803b15801561018d57600080fd5b505afa1580156101a1573d6000803e3d6000fd5b505050506040513d60208110156101b757600080fd5b50516040805163013cef3b60e21b815290519193506000916001600160a01b038516916304f3bcec916004808301926020929190829003018186803b1580156101ff57600080fd5b505afa158015610213573d6000803e3d6000fd5b505050506040513d602081101561022957600080fd5b50516040805163dacb2d0160e01b81526c45786368616e6765526174657360981b60048201908152602482019283526039604483018190526001600160a01b039094169363dacb2d0193919260640190610530823960400191505060206040518083038186803b15801561029c57600080fd5b505afa1580156102b0573d6000803e3d6000fd5b505050506040513d60208110156102c657600080fd5b810190808051906020019092919050505090506103e5826103df670de0b6b3a7640000846001600160a01b031663654a60ac886001600160a01b031663dbd06c856040518163ffffffff1660e01b815260040160206040518083038186803b15801561033157600080fd5b505afa158015610345573d6000803e3d6000fd5b505050506040513d602081101561035b57600080fd5b5051604080516001600160e01b031960e085901b1681526004810192909252602482018a90526208aa8960eb1b6044830152516064808301926020929190829003018186803b1580156103ad57600080fd5b505afa1580156103c1573d6000803e3d6000fd5b505050506040513d60208110156103d757600080fd5b5051906103ee565b90610450565b95945050505050565b6000826103fd5750600061044a565b8282028284828161040a57fe5b04146104475760405162461bcd60e51b81526004018080602001828103825260218152602001806105696021913960400191505060405180910390fd5b90505b92915050565b600061044783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836105195760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156104de5781810151838201526020016104c6565b50505050905090810190601f16801561050b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161052557fe5b049594505050505056fe4661696c656420746f206765742053796e74686574697827732045786368616e6765526174657320636f6e747261637420616464726573732e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122068a8c40c60dca7c006749932a1593aacc226f4bc138ab0c6b9752450175cb68164736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"1078:937:41:-:0;;;;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"1078:937:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1293:719;;;;;;;;;;;;;;;;-1:-1:-1;1293:719:41;-1:-1:-1;;;;;1293:719:41;;:::i;:::-;;;;;;;;;;;;;;;;;1368:4;1385:18;1421:6;-1:-1:-1;;;;;1406:34:41;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1406:36:41;1483:39;;;-1:-1:-1;;;1483:39:41;;;;1406:36;;-1:-1:-1;1453:16:41;;-1:-1:-1;;;;;1483:37:41;;;;;:39;;;;;1406:36;;1483:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1483:39:41;1547:26;;;-1:-1:-1;;;1547:26:41;;;;1478:45;;;;1472:2;:51;;-1:-1:-1;;;;;;1547:24:41;;;;;:26;;;;;1483:39;;1547:26;;;;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1547:26:41;1747:36;;;-1:-1:-1;;;1747:36:41;;;;1547:26;;-1:-1:-1;1703:27:41;;-1:-1:-1;;;;;1747:34:41;;;;;:36;;;;;1547:26;;1747:36;;;;;;;:34;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1747:36:41;:135;;;-1:-1:-1;;;1747:135:41;;-1:-1:-1;;;1747:135:41;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1747:57:41;;;;;;:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1703:180;;1901:103;1995:8;1901:89;1985:4;1901:13;-1:-1:-1;;;;;1901:28:41;;1937:10;-1:-1:-1;;;;;1930:30:41;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1930:32:41;1901:79;;;-1:-1:-1;;;;;;1901:79:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1901:79:41;;;;;;;;;;1930:32;;1901:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1901:79:41;;:83;:89::i;:::-;:93;;:103::i;:::-;1894:110;1293:719;-1:-1:-1;;;;;1293:719:41:o;2199:459:47:-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:47;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:1;-1:-1:-1;2199:459:47;;;;;:::o;3120:130::-;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:47:o\",\n  \"source\": \"/**\\r\\n * COPYRIGHT © 2020 RARI CAPITAL, INC. ALL RIGHTS RESERVED.\\r\\n * No one is permitted to use the software for any purpose without the explicit permission of David Lucid of Rari Capital, Inc.\\r\\n * This license is liable to change at any time at the sole discretion of David Lucid of Rari Capital, Inc.\\r\\n */\\r\\n\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"../external/synthetix/AddressResolver.sol\\\";\\r\\nimport \\\"../external/synthetix/ExchangeRates.sol\\\";\\r\\nimport \\\"../external/synthetix/ISynth.sol\\\";\\r\\nimport \\\"../external/synthetix/MixinResolver.sol\\\";\\r\\nimport \\\"../external/synthetix/Proxy.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title SynthetixPriceOracle\\r\\n * @notice Returns prices for Synths from Synthetix's official `ExchangeRates` contract.\\r\\n * @dev Implements `PriceOracle`.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract SynthetixPriceOracle is PriceOracle {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        address underlying = CErc20(address(cToken)).underlying();\\r\\n        uint256 baseUnit = 10 ** uint(ERC20Upgradeable(underlying).decimals());\\r\\n        underlying = Proxy(underlying).target(); // For some reason we have to use the logic contract instead of the proxy contract to get `resolver` and `currencyKey`\\r\\n        ExchangeRates exchangeRates = ExchangeRates(MixinResolver(underlying).resolver().requireAndGetAddress(\\\"ExchangeRates\\\", \\\"Failed to get Synthetix's ExchangeRates contract address.\\\"));\\r\\n        return exchangeRates.effectiveValue(ISynth(underlying).currencyKey(), baseUnit, \\\"ETH\\\").mul(1e18).div(baseUnit);\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/SynthetixPriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/SynthetixPriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"SynthetixPriceOracle\": [9974]\n    },\n    \"id\": 9975,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 9885,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"312:23:41\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 9886,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9975,\n        \"sourceUnit\": 10933,\n        \"src\": \"339:74:41\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"id\": 9887,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9975,\n        \"sourceUnit\": 11534,\n        \"src\": \"415:78:41\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 9888,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9975,\n        \"sourceUnit\": 6024,\n        \"src\": \"497:46:41\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 9889,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9975,\n        \"sourceUnit\": 5724,\n        \"src\": \"545:41:41\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/AddressResolver.sol\",\n        \"file\": \"../external/synthetix/AddressResolver.sol\",\n        \"id\": 9890,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9975,\n        \"sourceUnit\": 6102,\n        \"src\": \"590:51:41\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/ExchangeRates.sol\",\n        \"file\": \"../external/synthetix/ExchangeRates.sol\",\n        \"id\": 9891,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9975,\n        \"sourceUnit\": 6116,\n        \"src\": \"643:49:41\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/ISynth.sol\",\n        \"file\": \"../external/synthetix/ISynth.sol\",\n        \"id\": 9892,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9975,\n        \"sourceUnit\": 6124,\n        \"src\": \"694:42:41\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/MixinResolver.sol\",\n        \"file\": \"../external/synthetix/MixinResolver.sol\",\n        \"id\": 9893,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9975,\n        \"sourceUnit\": 6130,\n        \"src\": \"738:49:41\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/Proxy.sol\",\n        \"file\": \"../external/synthetix/Proxy.sol\",\n        \"id\": 9894,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 9975,\n        \"sourceUnit\": 6135,\n        \"src\": \"789:41:41\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 9896,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"1111:11:41\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 9897,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"1111:11:41\"\n          }\n        ],\n        \"contractDependencies\": [6023],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 9895,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"834:242:41\",\n          \"text\": \" @title SynthetixPriceOracle\\n @notice Returns prices for Synths from Synthetix's official `ExchangeRates` contract.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 9974,\n        \"linearizedBaseContracts\": [9974, 6023],\n        \"name\": \"SynthetixPriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 9900,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 9898,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 10932,\n              \"src\": \"1136:19:41\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$10932\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"1130:38:41\",\n            \"typeName\": {\n              \"id\": 9899,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1160:7:41\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 9972,\n              \"nodeType\": \"Block\",\n              \"src\": \"1374:638:41\",\n              \"statements\": [\n                {\n                  \"assignments\": [9910],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9910,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9972,\n                      \"src\": \"1385:18:41\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9909,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1385:7:41\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9919,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9914,\n                                \"name\": \"cToken\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9903,\n                                \"src\": \"1421:6:41\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              ],\n                              \"id\": 9913,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"ElementaryTypeNameExpression\",\n                              \"src\": \"1413:7:41\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_address_$\",\n                                \"typeString\": \"type(address)\"\n                              },\n                              \"typeName\": {\n                                \"id\": 9912,\n                                \"name\": \"address\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"1413:7:41\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": null,\n                                  \"typeString\": null\n                                }\n                              }\n                            },\n                            \"id\": 9915,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1413:15:41\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 9911,\n                          \"name\": \"CErc20\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 5723,\n                          \"src\": \"1406:6:41\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                            \"typeString\": \"type(contract CErc20)\"\n                          }\n                        },\n                        \"id\": 9916,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1406:23:41\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                          \"typeString\": \"contract CErc20\"\n                        }\n                      },\n                      \"id\": 9917,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"underlying\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5711,\n                      \"src\": \"1406:34:41\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 9918,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1406:36:41\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1385:57:41\"\n                },\n                {\n                  \"assignments\": [9921],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9921,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"baseUnit\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9972,\n                      \"src\": \"1453:16:41\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 9920,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1453:7:41\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9932,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 9931,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3130\",\n                      \"id\": 9922,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1472:2:41\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_10_by_1\",\n                        \"typeString\": \"int_const 10\"\n                      },\n                      \"value\": \"10\"\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"**\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 9926,\n                                  \"name\": \"underlying\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 9910,\n                                  \"src\": \"1500:10:41\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                ],\n                                \"id\": 9925,\n                                \"name\": \"ERC20Upgradeable\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 11533,\n                                \"src\": \"1483:16:41\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11533_$\",\n                                  \"typeString\": \"type(contract ERC20Upgradeable)\"\n                                }\n                              },\n                              \"id\": 9927,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"typeConversion\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"1483:28:41\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11533\",\n                                \"typeString\": \"contract ERC20Upgradeable\"\n                              }\n                            },\n                            \"id\": 9928,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"decimals\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 11105,\n                            \"src\": \"1483:37:41\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                              \"typeString\": \"function () view external returns (uint8)\"\n                            }\n                          },\n                          \"id\": 9929,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1483:39:41\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        ],\n                        \"id\": 9924,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1478:4:41\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                          \"typeString\": \"type(uint256)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 9923,\n                          \"name\": \"uint\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1478:4:41\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 9930,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1478:45:41\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1472:51:41\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1453:70:41\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 9939,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 9933,\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 9910,\n                      \"src\": \"1534:10:41\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [],\n                      \"expression\": {\n                        \"argumentTypes\": [],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"id\": 9935,\n                              \"name\": \"underlying\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 9910,\n                              \"src\": \"1553:10:41\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            ],\n                            \"id\": 9934,\n                            \"name\": \"Proxy\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 6134,\n                            \"src\": \"1547:5:41\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_contract$_Proxy_$6134_$\",\n                              \"typeString\": \"type(contract Proxy)\"\n                            }\n                          },\n                          \"id\": 9936,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1547:17:41\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_Proxy_$6134\",\n                            \"typeString\": \"contract Proxy\"\n                          }\n                        },\n                        \"id\": 9937,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"target\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 6133,\n                        \"src\": \"1547:24:41\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                          \"typeString\": \"function () view external returns (address)\"\n                        }\n                      },\n                      \"id\": 9938,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1547:26:41\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1534:39:41\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 9940,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1534:39:41\"\n                },\n                {\n                  \"assignments\": [9942],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 9942,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"exchangeRates\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 9972,\n                      \"src\": \"1703:27:41\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_ExchangeRates_$6115\",\n                        \"typeString\": \"contract ExchangeRates\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 9941,\n                        \"name\": \"ExchangeRates\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 6115,\n                        \"src\": \"1703:13:41\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_ExchangeRates_$6115\",\n                          \"typeString\": \"contract ExchangeRates\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 9954,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"45786368616e67655261746573\",\n                            \"id\": 9950,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"string\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1805:15:41\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_stringliteral_bf37716bb81d79af332360ca92da271363e4c74afe8b9297a83aca9ec6ca0426\",\n                              \"typeString\": \"literal_string \\\"ExchangeRates\\\"\"\n                            },\n                            \"value\": \"ExchangeRates\"\n                          },\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"4661696c656420746f206765742053796e74686574697827732045786368616e6765526174657320636f6e747261637420616464726573732e\",\n                            \"id\": 9951,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"string\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1822:59:41\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_stringliteral_32d19cf45d6db5cb7b6b96d6620e378bc243b6cfad043f08691fdd8f7ca81b11\",\n                              \"typeString\": \"literal_string \\\"Failed to get Synthetix's ExchangeRates contract address.\\\"\"\n                            },\n                            \"value\": \"Failed to get Synthetix's ExchangeRates contract address.\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_stringliteral_bf37716bb81d79af332360ca92da271363e4c74afe8b9297a83aca9ec6ca0426\",\n                              \"typeString\": \"literal_string \\\"ExchangeRates\\\"\"\n                            },\n                            {\n                              \"typeIdentifier\": \"t_stringliteral_32d19cf45d6db5cb7b6b96d6620e378bc243b6cfad043f08691fdd8f7ca81b11\",\n                              \"typeString\": \"literal_string \\\"Failed to get Synthetix's ExchangeRates contract address.\\\"\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [],\n                            \"expression\": {\n                              \"argumentTypes\": [],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 9945,\n                                    \"name\": \"underlying\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 9910,\n                                    \"src\": \"1761:10:41\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"id\": 9944,\n                                  \"name\": \"MixinResolver\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 6129,\n                                  \"src\": \"1747:13:41\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_type$_t_contract$_MixinResolver_$6129_$\",\n                                    \"typeString\": \"type(contract MixinResolver)\"\n                                  }\n                                },\n                                \"id\": 9946,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"typeConversion\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"1747:25:41\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_MixinResolver_$6129\",\n                                  \"typeString\": \"contract MixinResolver\"\n                                }\n                              },\n                              \"id\": 9947,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"resolver\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 6128,\n                              \"src\": \"1747:34:41\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$__$returns$_t_contract$_AddressResolver_$6101_$\",\n                                \"typeString\": \"function () view external returns (contract AddressResolver)\"\n                              }\n                            },\n                            \"id\": 9948,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1747:36:41\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_AddressResolver_$6101\",\n                              \"typeString\": \"contract AddressResolver\"\n                            }\n                          },\n                          \"id\": 9949,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"requireAndGetAddress\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 6100,\n                          \"src\": \"1747:57:41\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$_t_bytes32_$_t_string_memory_ptr_$returns$_t_address_$\",\n                            \"typeString\": \"function (bytes32,string memory) view external returns (address)\"\n                          }\n                        },\n                        \"id\": 9952,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1747:135:41\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 9943,\n                      \"name\": \"ExchangeRates\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 6115,\n                      \"src\": \"1733:13:41\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_ExchangeRates_$6115_$\",\n                        \"typeString\": \"type(contract ExchangeRates)\"\n                      }\n                    },\n                    \"id\": 9953,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1733:150:41\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_ExchangeRates_$6115\",\n                      \"typeString\": \"contract ExchangeRates\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1703:180:41\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 9969,\n                        \"name\": \"baseUnit\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9921,\n                        \"src\": \"1995:8:41\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"31653138\",\n                            \"id\": 9966,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1985:4:41\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            },\n                            \"value\": \"1e18\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": [],\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"id\": 9958,\n                                        \"name\": \"underlying\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 9910,\n                                        \"src\": \"1937:10:41\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"id\": 9957,\n                                      \"name\": \"ISynth\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 6123,\n                                      \"src\": \"1930:6:41\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_type$_t_contract$_ISynth_$6123_$\",\n                                        \"typeString\": \"type(contract ISynth)\"\n                                      }\n                                    },\n                                    \"id\": 9959,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"typeConversion\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"1930:18:41\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_ISynth_$6123\",\n                                      \"typeString\": \"contract ISynth\"\n                                    }\n                                  },\n                                  \"id\": 9960,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"currencyKey\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": 6122,\n                                  \"src\": \"1930:30:41\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_external_view$__$returns$_t_bytes32_$\",\n                                    \"typeString\": \"function () view external returns (bytes32)\"\n                                  }\n                                },\n                                \"id\": 9961,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"1930:32:41\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_bytes32\",\n                                  \"typeString\": \"bytes32\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 9962,\n                                \"name\": \"baseUnit\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9921,\n                                \"src\": \"1964:8:41\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              {\n                                \"argumentTypes\": null,\n                                \"hexValue\": \"455448\",\n                                \"id\": 9963,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"kind\": \"string\",\n                                \"lValueRequested\": false,\n                                \"nodeType\": \"Literal\",\n                                \"src\": \"1974:5:41\",\n                                \"subdenomination\": null,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4\",\n                                  \"typeString\": \"literal_string \\\"ETH\\\"\"\n                                },\n                                \"value\": \"ETH\"\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_bytes32\",\n                                  \"typeString\": \"bytes32\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                },\n                                {\n                                  \"typeIdentifier\": \"t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4\",\n                                  \"typeString\": \"literal_string \\\"ETH\\\"\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 9955,\n                                \"name\": \"exchangeRates\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 9942,\n                                \"src\": \"1901:13:41\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_ExchangeRates_$6115\",\n                                  \"typeString\": \"contract ExchangeRates\"\n                                }\n                              },\n                              \"id\": 9956,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"effectiveValue\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 6114,\n                              \"src\": \"1901:28:41\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$_t_bytes32_$_t_uint256_$_t_bytes32_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (bytes32,uint256,bytes32) view external returns (uint256)\"\n                              }\n                            },\n                            \"id\": 9964,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1901:79:41\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 9965,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"1901:83:41\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 9967,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1901:89:41\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 9968,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"1901:93:41\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 9970,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1901:103:41\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 9908,\n                  \"id\": 9971,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1894:110:41\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9901,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1176:111:41\",\n              \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 9973,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 9905,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"1345:8:41\"\n            },\n            \"parameters\": {\n              \"id\": 9904,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9903,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9973,\n                  \"src\": \"1321:13:41\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 9902,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"1321:6:41\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1320:15:41\"\n            },\n            \"returnParameters\": {\n              \"id\": 9908,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9907,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 9973,\n                  \"src\": \"1368:4:41\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9906,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1368:4:41\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1367:6:41\"\n            },\n            \"scope\": 9974,\n            \"src\": \"1293:719:41\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 9975,\n        \"src\": \"1078:937:41\"\n      }\n    ],\n    \"src\": \"312:1705:41\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/SynthetixPriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"SynthetixPriceOracle\": [9974]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 9885,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"312:23:41\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 10933,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 9975,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9886,\n        \"name\": \"ImportDirective\",\n        \"src\": \"339:74:41\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 11534,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"scope\": 9975,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9887,\n        \"name\": \"ImportDirective\",\n        \"src\": \"415:78:41\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 9975,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9888,\n        \"name\": \"ImportDirective\",\n        \"src\": \"497:46:41\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 9975,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9889,\n        \"name\": \"ImportDirective\",\n        \"src\": \"545:41:41\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6102,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/AddressResolver.sol\",\n          \"file\": \"../external/synthetix/AddressResolver.sol\",\n          \"scope\": 9975,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9890,\n        \"name\": \"ImportDirective\",\n        \"src\": \"590:51:41\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6116,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/ExchangeRates.sol\",\n          \"file\": \"../external/synthetix/ExchangeRates.sol\",\n          \"scope\": 9975,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9891,\n        \"name\": \"ImportDirective\",\n        \"src\": \"643:49:41\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6124,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/ISynth.sol\",\n          \"file\": \"../external/synthetix/ISynth.sol\",\n          \"scope\": 9975,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9892,\n        \"name\": \"ImportDirective\",\n        \"src\": \"694:42:41\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6130,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/MixinResolver.sol\",\n          \"file\": \"../external/synthetix/MixinResolver.sol\",\n          \"scope\": 9975,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9893,\n        \"name\": \"ImportDirective\",\n        \"src\": \"738:49:41\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6135,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/synthetix/Proxy.sol\",\n          \"file\": \"../external/synthetix/Proxy.sol\",\n          \"scope\": 9975,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9894,\n        \"name\": \"ImportDirective\",\n        \"src\": \"789:41:41\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [9974, 6023],\n          \"name\": \"SynthetixPriceOracle\",\n          \"scope\": 9975\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title SynthetixPriceOracle\\n @notice Returns prices for Synths from Synthetix's official `ExchangeRates` contract.\\n @dev Implements `PriceOracle`.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n            },\n            \"id\": 9895,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"834:242:41\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 9896,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1111:11:41\"\n              }\n            ],\n            \"id\": 9897,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"1111:11:41\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 10932,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 9898,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1136:19:41\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 9899,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"1160:7:41\"\n              }\n            ],\n            \"id\": 9900,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"1130:38:41\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 9974,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n                },\n                \"id\": 9901,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1176:111:41\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 9905,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"1345:8:41\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 9973,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 9902,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"1321:6:41\"\n                      }\n                    ],\n                    \"id\": 9903,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1321:13:41\"\n                  }\n                ],\n                \"id\": 9904,\n                \"name\": \"ParameterList\",\n                \"src\": \"1320:15:41\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 9973,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9906,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1368:4:41\"\n                      }\n                    ],\n                    \"id\": 9907,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1368:4:41\"\n                  }\n                ],\n                \"id\": 9908,\n                \"name\": \"ParameterList\",\n                \"src\": \"1367:6:41\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9910]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlying\",\n                          \"overrides\": null,\n                          \"scope\": 9972,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 9909,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1385:7:41\"\n                          }\n                        ],\n                        \"id\": 9910,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1385:18:41\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"underlying\",\n                              \"referencedDeclaration\": 5711,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract CErc20\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 5723,\n                                      \"type\": \"type(contract CErc20)\",\n                                      \"value\": \"CErc20\"\n                                    },\n                                    \"id\": 9911,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"1406:6:41\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                              \"typeString\": \"contract CToken\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 9912,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"1413:7:41\"\n                                          }\n                                        ],\n                                        \"id\": 9913,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"1413:7:41\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9903,\n                                          \"type\": \"contract CToken\",\n                                          \"value\": \"cToken\"\n                                        },\n                                        \"id\": 9914,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1421:6:41\"\n                                      }\n                                    ],\n                                    \"id\": 9915,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1413:15:41\"\n                                  }\n                                ],\n                                \"id\": 9916,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1406:23:41\"\n                              }\n                            ],\n                            \"id\": 9917,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1406:34:41\"\n                          }\n                        ],\n                        \"id\": 9918,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1406:36:41\"\n                      }\n                    ],\n                    \"id\": 9919,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1385:57:41\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9921]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"baseUnit\",\n                          \"overrides\": null,\n                          \"scope\": 9972,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 9920,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1453:7:41\"\n                          }\n                        ],\n                        \"id\": 9921,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1453:16:41\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"**\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3130\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 10\",\n                              \"value\": \"10\"\n                            },\n                            \"id\": 9922,\n                            \"name\": \"Literal\",\n                            \"src\": \"1472:2:41\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint8\",\n                                      \"typeString\": \"uint8\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"type(uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint\",\n                                      \"type\": null\n                                    },\n                                    \"id\": 9923,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"1478:4:41\"\n                                  }\n                                ],\n                                \"id\": 9924,\n                                \"name\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"1478:4:41\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint8\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"decimals\",\n                                      \"referencedDeclaration\": 11105,\n                                      \"type\": \"function () view external returns (uint8)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"contract ERC20Upgradeable\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_address\",\n                                                  \"typeString\": \"address\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 11533,\n                                              \"type\": \"type(contract ERC20Upgradeable)\",\n                                              \"value\": \"ERC20Upgradeable\"\n                                            },\n                                            \"id\": 9925,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1483:16:41\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9910,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 9926,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1500:10:41\"\n                                          }\n                                        ],\n                                        \"id\": 9927,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1483:28:41\"\n                                      }\n                                    ],\n                                    \"id\": 9928,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1483:37:41\"\n                                  }\n                                ],\n                                \"id\": 9929,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1483:39:41\"\n                              }\n                            ],\n                            \"id\": 9930,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1478:45:41\"\n                          }\n                        ],\n                        \"id\": 9931,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"1472:51:41\"\n                      }\n                    ],\n                    \"id\": 9932,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1453:70:41\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"address\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9910,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 9933,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1534:10:41\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"target\",\n                                  \"referencedDeclaration\": 6133,\n                                  \"type\": \"function () view external returns (address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract Proxy\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 6134,\n                                          \"type\": \"type(contract Proxy)\",\n                                          \"value\": \"Proxy\"\n                                        },\n                                        \"id\": 9934,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1547:5:41\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 9910,\n                                          \"type\": \"address\",\n                                          \"value\": \"underlying\"\n                                        },\n                                        \"id\": 9935,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1553:10:41\"\n                                      }\n                                    ],\n                                    \"id\": 9936,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1547:17:41\"\n                                  }\n                                ],\n                                \"id\": 9937,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1547:24:41\"\n                              }\n                            ],\n                            \"id\": 9938,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1547:26:41\"\n                          }\n                        ],\n                        \"id\": 9939,\n                        \"name\": \"Assignment\",\n                        \"src\": \"1534:39:41\"\n                      }\n                    ],\n                    \"id\": 9940,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"1534:39:41\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [9942]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"exchangeRates\",\n                          \"overrides\": null,\n                          \"scope\": 9972,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"contract ExchangeRates\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"contractScope\": null,\n                              \"name\": \"ExchangeRates\",\n                              \"referencedDeclaration\": 6115,\n                              \"type\": \"contract ExchangeRates\"\n                            },\n                            \"id\": 9941,\n                            \"name\": \"UserDefinedTypeName\",\n                            \"src\": \"1703:13:41\"\n                          }\n                        ],\n                        \"id\": 9942,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1703:27:41\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"contract ExchangeRates\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 6115,\n                              \"type\": \"type(contract ExchangeRates)\",\n                              \"value\": \"ExchangeRates\"\n                            },\n                            \"id\": 9943,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1733:13:41\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_stringliteral_bf37716bb81d79af332360ca92da271363e4c74afe8b9297a83aca9ec6ca0426\",\n                                      \"typeString\": \"literal_string \\\"ExchangeRates\\\"\"\n                                    },\n                                    {\n                                      \"typeIdentifier\": \"t_stringliteral_32d19cf45d6db5cb7b6b96d6620e378bc243b6cfad043f08691fdd8f7ca81b11\",\n                                      \"typeString\": \"literal_string \\\"Failed to get Synthetix's ExchangeRates contract address.\\\"\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"requireAndGetAddress\",\n                                  \"referencedDeclaration\": 6100,\n                                  \"type\": \"function (bytes32,string memory) view external returns (address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract AddressResolver\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"resolver\",\n                                          \"referencedDeclaration\": 6128,\n                                          \"type\": \"function () view external returns (contract AddressResolver)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"contract MixinResolver\",\n                                              \"type_conversion\": true\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_address\",\n                                                      \"typeString\": \"address\"\n                                                    }\n                                                  ],\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 6129,\n                                                  \"type\": \"type(contract MixinResolver)\",\n                                                  \"value\": \"MixinResolver\"\n                                                },\n                                                \"id\": 9944,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1747:13:41\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 9910,\n                                                  \"type\": \"address\",\n                                                  \"value\": \"underlying\"\n                                                },\n                                                \"id\": 9945,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1761:10:41\"\n                                              }\n                                            ],\n                                            \"id\": 9946,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"1747:25:41\"\n                                          }\n                                        ],\n                                        \"id\": 9947,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"1747:34:41\"\n                                      }\n                                    ],\n                                    \"id\": 9948,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1747:36:41\"\n                                  }\n                                ],\n                                \"id\": 9949,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1747:57:41\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"45786368616e67655261746573\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"string\",\n                                  \"type\": \"literal_string \\\"ExchangeRates\\\"\",\n                                  \"value\": \"ExchangeRates\"\n                                },\n                                \"id\": 9950,\n                                \"name\": \"Literal\",\n                                \"src\": \"1805:15:41\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"4661696c656420746f206765742053796e74686574697827732045786368616e6765526174657320636f6e747261637420616464726573732e\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"string\",\n                                  \"type\": \"literal_string \\\"Failed to get Synthetix's ExchangeRates contract address.\\\"\",\n                                  \"value\": \"Failed to get Synthetix's ExchangeRates contract address.\"\n                                },\n                                \"id\": 9951,\n                                \"name\": \"Literal\",\n                                \"src\": \"1822:59:41\"\n                              }\n                            ],\n                            \"id\": 9952,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1747:135:41\"\n                          }\n                        ],\n                        \"id\": 9953,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1733:150:41\"\n                      }\n                    ],\n                    \"id\": 9954,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1703:180:41\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 9908\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                          \"typeString\": \"int_const 1000000000000000000\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_bytes32\",\n                                                  \"typeString\": \"bytes32\"\n                                                },\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                },\n                                                {\n                                                  \"typeIdentifier\": \"t_stringliteral_aaaebeba3810b1e6b70781f14b2d72c1cb89c0b2b320c43bb67ff79f562f5ff4\",\n                                                  \"typeString\": \"literal_string \\\"ETH\\\"\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"effectiveValue\",\n                                              \"referencedDeclaration\": 6114,\n                                              \"type\": \"function (bytes32,uint256,bytes32) view external returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 9942,\n                                                  \"type\": \"contract ExchangeRates\",\n                                                  \"value\": \"exchangeRates\"\n                                                },\n                                                \"id\": 9955,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1901:13:41\"\n                                              }\n                                            ],\n                                            \"id\": 9956,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"1901:28:41\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"arguments\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"bytes32\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [null],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"currencyKey\",\n                                                  \"referencedDeclaration\": 6122,\n                                                  \"type\": \"function () view external returns (bytes32)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"isStructConstructorCall\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"names\": [null],\n                                                      \"tryCall\": false,\n                                                      \"type\": \"contract ISynth\",\n                                                      \"type_conversion\": true\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": [\n                                                            {\n                                                              \"typeIdentifier\": \"t_address\",\n                                                              \"typeString\": \"address\"\n                                                            }\n                                                          ],\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 6123,\n                                                          \"type\": \"type(contract ISynth)\",\n                                                          \"value\": \"ISynth\"\n                                                        },\n                                                        \"id\": 9957,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"1930:6:41\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 9910,\n                                                          \"type\": \"address\",\n                                                          \"value\": \"underlying\"\n                                                        },\n                                                        \"id\": 9958,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"1937:10:41\"\n                                                      }\n                                                    ],\n                                                    \"id\": 9959,\n                                                    \"name\": \"FunctionCall\",\n                                                    \"src\": \"1930:18:41\"\n                                                  }\n                                                ],\n                                                \"id\": 9960,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"1930:30:41\"\n                                              }\n                                            ],\n                                            \"id\": 9961,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"1930:32:41\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 9921,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"baseUnit\"\n                                            },\n                                            \"id\": 9962,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1964:8:41\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"hexvalue\": \"455448\",\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"subdenomination\": null,\n                                              \"token\": \"string\",\n                                              \"type\": \"literal_string \\\"ETH\\\"\",\n                                              \"value\": \"ETH\"\n                                            },\n                                            \"id\": 9963,\n                                            \"name\": \"Literal\",\n                                            \"src\": \"1974:5:41\"\n                                          }\n                                        ],\n                                        \"id\": 9964,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1901:79:41\"\n                                      }\n                                    ],\n                                    \"id\": 9965,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1901:83:41\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"31653138\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 1000000000000000000\",\n                                      \"value\": \"1e18\"\n                                    },\n                                    \"id\": 9966,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"1985:4:41\"\n                                  }\n                                ],\n                                \"id\": 9967,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1901:89:41\"\n                              }\n                            ],\n                            \"id\": 9968,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1901:93:41\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9921,\n                              \"type\": \"uint256\",\n                              \"value\": \"baseUnit\"\n                            },\n                            \"id\": 9969,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1995:8:41\"\n                          }\n                        ],\n                        \"id\": 9970,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1901:103:41\"\n                      }\n                    ],\n                    \"id\": 9971,\n                    \"name\": \"Return\",\n                    \"src\": \"1894:110:41\"\n                  }\n                ],\n                \"id\": 9972,\n                \"name\": \"Block\",\n                \"src\": \"1374:638:41\"\n              }\n            ],\n            \"id\": 9973,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1293:719:41\"\n          }\n        ],\n        \"id\": 9974,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"1078:937:41\"\n      }\n    ],\n    \"id\": 9975,\n    \"name\": \"SourceUnit\",\n    \"src\": \"312:1705:41\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.164Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements `PriceOracle`.\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n      }\n    },\n    \"title\": \"SynthetixPriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"notice\": \"Returns prices for Synths from Synthetix's official `ExchangeRates` contract.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/UniswapLpTokenPriceOracle.json",
    "content": "{\n  \"contractName\": \"UniswapLpTokenPriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"underlying\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"price\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"underlying\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"price\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Implements the PriceOracle interface for Fuse pools (and Compound v2).\\\",\\\"params\\\":{\\\"cToken\\\":\\\"The cToken address for price retrieval\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH, with 18 decimals, for the given cToken address\\\"}},\\\"price(address)\\\":{\\\"params\\\":{\\\"underlying\\\":\\\"The underlying token address for which to get the price (set to zero address for ETH)\\\"},\\\"returns\\\":{\\\"_0\\\":\\\"Price denominated in ETH (scaled by 1e18)\\\"}}},\\\"stateVariables\\\":{\\\"WETH_ADDRESS\\\":{\\\"details\\\":\\\"WETH contract address.\\\"}},\\\"title\\\":\\\"UniswapLpTokenPriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"notice\\\":\\\"Get the underlying price of a cToken.\\\"},\\\"price(address)\\\":{\\\"notice\\\":\\\"Get the LP token price price for an underlying token address.\\\"}},\\\"notice\\\":\\\"UniswapLpTokenPriceOracle is a price oracle for Uniswap (and SushiSwap) LP tokens.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapLpTokenPriceOracle.sol\\\":\\\"UniswapLpTokenPriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Pair.sol\\\":{\\\"keccak256\\\":\\\"0x32f2ac1a04860ddedb880798a86ebb9b672007a32088a0a26c4f2d84991dff31\\\",\\\"license\\\":\\\"GPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://fa9242659aea58bca561a8d1d1aeb435b70da1fab187518457929f9237e8f36b\\\",\\\"dweb:/ipfs/QmVkafRYyXjEmoii7k8aYzqWwoPPpYe4nE8c78aAERKpMC\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xf267cd7f597c43c528b18543849347126d814357a0c3e262ac657f3054260a89\\\",\\\"urls\\\":[\\\"bzz-raw://d315fcc20e26f6378189167f4ab86893819903823ea18a485588f355aab5e036\\\",\\\"dweb:/ipfs/QmYG9oa8Rti6u7bAoBWJC8TtSqM1V8QsBiivsQo9y4wkAF\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapLpTokenPriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xf02932af6e349f5ffa222644f9ffad7d0342c02fc13ecd1934002198f3d3f62c\\\",\\\"urls\\\":[\\\"bzz-raw://0e4667f01f7a3aeb3fe2fea26d739d13a0725ed123f9c54c8bb0463ee31df305\\\",\\\"dweb:/ipfs/QmXmbcJkHkjogqP98fZzo1QUCM6oCYEJpZ5MQRF4Zgxx7H\\\"]},\\\"@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\\\",\\\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xae7044b7c89ed74327b0979ae6f317c65d87b8d17a42d0c62d698d77d5de5511\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://d676c978d8ecee5c4510f045b747d94f3a1381e39feb870d2675d5b6d45a371b\\\",\\\"dweb:/ipfs/QmUAokuHWPVAf14QkhPtSdYFyNa8HVje9CBEzwCcxH3xkP\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x9e71cf53c2ee5c9e4f183e168028fc208560493aaf48668bca0981bb2c8359c2\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7cb9d29f7bc76b077649ccef2043e1492a462afcb2410f443e63233f206a95dd\\\",\\\"dweb:/ipfs/QmRDXEro4hh2E6rTUAWvBkHzivAS1TBmtSLP1mRGAHVnnL\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50610885806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063aea910781461003b578063fc57d4df14610073575b600080fd5b6100616004803603602081101561005157600080fd5b50356001600160a01b0316610099565b60408051918252519081900360200190f35b6100616004803603602081101561008957600080fd5b50356001600160a01b03166100ac565b60006100a4826101b5565b90505b919050565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156100e857600080fd5b505afa1580156100fc573d6000803e3d6000fd5b505050506040513d602081101561011257600080fd5b50516040805163313ce56760e01b815290519192506101ae916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561015b57600080fd5b505afa15801561016f573d6000803e3d6000fd5b505050506040513d602081101561018557600080fd5b505160ff16600a0a6101a8670de0b6b3a76400006101a2856101b5565b906105a2565b90610604565b9392505050565b6000808290506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101f657600080fd5b505afa15801561020a573d6000803e3d6000fd5b505050506040513d602081101561022057600080fd5b5051905080610234576000925050506100a7565b600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561027057600080fd5b505afa158015610284573d6000803e3d6000fd5b505050506040513d606081101561029a57600080fd5b50805160209182015160408051630dfe168160e01b815290516dffffffffffffffffffffffffffff93841696509290911693506000926001600160a01b03881692630dfe1681926004808201939291829003018186803b1580156102fd57600080fd5b505afa158015610311573d6000803e3d6000fd5b505050506040513d602081101561032757600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0388169163d21220a7916004808301926020929190829003018186803b15801561036f57600080fd5b505afa158015610383573d6000803e3d6000fd5b505050506040513d602081101561039957600080fd5b5051905060006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2146104bf576104ba836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ff57600080fd5b505afa158015610413573d6000803e3d6000fd5b505050506040513d602081101561042957600080fd5b5051604080516315d5220f60e31b81526001600160a01b0387166004820152905160ff909216600a0a916101a891670de0b6b3a764000091339163aea91078916024808301926020929190829003018186803b15801561048857600080fd5b505afa15801561049c573d6000803e3d6000fd5b505050506040513d60208110156104b257600080fd5b5051906105a2565b6104c9565b670de0b6b3a76400005b905060006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2146105325761052d836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ff57600080fd5b61053c565b670de0b6b3a76400005b9050600061055e886101a8600160701b6101a26105598c8c6105a2565b610646565b9050610593600160381b6101a861057485610646565b6101a2600160381b6101a86105888a610646565b6101a28960026105a2565b9b9a5050505050505050505050565b6000826105b1575060006105fe565b828202828482816105be57fe5b04146105fb5760405162461bcd60e51b815260040180806020018281038252602181526020018061082f6021913960400191505060405180910390fd5b90505b92915050565b60006105fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061078c565b600081610655575060006100a7565b816001600160801b821061066e5760809190911c9060401b5b6801000000000000000082106106895760409190911c9060201b5b64010000000082106106a05760209190911c9060101b5b6201000082106106b55760109190911c9060081b5b61010082106106c95760089190911c9060041b5b601082106106dc5760049190911c9060021b5b600882106106e85760011b5b60018185816106f357fe5b048201901c9050600181858161070557fe5b048201901c9050600181858161071757fe5b048201901c9050600181858161072957fe5b048201901c9050600181858161073b57fe5b048201901c9050600181858161074d57fe5b048201901c9050600181858161075f57fe5b048201901c9050600081858161077157fe5b0490508082106107815780610783565b815b95945050505050565b600081836108185760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107dd5781810151838201526020016107c5565b50505050905090810190601f16801561080a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161082457fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220793de2f5f64062a0c3b010b7218b59c560f765a1a53aff7846ccb5094b5d384464736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063aea910781461003b578063fc57d4df14610073575b600080fd5b6100616004803603602081101561005157600080fd5b50356001600160a01b0316610099565b60408051918252519081900360200190f35b6100616004803603602081101561008957600080fd5b50356001600160a01b03166100ac565b60006100a4826101b5565b90505b919050565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156100e857600080fd5b505afa1580156100fc573d6000803e3d6000fd5b505050506040513d602081101561011257600080fd5b50516040805163313ce56760e01b815290519192506101ae916001600160a01b0384169163313ce567916004808301926020929190829003018186803b15801561015b57600080fd5b505afa15801561016f573d6000803e3d6000fd5b505050506040513d602081101561018557600080fd5b505160ff16600a0a6101a8670de0b6b3a76400006101a2856101b5565b906105a2565b90610604565b9392505050565b6000808290506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101f657600080fd5b505afa15801561020a573d6000803e3d6000fd5b505050506040513d602081101561022057600080fd5b5051905080610234576000925050506100a7565b600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561027057600080fd5b505afa158015610284573d6000803e3d6000fd5b505050506040513d606081101561029a57600080fd5b50805160209182015160408051630dfe168160e01b815290516dffffffffffffffffffffffffffff93841696509290911693506000926001600160a01b03881692630dfe1681926004808201939291829003018186803b1580156102fd57600080fd5b505afa158015610311573d6000803e3d6000fd5b505050506040513d602081101561032757600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0388169163d21220a7916004808301926020929190829003018186803b15801561036f57600080fd5b505afa158015610383573d6000803e3d6000fd5b505050506040513d602081101561039957600080fd5b5051905060006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2146104bf576104ba836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ff57600080fd5b505afa158015610413573d6000803e3d6000fd5b505050506040513d602081101561042957600080fd5b5051604080516315d5220f60e31b81526001600160a01b0387166004820152905160ff909216600a0a916101a891670de0b6b3a764000091339163aea91078916024808301926020929190829003018186803b15801561048857600080fd5b505afa15801561049c573d6000803e3d6000fd5b505050506040513d60208110156104b257600080fd5b5051906105a2565b6104c9565b670de0b6b3a76400005b905060006001600160a01b03831673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2146105325761052d836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ff57600080fd5b61053c565b670de0b6b3a76400005b9050600061055e886101a8600160701b6101a26105598c8c6105a2565b610646565b9050610593600160381b6101a861057485610646565b6101a2600160381b6101a86105888a610646565b6101a28960026105a2565b9b9a5050505050505050505050565b6000826105b1575060006105fe565b828202828482816105be57fe5b04146105fb5760405162461bcd60e51b815260040180806020018281038252602181526020018061082f6021913960400191505060405180910390fd5b90505b92915050565b60006105fb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061078c565b600081610655575060006100a7565b816001600160801b821061066e5760809190911c9060401b5b6801000000000000000082106106895760409190911c9060201b5b64010000000082106106a05760209190911c9060101b5b6201000082106106b55760109190911c9060081b5b61010082106106c95760089190911c9060041b5b601082106106dc5760049190911c9060021b5b600882106106e85760011b5b60018185816106f357fe5b048201901c9050600181858161070557fe5b048201901c9050600181858161071757fe5b048201901c9050600181858161072957fe5b048201901c9050600181858161073b57fe5b048201901c9050600181858161074d57fe5b048201901c9050600181858161075f57fe5b048201901c9050600081858161077157fe5b0490508082106107815780610783565b815b95945050505050565b600081836108185760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107dd5781810151838201526020016107c5565b50505050905090810190601f16801561080a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161082457fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220793de2f5f64062a0c3b010b7218b59c560f765a1a53aff7846ccb5094b5d384464736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"1025:4044:42:-:0;;;;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"1025:4044:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1539:108;;;;;;;;;;;;;;;;-1:-1:-1;1539:108:42;-1:-1:-1;;;;;1539:108:42;;:::i;:::-;;;;;;;;;;;;;;;;1961:444;;;;;;;;;;;;;;;;-1:-1:-1;1961:444:42;-1:-1:-1;;;;;1961:444:42;;:::i;1539:108::-;1597:4;1621:18;1628:10;1621:6;:18::i;:::-;1614:25;;1539:108;;;;:::o;1961:444::-;2036:4;2053:18;2089:6;-1:-1:-1;;;;;2074:34:42;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2074:36:42;2356:39;;;-1:-1:-1;;;2356:39:42;;;;2074:36;;-1:-1:-1;2309:88:42;;-1:-1:-1;;;;;2356:37:42;;;;;:39;;;;;2074:36;;2356:39;;;;;;;:37;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2356:39:42;2348:48;;2342:2;:54;2309:28;2332:4;2309:18;2316:10;2309:6;:18::i;:::-;:22;;:28::i;:::-;:32;;:88::i;:::-;2302:95;1961:444;-1:-1:-1;;;1961:444:42:o;2525:1158::-;2587:4;2604:19;2641:5;2604:43;;2658:16;2677:4;-1:-1:-1;;;;;2677:16:42;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2677:18:42;;-1:-1:-1;2710:16:42;2706:30;;2735:1;2728:8;;;;;;2706:30;2748:13;2763;2782:4;-1:-1:-1;;;;;2782:16:42;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2782:18:42;;;;;;;;2828:13;;-1:-1:-1;;;2828:13:42;;;;2747:53;;;;;-1:-1:-1;2747:53:42;;;;;-1:-1:-1;2811:14:42;;-1:-1:-1;;;;;2828:11:42;;;;;:13;;;;;2782:18;2828:13;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2828:13:42;2869;;;-1:-1:-1;;;2869:13:42;;;;2828;;-1:-1:-1;2852:14:42;;-1:-1:-1;;;;;2869:11:42;;;;;:13;;;;;2828;;2869;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2869:13:42;;-1:-1:-1;2978:20:42;-1:-1:-1;;;;;3001:22:42;;1222:42;3001:22;:139;;3033:107;3120:6;-1:-1:-1;;;;;3103:33:42;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3103:35:42;3033:41;;;-1:-1:-1;;;3033:41:42;;-1:-1:-1;;;;;3033:41:42;;;;;;;;3095:44;;;;3089:2;:50;;3033:51;;3079:4;;3049:10;;3033:33;;:41;;;;;3103:35;;3033:41;;;;;;;3049:10;3033:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3033:41:42;;:45;:51::i;:107::-;3001:139;;;3026:4;3001:139;2978:162;-1:-1:-1;3151:20:42;-1:-1:-1;;;;;3174:22:42;;1222:42;3174:22;:139;;3206:107;3293:6;-1:-1:-1;;;;;3276:33:42;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3206:107;3174:139;;;3199:4;3174:139;3151:162;-1:-1:-1;3490:13:42;3506:59;3553:11;3506:42;-1:-1:-1;;;3506:28:42;3511:22;:8;3524;3511:12;:22::i;:::-;3506:4;:28::i;:59::-;3490:75;;3583:92;-1:-1:-1;;;3583:79:42;3640:21;3645:15;3640:4;:21::i;:::-;3583:52;-1:-1:-1;;;3583:39:42;3600:21;3605:15;3600:4;:21::i;:::-;3583:12;:5;3593:1;3583:9;:12::i;:92::-;3576:99;2525:1158;-1:-1:-1;;;;;;;;;;;2525:1158:42:o;2199:459:47:-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:47;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:1;-1:-1:-1;2199:459:47;;;;;:::o;3120:130::-;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;:3;:39::i;3992:1074:42:-;4037:4;4058:6;4054:20;;-1:-1:-1;4073:1:42;4066:8;;4054:20;4095:1;4116;-1:-1:-1;;;4134:41:42;;4130:107;;4199:3;4192:10;;;;;4223:2;4217:8;4130:107;4257:19;4251:2;:25;4247:90;;4300:2;4293:9;;;;;4323:2;4317:8;4247:90;4357:11;4351:2;:17;4347:82;;4392:2;4385:9;;;;;4415:2;4409:8;4347:82;4449:7;4443:2;:13;4439:77;;4480:2;4473:9;;;;;4503:1;4497:7;4439:77;4536:5;4530:2;:11;4526:74;;4565:1;4558:8;;;;;4587:1;4581:7;4526:74;4620:4;4614:2;:10;4610:73;;4648:1;4641:8;;;;;4670:1;4664:7;4610:73;4703:3;4697:2;:9;4693:49;;4729:1;4723:7;4693:49;4773:1;4767;4763;:5;;;;;;4759:1;:9;4758:16;;4754:20;;4804:1;4798;4794;:5;;;;;;4790:1;:9;4789:16;;4785:20;;4835:1;4829;4825;:5;;;;;;4821:1;:9;4820:16;;4816:20;;4866:1;4860;4856;:5;;;;;;4852:1;:9;4851:16;;4847:20;;4897:1;4891;4887;:5;;;;;;4883:1;:9;4882:16;;4878:20;;4928:1;4922;4918;:5;;;;;;4914:1;:9;4913:16;;4909:20;;4959:1;4953;4949;:5;;;;;;4945:1;:9;4944:16;;4940:20;;5008:7;5022:1;5018;:5;;;;;;5008:15;;5046:2;5042:1;:6;:15;;5055:2;5042:15;;;5051:1;5042:15;5034:24;3992:1074;-1:-1:-1;;;;;3992:1074:42:o;3732:272:47:-;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:47:o\",\n  \"source\": \"/**\\r\\n * COPYRIGHT © 2020 RARI CAPITAL, INC. ALL RIGHTS RESERVED.\\r\\n * No one is permitted to use the software for any purpose without the explicit permission of David Lucid of Rari Capital, Inc.\\r\\n * This license is liable to change at any time at the sole discretion of David Lucid of Rari Capital, Inc.\\r\\n */\\r\\n\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CToken.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"../external/uniswap/IUniswapV2Pair.sol\\\";\\r\\n\\r\\nimport \\\"./BasePriceOracle.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title UniswapLpTokenPriceOracle\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n * @notice UniswapLpTokenPriceOracle is a price oracle for Uniswap (and SushiSwap) LP tokens.\\r\\n * @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\\r\\n */\\r\\ncontract UniswapLpTokenPriceOracle is PriceOracle {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @dev WETH contract address.\\r\\n     */\\r\\n    address constant private WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\\r\\n\\r\\n    /**\\r\\n     * @notice Get the LP token price price for an underlying token address.\\r\\n     * @param underlying The underlying token address for which to get the price (set to zero address for ETH)\\r\\n     * @return Price denominated in ETH (scaled by 1e18)\\r\\n     */\\r\\n    function price(address underlying) external view returns (uint) {\\r\\n        return _price(underlying);\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @notice Get the underlying price of a cToken.\\r\\n     * @dev Implements the PriceOracle interface for Fuse pools (and Compound v2).\\r\\n     * @param cToken The cToken address for price retrieval\\r\\n     * @return Price denominated in ETH, with 18 decimals, for the given cToken address\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        address underlying = CErc20(address(cToken)).underlying();\\r\\n        // Comptroller needs prices to be scaled by 1e(36 - decimals)\\r\\n        // Since `_price` returns prices scaled by 18 decimals, we must scale them by 1e(36 - 18 - decimals)\\r\\n        return _price(underlying).mul(1e18).div(10 ** uint256(ERC20Upgradeable(underlying).decimals()));\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Fetches the fair LP token/ETH price from Uniswap, with 18 decimals of precision.\\r\\n     */\\r\\n    function _price(address token) internal view virtual returns (uint) {\\r\\n        IUniswapV2Pair pair = IUniswapV2Pair(token);\\r\\n        uint totalSupply = pair.totalSupply();\\r\\n        if (totalSupply == 0) return 0;\\r\\n        (uint reserve0, uint reserve1, ) = pair.getReserves();\\r\\n        address token0 = pair.token0();\\r\\n        address token1 = pair.token1();\\r\\n\\r\\n        // Get fair price of non-WETH token (underlying the pair) in terms of ETH\\r\\n        uint token0FairPrice = token0 == WETH_ADDRESS ? 1e18 : BasePriceOracle(msg.sender).price(token0).mul(1e18).div(10 ** uint256(ERC20Upgradeable(token0).decimals()));\\r\\n        uint token1FairPrice = token1 == WETH_ADDRESS ? 1e18 : BasePriceOracle(msg.sender).price(token1).mul(1e18).div(10 ** uint256(ERC20Upgradeable(token1).decimals()));\\r\\n\\r\\n        // Implementation from https://github.com/AlphaFinanceLab/homora-v2/blob/e643392d582c81f6695136971cff4b685dcd2859/contracts/oracle/UniswapV2Oracle.sol#L18\\r\\n        uint256 sqrtK = sqrt(reserve0.mul(reserve1)).mul(2 ** 112).div(totalSupply);\\r\\n        return sqrtK.mul(2).mul(sqrt(token0FairPrice)).div(2 ** 56).mul(sqrt(token1FairPrice)).div(2 ** 56);\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @dev Fast square root function.\\r\\n     * Implementation from: https://github.com/Uniswap/uniswap-lib/commit/99f3f28770640ba1bb1ff460ac7c5292fb8291a0\\r\\n     * Original implementation: https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L687\\r\\n     */\\r\\n    function sqrt(uint x) internal pure returns (uint) {\\r\\n        if (x == 0) return 0;\\r\\n        uint xx = x;\\r\\n        uint r = 1;\\r\\n\\r\\n        if (xx >= 0x100000000000000000000000000000000) {\\r\\n            xx >>= 128;\\r\\n            r <<= 64;\\r\\n        }\\r\\n        if (xx >= 0x10000000000000000) {\\r\\n            xx >>= 64;\\r\\n            r <<= 32;\\r\\n        }\\r\\n        if (xx >= 0x100000000) {\\r\\n            xx >>= 32;\\r\\n            r <<= 16;\\r\\n        }\\r\\n        if (xx >= 0x10000) {\\r\\n            xx >>= 16;\\r\\n            r <<= 8;\\r\\n        }\\r\\n        if (xx >= 0x100) {\\r\\n            xx >>= 8;\\r\\n            r <<= 4;\\r\\n        }\\r\\n        if (xx >= 0x10) {\\r\\n            xx >>= 4;\\r\\n            r <<= 2;\\r\\n        }\\r\\n        if (xx >= 0x8) {\\r\\n            r <<= 1;\\r\\n        }\\r\\n\\r\\n        r = (r + x / r) >> 1;\\r\\n        r = (r + x / r) >> 1;\\r\\n        r = (r + x / r) >> 1;\\r\\n        r = (r + x / r) >> 1;\\r\\n        r = (r + x / r) >> 1;\\r\\n        r = (r + x / r) >> 1;\\r\\n        r = (r + x / r) >> 1; // Seven iterations should be enough\\r\\n        uint r1 = x / r;\\r\\n        return (r < r1 ? r : r1);\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapLpTokenPriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapLpTokenPriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"UniswapLpTokenPriceOracle\": [10397]\n    },\n    \"id\": 10398,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 9976,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"312:23:42\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 9977,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10398,\n        \"sourceUnit\": 10933,\n        \"src\": \"339:74:42\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n        \"id\": 9978,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10398,\n        \"sourceUnit\": 11534,\n        \"src\": \"415:78:42\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 9979,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10398,\n        \"sourceUnit\": 6024,\n        \"src\": \"497:46:42\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n        \"file\": \"../external/compound/CToken.sol\",\n        \"id\": 9980,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10398,\n        \"sourceUnit\": 5867,\n        \"src\": \"545:41:42\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 9981,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10398,\n        \"sourceUnit\": 5724,\n        \"src\": \"588:41:42\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Pair.sol\",\n        \"file\": \"../external/uniswap/IUniswapV2Pair.sol\",\n        \"id\": 9982,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10398,\n        \"sourceUnit\": 6391,\n        \"src\": \"633:48:42\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n        \"file\": \"./BasePriceOracle.sol\",\n        \"id\": 9983,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10398,\n        \"sourceUnit\": 7739,\n        \"src\": \"685:31:42\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 9985,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"1063:11:42\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 9986,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"1063:11:42\"\n          }\n        ],\n        \"contractDependencies\": [6023],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 9984,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"720:303:42\",\n          \"text\": \" @title UniswapLpTokenPriceOracle\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\n @notice UniswapLpTokenPriceOracle is a price oracle for Uniswap (and SushiSwap) LP tokens.\\n @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 10397,\n        \"linearizedBaseContracts\": [10397, 6023],\n        \"name\": \"UniswapLpTokenPriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 9989,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 9987,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 10932,\n              \"src\": \"1088:19:42\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$10932\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"1082:38:42\",\n            \"typeName\": {\n              \"id\": 9988,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1112:7:42\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 9990,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1128:48:42\",\n              \"text\": \" @dev WETH contract address.\"\n            },\n            \"id\": 9993,\n            \"mutability\": \"constant\",\n            \"name\": \"WETH_ADDRESS\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 10397,\n            \"src\": \"1182:82:42\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 9991,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"1182:7:42\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n              \"id\": 9992,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"1222:42:42\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              },\n              \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n            },\n            \"visibility\": \"private\"\n          },\n          {\n            \"body\": {\n              \"id\": 10005,\n              \"nodeType\": \"Block\",\n              \"src\": \"1603:44:42\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 10002,\n                        \"name\": \"underlying\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9996,\n                        \"src\": \"1628:10:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 10001,\n                      \"name\": \"_price\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10195,\n                      \"src\": \"1621:6:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                        \"typeString\": \"function (address) view returns (uint256)\"\n                      }\n                    },\n                    \"id\": 10003,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1621:18:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 10000,\n                  \"id\": 10004,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1614:25:42\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 9994,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1273:260:42\",\n              \"text\": \" @notice Get the LP token price price for an underlying token address.\\n @param underlying The underlying token address for which to get the price (set to zero address for ETH)\\n @return Price denominated in ETH (scaled by 1e18)\"\n            },\n            \"functionSelector\": \"aea91078\",\n            \"id\": 10006,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 9997,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9996,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"underlying\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10006,\n                  \"src\": \"1554:18:42\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9995,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1554:7:42\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1553:20:42\"\n            },\n            \"returnParameters\": {\n              \"id\": 10000,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 9999,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10006,\n                  \"src\": \"1597:4:42\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 9998,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1597:4:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1596:6:42\"\n            },\n            \"scope\": 10397,\n            \"src\": \"1539:108:42\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 10045,\n              \"nodeType\": \"Block\",\n              \"src\": \"2042:363:42\",\n              \"statements\": [\n                {\n                  \"assignments\": [10016],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10016,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10045,\n                      \"src\": \"2053:18:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10015,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2053:7:42\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10025,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 10020,\n                                \"name\": \"cToken\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10009,\n                                \"src\": \"2089:6:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                  \"typeString\": \"contract CToken\"\n                                }\n                              ],\n                              \"id\": 10019,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"ElementaryTypeNameExpression\",\n                              \"src\": \"2081:7:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_address_$\",\n                                \"typeString\": \"type(address)\"\n                              },\n                              \"typeName\": {\n                                \"id\": 10018,\n                                \"name\": \"address\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"2081:7:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": null,\n                                  \"typeString\": null\n                                }\n                              }\n                            },\n                            \"id\": 10021,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"2081:15:42\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 10017,\n                          \"name\": \"CErc20\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 5723,\n                          \"src\": \"2074:6:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                            \"typeString\": \"type(contract CErc20)\"\n                          }\n                        },\n                        \"id\": 10022,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2074:23:42\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                          \"typeString\": \"contract CErc20\"\n                        }\n                      },\n                      \"id\": 10023,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"underlying\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 5711,\n                      \"src\": \"2074:34:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 10024,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2074:36:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2053:57:42\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        },\n                        \"id\": 10042,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"3130\",\n                          \"id\": 10033,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2342:2:42\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_10_by_1\",\n                            \"typeString\": \"int_const 10\"\n                          },\n                          \"value\": \"10\"\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"**\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"arguments\": [],\n                              \"expression\": {\n                                \"argumentTypes\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"id\": 10037,\n                                      \"name\": \"underlying\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 10016,\n                                      \"src\": \"2373:10:42\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                      }\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_address\",\n                                        \"typeString\": \"address\"\n                                      }\n                                    ],\n                                    \"id\": 10036,\n                                    \"name\": \"ERC20Upgradeable\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 11533,\n                                    \"src\": \"2356:16:42\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11533_$\",\n                                      \"typeString\": \"type(contract ERC20Upgradeable)\"\n                                    }\n                                  },\n                                  \"id\": 10038,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"2356:28:42\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11533\",\n                                    \"typeString\": \"contract ERC20Upgradeable\"\n                                  }\n                                },\n                                \"id\": 10039,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"decimals\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 11105,\n                                \"src\": \"2356:37:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                                  \"typeString\": \"function () view external returns (uint8)\"\n                                }\n                              },\n                              \"id\": 10040,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"2356:39:42\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint8\",\n                                \"typeString\": \"uint8\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_uint8\",\n                                \"typeString\": \"uint8\"\n                              }\n                            ],\n                            \"id\": 10035,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"2348:7:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                              \"typeString\": \"type(uint256)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 10034,\n                              \"name\": \"uint256\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"2348:7:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 10041,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"2348:48:42\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"src\": \"2342:54:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"31653138\",\n                            \"id\": 10030,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"2332:4:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            },\n                            \"value\": \"1e18\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 10027,\n                                \"name\": \"underlying\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10016,\n                                \"src\": \"2316:10:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 10026,\n                              \"name\": \"_price\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10195,\n                              \"src\": \"2309:6:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_view$_t_address_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (address) view returns (uint256)\"\n                              }\n                            },\n                            \"id\": 10028,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"2309:18:42\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 10029,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"2309:22:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 10031,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2309:28:42\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 10032,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"2309:32:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 10043,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2309:88:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 10014,\n                  \"id\": 10044,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2302:95:42\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 10007,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1655:300:42\",\n              \"text\": \" @notice Get the underlying price of a cToken.\\n @dev Implements the PriceOracle interface for Fuse pools (and Compound v2).\\n @param cToken The cToken address for price retrieval\\n @return Price denominated in ETH, with 18 decimals, for the given cToken address\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 10046,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 10011,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"2013:8:42\"\n            },\n            \"parameters\": {\n              \"id\": 10010,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10009,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10046,\n                  \"src\": \"1989:13:42\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 10008,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"1989:6:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1988:15:42\"\n            },\n            \"returnParameters\": {\n              \"id\": 10014,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10013,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10046,\n                  \"src\": \"2036:4:42\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 10012,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2036:4:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2035:6:42\"\n            },\n            \"scope\": 10397,\n            \"src\": \"1961:444:42\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          },\n          {\n            \"body\": {\n              \"id\": 10194,\n              \"nodeType\": \"Block\",\n              \"src\": \"2593:1090:42\",\n              \"statements\": [\n                {\n                  \"assignments\": [10055],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10055,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"pair\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10194,\n                      \"src\": \"2604:19:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6390\",\n                        \"typeString\": \"contract IUniswapV2Pair\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 10054,\n                        \"name\": \"IUniswapV2Pair\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 6390,\n                        \"src\": \"2604:14:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6390\",\n                          \"typeString\": \"contract IUniswapV2Pair\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10059,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 10057,\n                        \"name\": \"token\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10049,\n                        \"src\": \"2641:5:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 10056,\n                      \"name\": \"IUniswapV2Pair\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 6390,\n                      \"src\": \"2626:14:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_IUniswapV2Pair_$6390_$\",\n                        \"typeString\": \"type(contract IUniswapV2Pair)\"\n                      }\n                    },\n                    \"id\": 10058,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2626:21:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6390\",\n                      \"typeString\": \"contract IUniswapV2Pair\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2604:43:42\"\n                },\n                {\n                  \"assignments\": [10061],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10061,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"totalSupply\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10194,\n                      \"src\": \"2658:16:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10060,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2658:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10065,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10062,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10055,\n                        \"src\": \"2677:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6390\",\n                          \"typeString\": \"contract IUniswapV2Pair\"\n                        }\n                      },\n                      \"id\": 10063,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"totalSupply\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6186,\n                      \"src\": \"2677:16:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                        \"typeString\": \"function () view external returns (uint256)\"\n                      }\n                    },\n                    \"id\": 10064,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2677:18:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2658:37:42\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10068,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10066,\n                      \"name\": \"totalSupply\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10061,\n                      \"src\": \"2710:11:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 10067,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2725:1:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"src\": \"2710:16:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 10071,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2706:30:42\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 10069,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"2735:1:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"functionReturnParameters\": 10053,\n                    \"id\": 10070,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"2728:8:42\"\n                  }\n                },\n                {\n                  \"assignments\": [10073, 10075, null],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10073,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"reserve0\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10194,\n                      \"src\": \"2748:13:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10072,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2748:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    {\n                      \"constant\": false,\n                      \"id\": 10075,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"reserve1\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10194,\n                      \"src\": \"2763:13:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10074,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2763:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    null\n                  ],\n                  \"id\": 10079,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10076,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10055,\n                        \"src\": \"2782:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6390\",\n                          \"typeString\": \"contract IUniswapV2Pair\"\n                        }\n                      },\n                      \"id\": 10077,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"getReserves\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6332,\n                      \"src\": \"2782:16:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint112_$_t_uint112_$_t_uint32_$\",\n                        \"typeString\": \"function () view external returns (uint112,uint112,uint32)\"\n                      }\n                    },\n                    \"id\": 10078,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2782:18:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$_t_uint112_$_t_uint112_$_t_uint32_$\",\n                      \"typeString\": \"tuple(uint112,uint112,uint32)\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2747:53:42\"\n                },\n                {\n                  \"assignments\": [10081],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10081,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"token0\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10194,\n                      \"src\": \"2811:14:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10080,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2811:7:42\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10085,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10082,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10055,\n                        \"src\": \"2828:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6390\",\n                          \"typeString\": \"contract IUniswapV2Pair\"\n                        }\n                      },\n                      \"id\": 10083,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"token0\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6318,\n                      \"src\": \"2828:11:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 10084,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2828:13:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2811:30:42\"\n                },\n                {\n                  \"assignments\": [10087],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10087,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"token1\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10194,\n                      \"src\": \"2852:14:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10086,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2852:7:42\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10091,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10088,\n                        \"name\": \"pair\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10055,\n                        \"src\": \"2869:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IUniswapV2Pair_$6390\",\n                          \"typeString\": \"contract IUniswapV2Pair\"\n                        }\n                      },\n                      \"id\": 10089,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"token1\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 6323,\n                      \"src\": \"2869:11:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 10090,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2869:13:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2852:30:42\"\n                },\n                {\n                  \"assignments\": [10093],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10093,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"token0FairPrice\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10194,\n                      \"src\": \"2978:20:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10092,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2978:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10121,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"condition\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"id\": 10096,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10094,\n                        \"name\": \"token0\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10081,\n                        \"src\": \"3001:6:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"==\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10095,\n                        \"name\": \"WETH_ADDRESS\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9993,\n                        \"src\": \"3011:12:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"src\": \"3001:22:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"falseExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 10118,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3130\",\n                            \"id\": 10109,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"3089:2:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_10_by_1\",\n                              \"typeString\": \"int_const 10\"\n                            },\n                            \"value\": \"10\"\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"**\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": [],\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"id\": 10113,\n                                        \"name\": \"token0\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 10081,\n                                        \"src\": \"3120:6:42\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"id\": 10112,\n                                      \"name\": \"ERC20Upgradeable\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 11533,\n                                      \"src\": \"3103:16:42\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11533_$\",\n                                        \"typeString\": \"type(contract ERC20Upgradeable)\"\n                                      }\n                                    },\n                                    \"id\": 10114,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"typeConversion\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"3103:24:42\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11533\",\n                                      \"typeString\": \"contract ERC20Upgradeable\"\n                                    }\n                                  },\n                                  \"id\": 10115,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"decimals\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": 11105,\n                                  \"src\": \"3103:33:42\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                                    \"typeString\": \"function () view external returns (uint8)\"\n                                  }\n                                },\n                                \"id\": 10116,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"3103:35:42\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint8\",\n                                  \"typeString\": \"uint8\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint8\",\n                                  \"typeString\": \"uint8\"\n                                }\n                              ],\n                              \"id\": 10111,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"ElementaryTypeNameExpression\",\n                              \"src\": \"3095:7:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                \"typeString\": \"type(uint256)\"\n                              },\n                              \"typeName\": {\n                                \"id\": 10110,\n                                \"name\": \"uint256\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"3095:7:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": null,\n                                  \"typeString\": null\n                                }\n                              }\n                            },\n                            \"id\": 10117,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3095:44:42\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"3089:50:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"31653138\",\n                              \"id\": 10106,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"3079:4:42\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                \"typeString\": \"int_const 1000000000000000000\"\n                              },\n                              \"value\": \"1e18\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                \"typeString\": \"int_const 1000000000000000000\"\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 10103,\n                                  \"name\": \"token0\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 10081,\n                                  \"src\": \"3067:6:42\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 10099,\n                                        \"name\": \"msg\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": -15,\n                                        \"src\": \"3049:3:42\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_magic_message\",\n                                          \"typeString\": \"msg\"\n                                        }\n                                      },\n                                      \"id\": 10100,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"memberName\": \"sender\",\n                                      \"nodeType\": \"MemberAccess\",\n                                      \"referencedDeclaration\": null,\n                                      \"src\": \"3049:10:42\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address_payable\",\n                                        \"typeString\": \"address payable\"\n                                      }\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_address_payable\",\n                                        \"typeString\": \"address payable\"\n                                      }\n                                    ],\n                                    \"id\": 10098,\n                                    \"name\": \"BasePriceOracle\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7738,\n                                    \"src\": \"3033:15:42\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$7738_$\",\n                                      \"typeString\": \"type(contract BasePriceOracle)\"\n                                    }\n                                  },\n                                  \"id\": 10101,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"3033:27:42\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_BasePriceOracle_$7738\",\n                                    \"typeString\": \"contract BasePriceOracle\"\n                                  }\n                                },\n                                \"id\": 10102,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"price\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 7737,\n                                \"src\": \"3033:33:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                                  \"typeString\": \"function (address) view external returns (uint256)\"\n                                }\n                              },\n                              \"id\": 10104,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"3033:41:42\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"id\": 10105,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"mul\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 10845,\n                            \"src\": \"3033:45:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                              \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                            }\n                          },\n                          \"id\": 10107,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3033:51:42\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10108,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"div\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 10862,\n                        \"src\": \"3033:55:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                          \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                        }\n                      },\n                      \"id\": 10119,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3033:107:42\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 10120,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"Conditional\",\n                    \"src\": \"3001:139:42\",\n                    \"trueExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 10097,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"3026:4:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2978:162:42\"\n                },\n                {\n                  \"assignments\": [10123],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10123,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"token1FairPrice\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10194,\n                      \"src\": \"3151:20:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10122,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3151:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10151,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"condition\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"id\": 10126,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10124,\n                        \"name\": \"token1\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10087,\n                        \"src\": \"3174:6:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"==\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10125,\n                        \"name\": \"WETH_ADDRESS\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 9993,\n                        \"src\": \"3184:12:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"src\": \"3174:22:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"falseExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 10148,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3130\",\n                            \"id\": 10139,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"3262:2:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_10_by_1\",\n                              \"typeString\": \"int_const 10\"\n                            },\n                            \"value\": \"10\"\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"**\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [],\n                                \"expression\": {\n                                  \"argumentTypes\": [],\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"id\": 10143,\n                                        \"name\": \"token1\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 10087,\n                                        \"src\": \"3293:6:42\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"id\": 10142,\n                                      \"name\": \"ERC20Upgradeable\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 11533,\n                                      \"src\": \"3276:16:42\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_type$_t_contract$_ERC20Upgradeable_$11533_$\",\n                                        \"typeString\": \"type(contract ERC20Upgradeable)\"\n                                      }\n                                    },\n                                    \"id\": 10144,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"typeConversion\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"3276:24:42\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_ERC20Upgradeable_$11533\",\n                                      \"typeString\": \"contract ERC20Upgradeable\"\n                                    }\n                                  },\n                                  \"id\": 10145,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"decimals\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": 11105,\n                                  \"src\": \"3276:33:42\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                                    \"typeString\": \"function () view external returns (uint8)\"\n                                  }\n                                },\n                                \"id\": 10146,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"3276:35:42\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint8\",\n                                  \"typeString\": \"uint8\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint8\",\n                                  \"typeString\": \"uint8\"\n                                }\n                              ],\n                              \"id\": 10141,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"ElementaryTypeNameExpression\",\n                              \"src\": \"3268:7:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                                \"typeString\": \"type(uint256)\"\n                              },\n                              \"typeName\": {\n                                \"id\": 10140,\n                                \"name\": \"uint256\",\n                                \"nodeType\": \"ElementaryTypeName\",\n                                \"src\": \"3268:7:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": null,\n                                  \"typeString\": null\n                                }\n                              }\n                            },\n                            \"id\": 10147,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3268:44:42\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"3262:50:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"31653138\",\n                              \"id\": 10136,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"3252:4:42\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                \"typeString\": \"int_const 1000000000000000000\"\n                              },\n                              \"value\": \"1e18\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                \"typeString\": \"int_const 1000000000000000000\"\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [\n                                {\n                                  \"argumentTypes\": null,\n                                  \"id\": 10133,\n                                  \"name\": \"token1\",\n                                  \"nodeType\": \"Identifier\",\n                                  \"overloadedDeclarations\": [],\n                                  \"referencedDeclaration\": 10087,\n                                  \"src\": \"3240:6:42\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": [\n                                  {\n                                    \"typeIdentifier\": \"t_address\",\n                                    \"typeString\": \"address\"\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [\n                                    {\n                                      \"argumentTypes\": null,\n                                      \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 10129,\n                                        \"name\": \"msg\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": -15,\n                                        \"src\": \"3222:3:42\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_magic_message\",\n                                          \"typeString\": \"msg\"\n                                        }\n                                      },\n                                      \"id\": 10130,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"memberName\": \"sender\",\n                                      \"nodeType\": \"MemberAccess\",\n                                      \"referencedDeclaration\": null,\n                                      \"src\": \"3222:10:42\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_address_payable\",\n                                        \"typeString\": \"address payable\"\n                                      }\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": [\n                                      {\n                                        \"typeIdentifier\": \"t_address_payable\",\n                                        \"typeString\": \"address payable\"\n                                      }\n                                    ],\n                                    \"id\": 10128,\n                                    \"name\": \"BasePriceOracle\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 7738,\n                                    \"src\": \"3206:15:42\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$7738_$\",\n                                      \"typeString\": \"type(contract BasePriceOracle)\"\n                                    }\n                                  },\n                                  \"id\": 10131,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"kind\": \"typeConversion\",\n                                  \"lValueRequested\": false,\n                                  \"names\": [],\n                                  \"nodeType\": \"FunctionCall\",\n                                  \"src\": \"3206:27:42\",\n                                  \"tryCall\": false,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_contract$_BasePriceOracle_$7738\",\n                                    \"typeString\": \"contract BasePriceOracle\"\n                                  }\n                                },\n                                \"id\": 10132,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"lValueRequested\": false,\n                                \"memberName\": \"price\",\n                                \"nodeType\": \"MemberAccess\",\n                                \"referencedDeclaration\": 7737,\n                                \"src\": \"3206:33:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                                  \"typeString\": \"function (address) view external returns (uint256)\"\n                                }\n                              },\n                              \"id\": 10134,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"kind\": \"functionCall\",\n                              \"lValueRequested\": false,\n                              \"names\": [],\n                              \"nodeType\": \"FunctionCall\",\n                              \"src\": \"3206:41:42\",\n                              \"tryCall\": false,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"id\": 10135,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"mul\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 10845,\n                            \"src\": \"3206:45:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                              \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                            }\n                          },\n                          \"id\": 10137,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"3206:51:42\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10138,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"div\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 10862,\n                        \"src\": \"3206:55:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                          \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                        }\n                      },\n                      \"id\": 10149,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"3206:107:42\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 10150,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"Conditional\",\n                    \"src\": \"3174:139:42\",\n                    \"trueExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 10127,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"3199:4:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3151:162:42\"\n                },\n                {\n                  \"assignments\": [10153],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10153,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"sqrtK\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10194,\n                      \"src\": \"3490:13:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10152,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"3490:7:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10168,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 10166,\n                        \"name\": \"totalSupply\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10061,\n                        \"src\": \"3553:11:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_rational_5192296858534827628530496329220096_by_1\",\n                              \"typeString\": \"int_const 5192...(26 digits omitted)...0096\"\n                            },\n                            \"id\": 10163,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"32\",\n                              \"id\": 10161,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"3539:1:42\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_2_by_1\",\n                                \"typeString\": \"int_const 2\"\n                              },\n                              \"value\": \"2\"\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"**\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"313132\",\n                              \"id\": 10162,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"3544:3:42\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_112_by_1\",\n                                \"typeString\": \"int_const 112\"\n                              },\n                              \"value\": \"112\"\n                            },\n                            \"src\": \"3539:8:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_5192296858534827628530496329220096_by_1\",\n                              \"typeString\": \"int_const 5192...(26 digits omitted)...0096\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_5192296858534827628530496329220096_by_1\",\n                              \"typeString\": \"int_const 5192...(26 digits omitted)...0096\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 10157,\n                                    \"name\": \"reserve1\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 10075,\n                                    \"src\": \"3524:8:42\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"id\": 10155,\n                                    \"name\": \"reserve0\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 10073,\n                                    \"src\": \"3511:8:42\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"id\": 10156,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"mul\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": 10845,\n                                  \"src\": \"3511:12:42\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                    \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                  }\n                                },\n                                \"id\": 10158,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"3511:22:42\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"id\": 10154,\n                              \"name\": \"sqrt\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10396,\n                              \"src\": \"3506:4:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 10159,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3506:28:42\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 10160,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"3506:32:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 10164,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3506:42:42\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 10165,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"3506:46:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 10167,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3506:59:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"3490:75:42\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                          \"typeString\": \"int_const 72057594037927936\"\n                        },\n                        \"id\": 10191,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"32\",\n                          \"id\": 10189,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3667:1:42\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_2_by_1\",\n                            \"typeString\": \"int_const 2\"\n                          },\n                          \"value\": \"2\"\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"**\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"3536\",\n                          \"id\": 10190,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"3672:2:42\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_56_by_1\",\n                            \"typeString\": \"int_const 56\"\n                          },\n                          \"value\": \"56\"\n                        },\n                        \"src\": \"3667:7:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                          \"typeString\": \"int_const 72057594037927936\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                          \"typeString\": \"int_const 72057594037927936\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 10185,\n                                \"name\": \"token1FairPrice\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10123,\n                                \"src\": \"3645:15:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"id\": 10184,\n                              \"name\": \"sqrt\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10396,\n                              \"src\": \"3640:4:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$\",\n                                \"typeString\": \"function (uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 10186,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3640:21:42\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"commonType\": {\n                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                  \"typeString\": \"int_const 72057594037927936\"\n                                },\n                                \"id\": 10181,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": true,\n                                \"lValueRequested\": false,\n                                \"leftExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"32\",\n                                  \"id\": 10179,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"3627:1:42\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_2_by_1\",\n                                    \"typeString\": \"int_const 2\"\n                                  },\n                                  \"value\": \"2\"\n                                },\n                                \"nodeType\": \"BinaryOperation\",\n                                \"operator\": \"**\",\n                                \"rightExpression\": {\n                                  \"argumentTypes\": null,\n                                  \"hexValue\": \"3536\",\n                                  \"id\": 10180,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"kind\": \"number\",\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"Literal\",\n                                  \"src\": \"3632:2:42\",\n                                  \"subdenomination\": null,\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_rational_56_by_1\",\n                                    \"typeString\": \"int_const 56\"\n                                  },\n                                  \"value\": \"56\"\n                                },\n                                \"src\": \"3627:7:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                  \"typeString\": \"int_const 72057594037927936\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                  \"typeString\": \"int_const 72057594037927936\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"id\": 10175,\n                                        \"name\": \"token0FairPrice\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 10093,\n                                        \"src\": \"3605:15:42\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"id\": 10174,\n                                      \"name\": \"sqrt\",\n                                      \"nodeType\": \"Identifier\",\n                                      \"overloadedDeclarations\": [],\n                                      \"referencedDeclaration\": 10396,\n                                      \"src\": \"3600:4:42\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$\",\n                                        \"typeString\": \"function (uint256) pure returns (uint256)\"\n                                      }\n                                    },\n                                    \"id\": 10176,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"functionCall\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"3600:21:42\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [\n                                      {\n                                        \"argumentTypes\": null,\n                                        \"hexValue\": \"32\",\n                                        \"id\": 10171,\n                                        \"isConstant\": false,\n                                        \"isLValue\": false,\n                                        \"isPure\": true,\n                                        \"kind\": \"number\",\n                                        \"lValueRequested\": false,\n                                        \"nodeType\": \"Literal\",\n                                        \"src\": \"3593:1:42\",\n                                        \"subdenomination\": null,\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_rational_2_by_1\",\n                                          \"typeString\": \"int_const 2\"\n                                        },\n                                        \"value\": \"2\"\n                                      }\n                                    ],\n                                    \"expression\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_2_by_1\",\n                                          \"typeString\": \"int_const 2\"\n                                        }\n                                      ],\n                                      \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 10169,\n                                        \"name\": \"sqrtK\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 10153,\n                                        \"src\": \"3583:5:42\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      },\n                                      \"id\": 10170,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"memberName\": \"mul\",\n                                      \"nodeType\": \"MemberAccess\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"src\": \"3583:9:42\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                      }\n                                    },\n                                    \"id\": 10172,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"functionCall\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"3583:12:42\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"id\": 10173,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"mul\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": 10845,\n                                  \"src\": \"3583:16:42\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                    \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                  }\n                                },\n                                \"id\": 10177,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"3583:39:42\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"id\": 10178,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"div\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 10862,\n                              \"src\": \"3583:43:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 10182,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"3583:52:42\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 10183,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"3583:56:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 10187,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"3583:79:42\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 10188,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"3583:83:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 10192,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"3583:92:42\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 10053,\n                  \"id\": 10193,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"3576:99:42\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 10047,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"2413:106:42\",\n              \"text\": \" @dev Fetches the fair LP token/ETH price from Uniswap, with 18 decimals of precision.\"\n            },\n            \"id\": 10195,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"_price\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 10050,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10049,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"token\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10195,\n                  \"src\": \"2541:13:42\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 10048,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2541:7:42\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2540:15:42\"\n            },\n            \"returnParameters\": {\n              \"id\": 10053,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10052,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10195,\n                  \"src\": \"2587:4:42\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 10051,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"2587:4:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"2586:6:42\"\n            },\n            \"scope\": 10397,\n            \"src\": \"2525:1158:42\",\n            \"stateMutability\": \"view\",\n            \"virtual\": true,\n            \"visibility\": \"internal\"\n          },\n          {\n            \"body\": {\n              \"id\": 10395,\n              \"nodeType\": \"Block\",\n              \"src\": \"4043:1023:42\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10205,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10203,\n                      \"name\": \"x\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10198,\n                      \"src\": \"4058:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 10204,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"4063:1:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"src\": \"4058:6:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 10208,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"4054:20:42\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30\",\n                      \"id\": 10206,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"4073:1:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_0_by_1\",\n                        \"typeString\": \"int_const 0\"\n                      },\n                      \"value\": \"0\"\n                    },\n                    \"functionReturnParameters\": 10202,\n                    \"id\": 10207,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"4066:8:42\"\n                  }\n                },\n                {\n                  \"assignments\": [10210],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10210,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"xx\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10395,\n                      \"src\": \"4085:7:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10209,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4085:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10212,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"id\": 10211,\n                    \"name\": \"x\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 10198,\n                    \"src\": \"4095:1:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4085:11:42\"\n                },\n                {\n                  \"assignments\": [10214],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10214,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"r\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10395,\n                      \"src\": \"4107:6:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10213,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"4107:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10216,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"hexValue\": \"31\",\n                    \"id\": 10215,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": true,\n                    \"kind\": \"number\",\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"Literal\",\n                    \"src\": \"4116:1:42\",\n                    \"subdenomination\": null,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_rational_1_by_1\",\n                      \"typeString\": \"int_const 1\"\n                    },\n                    \"value\": \"1\"\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"4107:10:42\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10219,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10217,\n                      \"name\": \"xx\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10210,\n                      \"src\": \"4134:2:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3078313030303030303030303030303030303030303030303030303030303030303030\",\n                      \"id\": 10218,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"4140:35:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_340282366920938463463374607431768211456_by_1\",\n                        \"typeString\": \"int_const 3402...(31 digits omitted)...1456\"\n                      },\n                      \"value\": \"0x100000000000000000000000000000000\"\n                    },\n                    \"src\": \"4134:41:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 10229,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"4130:107:42\",\n                  \"trueBody\": {\n                    \"id\": 10228,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"4177:60:42\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10222,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10220,\n                            \"name\": \"xx\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10210,\n                            \"src\": \"4192:2:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \">>=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"313238\",\n                            \"id\": 10221,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4199:3:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_128_by_1\",\n                              \"typeString\": \"int_const 128\"\n                            },\n                            \"value\": \"128\"\n                          },\n                          \"src\": \"4192:10:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10223,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4192:10:42\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10226,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10224,\n                            \"name\": \"r\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10214,\n                            \"src\": \"4217:1:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"<<=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3634\",\n                            \"id\": 10225,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4223:2:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_64_by_1\",\n                              \"typeString\": \"int_const 64\"\n                            },\n                            \"value\": \"64\"\n                          },\n                          \"src\": \"4217:8:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10227,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4217:8:42\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10232,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10230,\n                      \"name\": \"xx\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10210,\n                      \"src\": \"4251:2:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30783130303030303030303030303030303030\",\n                      \"id\": 10231,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"4257:19:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_18446744073709551616_by_1\",\n                        \"typeString\": \"int_const 18446744073709551616\"\n                      },\n                      \"value\": \"0x10000000000000000\"\n                    },\n                    \"src\": \"4251:25:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 10242,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"4247:90:42\",\n                  \"trueBody\": {\n                    \"id\": 10241,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"4278:59:42\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10235,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10233,\n                            \"name\": \"xx\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10210,\n                            \"src\": \"4293:2:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \">>=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3634\",\n                            \"id\": 10234,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4300:2:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_64_by_1\",\n                              \"typeString\": \"int_const 64\"\n                            },\n                            \"value\": \"64\"\n                          },\n                          \"src\": \"4293:9:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10236,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4293:9:42\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10239,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10237,\n                            \"name\": \"r\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10214,\n                            \"src\": \"4317:1:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"<<=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3332\",\n                            \"id\": 10238,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4323:2:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_32_by_1\",\n                              \"typeString\": \"int_const 32\"\n                            },\n                            \"value\": \"32\"\n                          },\n                          \"src\": \"4317:8:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10240,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4317:8:42\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10245,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10243,\n                      \"name\": \"xx\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10210,\n                      \"src\": \"4351:2:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3078313030303030303030\",\n                      \"id\": 10244,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"4357:11:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_4294967296_by_1\",\n                        \"typeString\": \"int_const 4294967296\"\n                      },\n                      \"value\": \"0x100000000\"\n                    },\n                    \"src\": \"4351:17:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 10255,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"4347:82:42\",\n                  \"trueBody\": {\n                    \"id\": 10254,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"4370:59:42\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10248,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10246,\n                            \"name\": \"xx\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10210,\n                            \"src\": \"4385:2:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \">>=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3332\",\n                            \"id\": 10247,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4392:2:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_32_by_1\",\n                              \"typeString\": \"int_const 32\"\n                            },\n                            \"value\": \"32\"\n                          },\n                          \"src\": \"4385:9:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10249,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4385:9:42\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10252,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10250,\n                            \"name\": \"r\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10214,\n                            \"src\": \"4409:1:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"<<=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3136\",\n                            \"id\": 10251,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4415:2:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_16_by_1\",\n                              \"typeString\": \"int_const 16\"\n                            },\n                            \"value\": \"16\"\n                          },\n                          \"src\": \"4409:8:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10253,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4409:8:42\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10258,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10256,\n                      \"name\": \"xx\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10210,\n                      \"src\": \"4443:2:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30783130303030\",\n                      \"id\": 10257,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"4449:7:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_65536_by_1\",\n                        \"typeString\": \"int_const 65536\"\n                      },\n                      \"value\": \"0x10000\"\n                    },\n                    \"src\": \"4443:13:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 10268,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"4439:77:42\",\n                  \"trueBody\": {\n                    \"id\": 10267,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"4458:58:42\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10261,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10259,\n                            \"name\": \"xx\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10210,\n                            \"src\": \"4473:2:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \">>=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"3136\",\n                            \"id\": 10260,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4480:2:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_16_by_1\",\n                              \"typeString\": \"int_const 16\"\n                            },\n                            \"value\": \"16\"\n                          },\n                          \"src\": \"4473:9:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10262,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4473:9:42\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10265,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10263,\n                            \"name\": \"r\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10214,\n                            \"src\": \"4497:1:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"<<=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"38\",\n                            \"id\": 10264,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4503:1:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_8_by_1\",\n                              \"typeString\": \"int_const 8\"\n                            },\n                            \"value\": \"8\"\n                          },\n                          \"src\": \"4497:7:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10266,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4497:7:42\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10271,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10269,\n                      \"name\": \"xx\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10210,\n                      \"src\": \"4530:2:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3078313030\",\n                      \"id\": 10270,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"4536:5:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_256_by_1\",\n                        \"typeString\": \"int_const 256\"\n                      },\n                      \"value\": \"0x100\"\n                    },\n                    \"src\": \"4530:11:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 10281,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"4526:74:42\",\n                  \"trueBody\": {\n                    \"id\": 10280,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"4543:57:42\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10274,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10272,\n                            \"name\": \"xx\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10210,\n                            \"src\": \"4558:2:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \">>=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"38\",\n                            \"id\": 10273,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4565:1:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_8_by_1\",\n                              \"typeString\": \"int_const 8\"\n                            },\n                            \"value\": \"8\"\n                          },\n                          \"src\": \"4558:8:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10275,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4558:8:42\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10278,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10276,\n                            \"name\": \"r\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10214,\n                            \"src\": \"4581:1:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"<<=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"34\",\n                            \"id\": 10277,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4587:1:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_4_by_1\",\n                              \"typeString\": \"int_const 4\"\n                            },\n                            \"value\": \"4\"\n                          },\n                          \"src\": \"4581:7:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10279,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4581:7:42\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10284,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10282,\n                      \"name\": \"xx\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10210,\n                      \"src\": \"4614:2:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"30783130\",\n                      \"id\": 10283,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"4620:4:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_16_by_1\",\n                        \"typeString\": \"int_const 16\"\n                      },\n                      \"value\": \"0x10\"\n                    },\n                    \"src\": \"4614:10:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 10294,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"4610:73:42\",\n                  \"trueBody\": {\n                    \"id\": 10293,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"4626:57:42\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10287,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10285,\n                            \"name\": \"xx\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10210,\n                            \"src\": \"4641:2:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \">>=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"34\",\n                            \"id\": 10286,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4648:1:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_4_by_1\",\n                              \"typeString\": \"int_const 4\"\n                            },\n                            \"value\": \"4\"\n                          },\n                          \"src\": \"4641:8:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10288,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4641:8:42\"\n                      },\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10291,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10289,\n                            \"name\": \"r\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10214,\n                            \"src\": \"4664:1:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"<<=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"32\",\n                            \"id\": 10290,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4670:1:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_2_by_1\",\n                              \"typeString\": \"int_const 2\"\n                            },\n                            \"value\": \"2\"\n                          },\n                          \"src\": \"4664:7:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10292,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4664:7:42\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10297,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10295,\n                      \"name\": \"xx\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10210,\n                      \"src\": \"4697:2:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \">=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"307838\",\n                      \"id\": 10296,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"4703:3:42\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_8_by_1\",\n                        \"typeString\": \"int_const 8\"\n                      },\n                      \"value\": \"0x8\"\n                    },\n                    \"src\": \"4697:9:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 10303,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"4693:49:42\",\n                  \"trueBody\": {\n                    \"id\": 10302,\n                    \"nodeType\": \"Block\",\n                    \"src\": \"4708:34:42\",\n                    \"statements\": [\n                      {\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10300,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftHandSide\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10298,\n                            \"name\": \"r\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10214,\n                            \"src\": \"4723:1:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"Assignment\",\n                          \"operator\": \"<<=\",\n                          \"rightHandSide\": {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"31\",\n                            \"id\": 10299,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"4729:1:42\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_1_by_1\",\n                              \"typeString\": \"int_const 1\"\n                            },\n                            \"value\": \"1\"\n                          },\n                          \"src\": \"4723:7:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10301,\n                        \"nodeType\": \"ExpressionStatement\",\n                        \"src\": \"4723:7:42\"\n                      }\n                    ]\n                  }\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 10313,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10304,\n                      \"name\": \"r\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10214,\n                      \"src\": \"4754:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 10312,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"components\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 10309,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 10305,\n                              \"name\": \"r\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10214,\n                              \"src\": \"4759:1:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"+\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 10308,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10306,\n                                \"name\": \"x\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10198,\n                                \"src\": \"4763:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"/\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10307,\n                                \"name\": \"r\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10214,\n                                \"src\": \"4767:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"src\": \"4763:5:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"4759:9:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"id\": 10310,\n                        \"isConstant\": false,\n                        \"isInlineArray\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"TupleExpression\",\n                        \"src\": \"4758:11:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \">>\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"31\",\n                        \"id\": 10311,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4773:1:42\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_1_by_1\",\n                          \"typeString\": \"int_const 1\"\n                        },\n                        \"value\": \"1\"\n                      },\n                      \"src\": \"4758:16:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4754:20:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 10314,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4754:20:42\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 10324,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10315,\n                      \"name\": \"r\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10214,\n                      \"src\": \"4785:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 10323,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"components\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 10320,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 10316,\n                              \"name\": \"r\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10214,\n                              \"src\": \"4790:1:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"+\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 10319,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10317,\n                                \"name\": \"x\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10198,\n                                \"src\": \"4794:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"/\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10318,\n                                \"name\": \"r\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10214,\n                                \"src\": \"4798:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"src\": \"4794:5:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"4790:9:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"id\": 10321,\n                        \"isConstant\": false,\n                        \"isInlineArray\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"TupleExpression\",\n                        \"src\": \"4789:11:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \">>\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"31\",\n                        \"id\": 10322,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4804:1:42\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_1_by_1\",\n                          \"typeString\": \"int_const 1\"\n                        },\n                        \"value\": \"1\"\n                      },\n                      \"src\": \"4789:16:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4785:20:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 10325,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4785:20:42\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 10335,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10326,\n                      \"name\": \"r\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10214,\n                      \"src\": \"4816:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 10334,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"components\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 10331,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 10327,\n                              \"name\": \"r\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10214,\n                              \"src\": \"4821:1:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"+\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 10330,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10328,\n                                \"name\": \"x\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10198,\n                                \"src\": \"4825:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"/\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10329,\n                                \"name\": \"r\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10214,\n                                \"src\": \"4829:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"src\": \"4825:5:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"4821:9:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"id\": 10332,\n                        \"isConstant\": false,\n                        \"isInlineArray\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"TupleExpression\",\n                        \"src\": \"4820:11:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \">>\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"31\",\n                        \"id\": 10333,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4835:1:42\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_1_by_1\",\n                          \"typeString\": \"int_const 1\"\n                        },\n                        \"value\": \"1\"\n                      },\n                      \"src\": \"4820:16:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4816:20:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 10336,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4816:20:42\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 10346,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10337,\n                      \"name\": \"r\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10214,\n                      \"src\": \"4847:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 10345,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"components\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 10342,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 10338,\n                              \"name\": \"r\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10214,\n                              \"src\": \"4852:1:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"+\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 10341,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10339,\n                                \"name\": \"x\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10198,\n                                \"src\": \"4856:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"/\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10340,\n                                \"name\": \"r\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10214,\n                                \"src\": \"4860:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"src\": \"4856:5:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"4852:9:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"id\": 10343,\n                        \"isConstant\": false,\n                        \"isInlineArray\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"TupleExpression\",\n                        \"src\": \"4851:11:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \">>\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"31\",\n                        \"id\": 10344,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4866:1:42\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_1_by_1\",\n                          \"typeString\": \"int_const 1\"\n                        },\n                        \"value\": \"1\"\n                      },\n                      \"src\": \"4851:16:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4847:20:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 10347,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4847:20:42\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 10357,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10348,\n                      \"name\": \"r\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10214,\n                      \"src\": \"4878:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 10356,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"components\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 10353,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 10349,\n                              \"name\": \"r\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10214,\n                              \"src\": \"4883:1:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"+\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 10352,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10350,\n                                \"name\": \"x\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10198,\n                                \"src\": \"4887:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"/\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10351,\n                                \"name\": \"r\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10214,\n                                \"src\": \"4891:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"src\": \"4887:5:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"4883:9:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"id\": 10354,\n                        \"isConstant\": false,\n                        \"isInlineArray\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"TupleExpression\",\n                        \"src\": \"4882:11:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \">>\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"31\",\n                        \"id\": 10355,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4897:1:42\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_1_by_1\",\n                          \"typeString\": \"int_const 1\"\n                        },\n                        \"value\": \"1\"\n                      },\n                      \"src\": \"4882:16:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4878:20:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 10358,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4878:20:42\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 10368,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10359,\n                      \"name\": \"r\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10214,\n                      \"src\": \"4909:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 10367,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"components\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 10364,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 10360,\n                              \"name\": \"r\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10214,\n                              \"src\": \"4914:1:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"+\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 10363,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10361,\n                                \"name\": \"x\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10198,\n                                \"src\": \"4918:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"/\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10362,\n                                \"name\": \"r\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10214,\n                                \"src\": \"4922:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"src\": \"4918:5:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"4914:9:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"id\": 10365,\n                        \"isConstant\": false,\n                        \"isInlineArray\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"TupleExpression\",\n                        \"src\": \"4913:11:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \">>\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"31\",\n                        \"id\": 10366,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4928:1:42\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_1_by_1\",\n                          \"typeString\": \"int_const 1\"\n                        },\n                        \"value\": \"1\"\n                      },\n                      \"src\": \"4913:16:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4909:20:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 10369,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4909:20:42\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 10379,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10370,\n                      \"name\": \"r\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10214,\n                      \"src\": \"4940:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"id\": 10378,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"components\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"commonType\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            },\n                            \"id\": 10375,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"leftExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 10371,\n                              \"name\": \"r\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10214,\n                              \"src\": \"4945:1:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"nodeType\": \"BinaryOperation\",\n                            \"operator\": \"+\",\n                            \"rightExpression\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"id\": 10374,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"leftExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10372,\n                                \"name\": \"x\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10198,\n                                \"src\": \"4949:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"nodeType\": \"BinaryOperation\",\n                              \"operator\": \"/\",\n                              \"rightExpression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10373,\n                                \"name\": \"r\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10214,\n                                \"src\": \"4953:1:42\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"src\": \"4949:5:42\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              }\n                            },\n                            \"src\": \"4945:9:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"id\": 10376,\n                        \"isConstant\": false,\n                        \"isInlineArray\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"TupleExpression\",\n                        \"src\": \"4944:11:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \">>\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"31\",\n                        \"id\": 10377,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"4959:1:42\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_rational_1_by_1\",\n                          \"typeString\": \"int_const 1\"\n                        },\n                        \"value\": \"1\"\n                      },\n                      \"src\": \"4944:16:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"4940:20:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"id\": 10380,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"4940:20:42\"\n                },\n                {\n                  \"assignments\": [10382],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10382,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"r1\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10395,\n                      \"src\": \"5008:7:42\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10381,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"5008:4:42\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10386,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10385,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10383,\n                      \"name\": \"x\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10198,\n                      \"src\": \"5018:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"/\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 10384,\n                      \"name\": \"r\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 10214,\n                      \"src\": \"5022:1:42\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"5018:5:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"5008:15:42\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"components\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"condition\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"id\": 10389,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"leftExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10387,\n                            \"name\": \"r\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10214,\n                            \"src\": \"5042:1:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"nodeType\": \"BinaryOperation\",\n                          \"operator\": \"<\",\n                          \"rightExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 10388,\n                            \"name\": \"r1\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10382,\n                            \"src\": \"5046:2:42\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"src\": \"5042:6:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_bool\",\n                            \"typeString\": \"bool\"\n                          }\n                        },\n                        \"falseExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10391,\n                          \"name\": \"r1\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 10382,\n                          \"src\": \"5055:2:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"id\": 10392,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Conditional\",\n                        \"src\": \"5042:15:42\",\n                        \"trueExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 10390,\n                          \"name\": \"r\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 10214,\n                          \"src\": \"5051:1:42\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          }\n                        },\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"id\": 10393,\n                    \"isConstant\": false,\n                    \"isInlineArray\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"TupleExpression\",\n                    \"src\": \"5041:17:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 10202,\n                  \"id\": 10394,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"5034:24:42\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 10196,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"3691:295:42\",\n              \"text\": \" @dev Fast square root function.\\n Implementation from: https://github.com/Uniswap/uniswap-lib/commit/99f3f28770640ba1bb1ff460ac7c5292fb8291a0\\n Original implementation: https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L687\"\n            },\n            \"id\": 10396,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"sqrt\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 10199,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10198,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"x\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10396,\n                  \"src\": \"4006:6:42\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 10197,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4006:4:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4005:8:42\"\n            },\n            \"returnParameters\": {\n              \"id\": 10202,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10201,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10396,\n                  \"src\": \"4037:4:42\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 10200,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"4037:4:42\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"4036:6:42\"\n            },\n            \"scope\": 10397,\n            \"src\": \"3992:1074:42\",\n            \"stateMutability\": \"pure\",\n            \"virtual\": false,\n            \"visibility\": \"internal\"\n          }\n        ],\n        \"scope\": 10398,\n        \"src\": \"1025:4044:42\"\n      }\n    ],\n    \"src\": \"312:4759:42\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapLpTokenPriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"UniswapLpTokenPriceOracle\": [10397]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 9976,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"312:23:42\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 10933,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 10398,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9977,\n        \"name\": \"ImportDirective\",\n        \"src\": \"339:74:42\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 11534,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\",\n          \"scope\": 10398,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9978,\n        \"name\": \"ImportDirective\",\n        \"src\": \"415:78:42\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 10398,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9979,\n        \"name\": \"ImportDirective\",\n        \"src\": \"497:46:42\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5867,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\",\n          \"file\": \"../external/compound/CToken.sol\",\n          \"scope\": 10398,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9980,\n        \"name\": \"ImportDirective\",\n        \"src\": \"545:41:42\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 10398,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9981,\n        \"name\": \"ImportDirective\",\n        \"src\": \"588:41:42\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6391,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Pair.sol\",\n          \"file\": \"../external/uniswap/IUniswapV2Pair.sol\",\n          \"scope\": 10398,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9982,\n        \"name\": \"ImportDirective\",\n        \"src\": \"633:48:42\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 7739,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n          \"file\": \"./BasePriceOracle.sol\",\n          \"scope\": 10398,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 9983,\n        \"name\": \"ImportDirective\",\n        \"src\": \"685:31:42\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [10397, 6023],\n          \"name\": \"UniswapLpTokenPriceOracle\",\n          \"scope\": 10398\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title UniswapLpTokenPriceOracle\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\n @notice UniswapLpTokenPriceOracle is a price oracle for Uniswap (and SushiSwap) LP tokens.\\n @dev Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\"\n            },\n            \"id\": 9984,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"720:303:42\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 9985,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1063:11:42\"\n              }\n            ],\n            \"id\": 9986,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"1063:11:42\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 10932,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 9987,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"1088:19:42\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 9988,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"1112:7:42\"\n              }\n            ],\n            \"id\": 9989,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"1082:38:42\"\n          },\n          {\n            \"attributes\": {\n              \"constant\": true,\n              \"mutability\": \"constant\",\n              \"name\": \"WETH_ADDRESS\",\n              \"overrides\": null,\n              \"scope\": 10397,\n              \"stateVariable\": true,\n              \"storageLocation\": \"default\",\n              \"type\": \"address\",\n              \"visibility\": \"private\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"name\": \"address\",\n                  \"stateMutability\": \"nonpayable\",\n                  \"type\": \"address\"\n                },\n                \"id\": 9991,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"1182:7:42\"\n              },\n              {\n                \"attributes\": {\n                  \"argumentTypes\": null,\n                  \"hexvalue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                  \"isConstant\": false,\n                  \"isLValue\": false,\n                  \"isPure\": true,\n                  \"lValueRequested\": false,\n                  \"subdenomination\": null,\n                  \"token\": \"number\",\n                  \"type\": \"address payable\",\n                  \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                },\n                \"id\": 9992,\n                \"name\": \"Literal\",\n                \"src\": \"1222:42:42\"\n              },\n              {\n                \"attributes\": {\n                  \"text\": \" @dev WETH contract address.\"\n                },\n                \"id\": 9990,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1128:48:42\"\n              }\n            ],\n            \"id\": 9993,\n            \"name\": \"VariableDeclaration\",\n            \"src\": \"1182:82:42\"\n          },\n          {\n            \"attributes\": {\n              \"functionSelector\": \"aea91078\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"price\",\n              \"overrides\": null,\n              \"scope\": 10397,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Get the LP token price price for an underlying token address.\\n @param underlying The underlying token address for which to get the price (set to zero address for ETH)\\n @return Price denominated in ETH (scaled by 1e18)\"\n                },\n                \"id\": 9994,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1273:260:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlying\",\n                      \"overrides\": null,\n                      \"scope\": 10006,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 9995,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1554:7:42\"\n                      }\n                    ],\n                    \"id\": 9996,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1554:18:42\"\n                  }\n                ],\n                \"id\": 9997,\n                \"name\": \"ParameterList\",\n                \"src\": \"1553:20:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 10006,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 9998,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1597:4:42\"\n                      }\n                    ],\n                    \"id\": 9999,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1597:4:42\"\n                  }\n                ],\n                \"id\": 10000,\n                \"name\": \"ParameterList\",\n                \"src\": \"1596:6:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 10000\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10195,\n                              \"type\": \"function (address) view returns (uint256)\",\n                              \"value\": \"_price\"\n                            },\n                            \"id\": 10001,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1621:6:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 9996,\n                              \"type\": \"address\",\n                              \"value\": \"underlying\"\n                            },\n                            \"id\": 10002,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1628:10:42\"\n                          }\n                        ],\n                        \"id\": 10003,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1621:18:42\"\n                      }\n                    ],\n                    \"id\": 10004,\n                    \"name\": \"Return\",\n                    \"src\": \"1614:25:42\"\n                  }\n                ],\n                \"id\": 10005,\n                \"name\": \"Block\",\n                \"src\": \"1603:44:42\"\n              }\n            ],\n            \"id\": 10006,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1539:108:42\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 10397,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @notice Get the underlying price of a cToken.\\n @dev Implements the PriceOracle interface for Fuse pools (and Compound v2).\\n @param cToken The cToken address for price retrieval\\n @return Price denominated in ETH, with 18 decimals, for the given cToken address\"\n                },\n                \"id\": 10007,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"1655:300:42\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 10011,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"2013:8:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 10046,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 10008,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"1989:6:42\"\n                      }\n                    ],\n                    \"id\": 10009,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1989:13:42\"\n                  }\n                ],\n                \"id\": 10010,\n                \"name\": \"ParameterList\",\n                \"src\": \"1988:15:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 10046,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 10012,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2036:4:42\"\n                      }\n                    ],\n                    \"id\": 10013,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2036:4:42\"\n                  }\n                ],\n                \"id\": 10014,\n                \"name\": \"ParameterList\",\n                \"src\": \"2035:6:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10016]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlying\",\n                          \"overrides\": null,\n                          \"scope\": 10045,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 10015,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2053:7:42\"\n                          }\n                        ],\n                        \"id\": 10016,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2053:18:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"underlying\",\n                              \"referencedDeclaration\": 5711,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"contract CErc20\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_address\",\n                                          \"typeString\": \"address\"\n                                        }\n                                      ],\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 5723,\n                                      \"type\": \"type(contract CErc20)\",\n                                      \"value\": \"CErc20\"\n                                    },\n                                    \"id\": 10017,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"2074:6:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"address\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                              \"typeString\": \"contract CToken\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(address)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"address\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 10018,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"2081:7:42\"\n                                          }\n                                        ],\n                                        \"id\": 10019,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"2081:7:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10009,\n                                          \"type\": \"contract CToken\",\n                                          \"value\": \"cToken\"\n                                        },\n                                        \"id\": 10020,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"2089:6:42\"\n                                      }\n                                    ],\n                                    \"id\": 10021,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2081:15:42\"\n                                  }\n                                ],\n                                \"id\": 10022,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2074:23:42\"\n                              }\n                            ],\n                            \"id\": 10023,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2074:34:42\"\n                          }\n                        ],\n                        \"id\": 10024,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2074:36:42\"\n                      }\n                    ],\n                    \"id\": 10025,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2053:57:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 10014\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                          \"typeString\": \"int_const 1000000000000000000\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_address\",\n                                                  \"typeString\": \"address\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10195,\n                                              \"type\": \"function (address) view returns (uint256)\",\n                                              \"value\": \"_price\"\n                                            },\n                                            \"id\": 10026,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2309:6:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10016,\n                                              \"type\": \"address\",\n                                              \"value\": \"underlying\"\n                                            },\n                                            \"id\": 10027,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"2316:10:42\"\n                                          }\n                                        ],\n                                        \"id\": 10028,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"2309:18:42\"\n                                      }\n                                    ],\n                                    \"id\": 10029,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"2309:22:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"31653138\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 1000000000000000000\",\n                                      \"value\": \"1e18\"\n                                    },\n                                    \"id\": 10030,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"2332:4:42\"\n                                  }\n                                ],\n                                \"id\": 10031,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2309:28:42\"\n                              }\n                            ],\n                            \"id\": 10032,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2309:32:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"**\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"3130\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 10\",\n                                  \"value\": \"10\"\n                                },\n                                \"id\": 10033,\n                                \"name\": \"Literal\",\n                                \"src\": \"2342:2:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": true\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint8\",\n                                          \"typeString\": \"uint8\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"type\": \"type(uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"name\": \"uint256\",\n                                          \"type\": null\n                                        },\n                                        \"id\": 10034,\n                                        \"name\": \"ElementaryTypeName\",\n                                        \"src\": \"2348:7:42\"\n                                      }\n                                    ],\n                                    \"id\": 10035,\n                                    \"name\": \"ElementaryTypeNameExpression\",\n                                    \"src\": \"2348:7:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"arguments\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint8\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"decimals\",\n                                          \"referencedDeclaration\": 11105,\n                                          \"type\": \"function () view external returns (uint8)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"contract ERC20Upgradeable\",\n                                              \"type_conversion\": true\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_address\",\n                                                      \"typeString\": \"address\"\n                                                    }\n                                                  ],\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 11533,\n                                                  \"type\": \"type(contract ERC20Upgradeable)\",\n                                                  \"value\": \"ERC20Upgradeable\"\n                                                },\n                                                \"id\": 10036,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"2356:16:42\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 10016,\n                                                  \"type\": \"address\",\n                                                  \"value\": \"underlying\"\n                                                },\n                                                \"id\": 10037,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"2373:10:42\"\n                                              }\n                                            ],\n                                            \"id\": 10038,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"2356:28:42\"\n                                          }\n                                        ],\n                                        \"id\": 10039,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"2356:37:42\"\n                                      }\n                                    ],\n                                    \"id\": 10040,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"2356:39:42\"\n                                  }\n                                ],\n                                \"id\": 10041,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"2348:48:42\"\n                              }\n                            ],\n                            \"id\": 10042,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"2342:54:42\"\n                          }\n                        ],\n                        \"id\": 10043,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2309:88:42\"\n                      }\n                    ],\n                    \"id\": 10044,\n                    \"name\": \"Return\",\n                    \"src\": \"2302:95:42\"\n                  }\n                ],\n                \"id\": 10045,\n                \"name\": \"Block\",\n                \"src\": \"2042:363:42\"\n              }\n            ],\n            \"id\": 10046,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1961:444:42\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"_price\",\n              \"overrides\": null,\n              \"scope\": 10397,\n              \"stateMutability\": \"view\",\n              \"virtual\": true,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Fetches the fair LP token/ETH price from Uniswap, with 18 decimals of precision.\"\n                },\n                \"id\": 10047,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"2413:106:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"token\",\n                      \"overrides\": null,\n                      \"scope\": 10195,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"address\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"address\",\n                          \"stateMutability\": \"nonpayable\",\n                          \"type\": \"address\"\n                        },\n                        \"id\": 10048,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2541:7:42\"\n                      }\n                    ],\n                    \"id\": 10049,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2541:13:42\"\n                  }\n                ],\n                \"id\": 10050,\n                \"name\": \"ParameterList\",\n                \"src\": \"2540:15:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 10195,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 10051,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"2587:4:42\"\n                      }\n                    ],\n                    \"id\": 10052,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"2587:4:42\"\n                  }\n                ],\n                \"id\": 10053,\n                \"name\": \"ParameterList\",\n                \"src\": \"2586:6:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10055]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"pair\",\n                          \"overrides\": null,\n                          \"scope\": 10194,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"contract IUniswapV2Pair\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"contractScope\": null,\n                              \"name\": \"IUniswapV2Pair\",\n                              \"referencedDeclaration\": 6390,\n                              \"type\": \"contract IUniswapV2Pair\"\n                            },\n                            \"id\": 10054,\n                            \"name\": \"UserDefinedTypeName\",\n                            \"src\": \"2604:14:42\"\n                          }\n                        ],\n                        \"id\": 10055,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2604:19:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"contract IUniswapV2Pair\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 6390,\n                              \"type\": \"type(contract IUniswapV2Pair)\",\n                              \"value\": \"IUniswapV2Pair\"\n                            },\n                            \"id\": 10056,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2626:14:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10049,\n                              \"type\": \"address\",\n                              \"value\": \"token\"\n                            },\n                            \"id\": 10057,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2641:5:42\"\n                          }\n                        ],\n                        \"id\": 10058,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2626:21:42\"\n                      }\n                    ],\n                    \"id\": 10059,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2604:43:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10061]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"totalSupply\",\n                          \"overrides\": null,\n                          \"scope\": 10194,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10060,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2658:4:42\"\n                          }\n                        ],\n                        \"id\": 10061,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2658:16:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"totalSupply\",\n                              \"referencedDeclaration\": 6186,\n                              \"type\": \"function () view external returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10055,\n                                  \"type\": \"contract IUniswapV2Pair\",\n                                  \"value\": \"pair\"\n                                },\n                                \"id\": 10062,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2677:4:42\"\n                              }\n                            ],\n                            \"id\": 10063,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2677:16:42\"\n                          }\n                        ],\n                        \"id\": 10064,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2677:18:42\"\n                      }\n                    ],\n                    \"id\": 10065,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2658:37:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"==\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10061,\n                              \"type\": \"uint256\",\n                              \"value\": \"totalSupply\"\n                            },\n                            \"id\": 10066,\n                            \"name\": \"Identifier\",\n                            \"src\": \"2710:11:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 0\",\n                              \"value\": \"0\"\n                            },\n                            \"id\": 10067,\n                            \"name\": \"Literal\",\n                            \"src\": \"2725:1:42\"\n                          }\n                        ],\n                        \"id\": 10068,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"2710:16:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"functionReturnParameters\": 10053\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 0\",\n                              \"value\": \"0\"\n                            },\n                            \"id\": 10069,\n                            \"name\": \"Literal\",\n                            \"src\": \"2735:1:42\"\n                          }\n                        ],\n                        \"id\": 10070,\n                        \"name\": \"Return\",\n                        \"src\": \"2728:8:42\"\n                      }\n                    ],\n                    \"id\": 10071,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"2706:30:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10073, 10075, null]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"reserve0\",\n                          \"overrides\": null,\n                          \"scope\": 10194,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10072,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2748:4:42\"\n                          }\n                        ],\n                        \"id\": 10073,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2748:13:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"reserve1\",\n                          \"overrides\": null,\n                          \"scope\": 10194,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10074,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2763:4:42\"\n                          }\n                        ],\n                        \"id\": 10075,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2763:13:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"tuple(uint112,uint112,uint32)\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"getReserves\",\n                              \"referencedDeclaration\": 6332,\n                              \"type\": \"function () view external returns (uint112,uint112,uint32)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10055,\n                                  \"type\": \"contract IUniswapV2Pair\",\n                                  \"value\": \"pair\"\n                                },\n                                \"id\": 10076,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2782:4:42\"\n                              }\n                            ],\n                            \"id\": 10077,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2782:16:42\"\n                          }\n                        ],\n                        \"id\": 10078,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2782:18:42\"\n                      }\n                    ],\n                    \"id\": 10079,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2747:53:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10081]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"token0\",\n                          \"overrides\": null,\n                          \"scope\": 10194,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 10080,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2811:7:42\"\n                          }\n                        ],\n                        \"id\": 10081,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2811:14:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"token0\",\n                              \"referencedDeclaration\": 6318,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10055,\n                                  \"type\": \"contract IUniswapV2Pair\",\n                                  \"value\": \"pair\"\n                                },\n                                \"id\": 10082,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2828:4:42\"\n                              }\n                            ],\n                            \"id\": 10083,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2828:11:42\"\n                          }\n                        ],\n                        \"id\": 10084,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2828:13:42\"\n                      }\n                    ],\n                    \"id\": 10085,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2811:30:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10087]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"token1\",\n                          \"overrides\": null,\n                          \"scope\": 10194,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 10086,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2852:7:42\"\n                          }\n                        ],\n                        \"id\": 10087,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2852:14:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"token1\",\n                              \"referencedDeclaration\": 6323,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10055,\n                                  \"type\": \"contract IUniswapV2Pair\",\n                                  \"value\": \"pair\"\n                                },\n                                \"id\": 10088,\n                                \"name\": \"Identifier\",\n                                \"src\": \"2869:4:42\"\n                              }\n                            ],\n                            \"id\": 10089,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"2869:11:42\"\n                          }\n                        ],\n                        \"id\": 10090,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"2869:13:42\"\n                      }\n                    ],\n                    \"id\": 10091,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2852:30:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10093]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"token0FairPrice\",\n                          \"overrides\": null,\n                          \"scope\": 10194,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10092,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"2978:4:42\"\n                          }\n                        ],\n                        \"id\": 10093,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"2978:20:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"==\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10081,\n                                  \"type\": \"address\",\n                                  \"value\": \"token0\"\n                                },\n                                \"id\": 10094,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3001:6:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9993,\n                                  \"type\": \"address\",\n                                  \"value\": \"WETH_ADDRESS\"\n                                },\n                                \"id\": 10095,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3011:12:42\"\n                              }\n                            ],\n                            \"id\": 10096,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3001:22:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 10097,\n                            \"name\": \"Literal\",\n                            \"src\": \"3026:4:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"div\",\n                                  \"referencedDeclaration\": 10862,\n                                  \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                              \"typeString\": \"int_const 1000000000000000000\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"mul\",\n                                          \"referencedDeclaration\": 10845,\n                                          \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"uint256\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_address\",\n                                                      \"typeString\": \"address\"\n                                                    }\n                                                  ],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"price\",\n                                                  \"referencedDeclaration\": 7737,\n                                                  \"type\": \"function (address) view external returns (uint256)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"isStructConstructorCall\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"names\": [null],\n                                                      \"tryCall\": false,\n                                                      \"type\": \"contract BasePriceOracle\",\n                                                      \"type_conversion\": true\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": [\n                                                            {\n                                                              \"typeIdentifier\": \"t_address_payable\",\n                                                              \"typeString\": \"address payable\"\n                                                            }\n                                                          ],\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 7738,\n                                                          \"type\": \"type(contract BasePriceOracle)\",\n                                                          \"value\": \"BasePriceOracle\"\n                                                        },\n                                                        \"id\": 10098,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"3033:15:42\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"member_name\": \"sender\",\n                                                          \"referencedDeclaration\": null,\n                                                          \"type\": \"address payable\"\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": -15,\n                                                              \"type\": \"msg\",\n                                                              \"value\": \"msg\"\n                                                            },\n                                                            \"id\": 10099,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"3049:3:42\"\n                                                          }\n                                                        ],\n                                                        \"id\": 10100,\n                                                        \"name\": \"MemberAccess\",\n                                                        \"src\": \"3049:10:42\"\n                                                      }\n                                                    ],\n                                                    \"id\": 10101,\n                                                    \"name\": \"FunctionCall\",\n                                                    \"src\": \"3033:27:42\"\n                                                  }\n                                                ],\n                                                \"id\": 10102,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"3033:33:42\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 10081,\n                                                  \"type\": \"address\",\n                                                  \"value\": \"token0\"\n                                                },\n                                                \"id\": 10103,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"3067:6:42\"\n                                              }\n                                            ],\n                                            \"id\": 10104,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"3033:41:42\"\n                                          }\n                                        ],\n                                        \"id\": 10105,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"3033:45:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"31653138\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 1000000000000000000\",\n                                          \"value\": \"1e18\"\n                                        },\n                                        \"id\": 10106,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"3079:4:42\"\n                                      }\n                                    ],\n                                    \"id\": 10107,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3033:51:42\"\n                                  }\n                                ],\n                                \"id\": 10108,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"3033:55:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"**\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3130\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 10\",\n                                      \"value\": \"10\"\n                                    },\n                                    \"id\": 10109,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"3089:2:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint8\",\n                                              \"typeString\": \"uint8\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"uint256\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 10110,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"3095:7:42\"\n                                          }\n                                        ],\n                                        \"id\": 10111,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"3095:7:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"arguments\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint8\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"decimals\",\n                                              \"referencedDeclaration\": 11105,\n                                              \"type\": \"function () view external returns (uint8)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"contract ERC20Upgradeable\",\n                                                  \"type_conversion\": true\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [\n                                                        {\n                                                          \"typeIdentifier\": \"t_address\",\n                                                          \"typeString\": \"address\"\n                                                        }\n                                                      ],\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 11533,\n                                                      \"type\": \"type(contract ERC20Upgradeable)\",\n                                                      \"value\": \"ERC20Upgradeable\"\n                                                    },\n                                                    \"id\": 10112,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"3103:16:42\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 10081,\n                                                      \"type\": \"address\",\n                                                      \"value\": \"token0\"\n                                                    },\n                                                    \"id\": 10113,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"3120:6:42\"\n                                                  }\n                                                ],\n                                                \"id\": 10114,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"3103:24:42\"\n                                              }\n                                            ],\n                                            \"id\": 10115,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"3103:33:42\"\n                                          }\n                                        ],\n                                        \"id\": 10116,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"3103:35:42\"\n                                      }\n                                    ],\n                                    \"id\": 10117,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3095:44:42\"\n                                  }\n                                ],\n                                \"id\": 10118,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"3089:50:42\"\n                              }\n                            ],\n                            \"id\": 10119,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3033:107:42\"\n                          }\n                        ],\n                        \"id\": 10120,\n                        \"name\": \"Conditional\",\n                        \"src\": \"3001:139:42\"\n                      }\n                    ],\n                    \"id\": 10121,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"2978:162:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10123]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"token1FairPrice\",\n                          \"overrides\": null,\n                          \"scope\": 10194,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10122,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3151:4:42\"\n                          }\n                        ],\n                        \"id\": 10123,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3151:20:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"==\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10087,\n                                  \"type\": \"address\",\n                                  \"value\": \"token1\"\n                                },\n                                \"id\": 10124,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3174:6:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 9993,\n                                  \"type\": \"address\",\n                                  \"value\": \"WETH_ADDRESS\"\n                                },\n                                \"id\": 10125,\n                                \"name\": \"Identifier\",\n                                \"src\": \"3184:12:42\"\n                              }\n                            ],\n                            \"id\": 10126,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3174:22:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 10127,\n                            \"name\": \"Literal\",\n                            \"src\": \"3199:4:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"div\",\n                                  \"referencedDeclaration\": 10862,\n                                  \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                              \"typeString\": \"int_const 1000000000000000000\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"mul\",\n                                          \"referencedDeclaration\": 10845,\n                                          \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"uint256\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_address\",\n                                                      \"typeString\": \"address\"\n                                                    }\n                                                  ],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"price\",\n                                                  \"referencedDeclaration\": 7737,\n                                                  \"type\": \"function (address) view external returns (uint256)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"isStructConstructorCall\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"names\": [null],\n                                                      \"tryCall\": false,\n                                                      \"type\": \"contract BasePriceOracle\",\n                                                      \"type_conversion\": true\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": [\n                                                            {\n                                                              \"typeIdentifier\": \"t_address_payable\",\n                                                              \"typeString\": \"address payable\"\n                                                            }\n                                                          ],\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 7738,\n                                                          \"type\": \"type(contract BasePriceOracle)\",\n                                                          \"value\": \"BasePriceOracle\"\n                                                        },\n                                                        \"id\": 10128,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"3206:15:42\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"member_name\": \"sender\",\n                                                          \"referencedDeclaration\": null,\n                                                          \"type\": \"address payable\"\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"overloadedDeclarations\": [\n                                                                null\n                                                              ],\n                                                              \"referencedDeclaration\": -15,\n                                                              \"type\": \"msg\",\n                                                              \"value\": \"msg\"\n                                                            },\n                                                            \"id\": 10129,\n                                                            \"name\": \"Identifier\",\n                                                            \"src\": \"3222:3:42\"\n                                                          }\n                                                        ],\n                                                        \"id\": 10130,\n                                                        \"name\": \"MemberAccess\",\n                                                        \"src\": \"3222:10:42\"\n                                                      }\n                                                    ],\n                                                    \"id\": 10131,\n                                                    \"name\": \"FunctionCall\",\n                                                    \"src\": \"3206:27:42\"\n                                                  }\n                                                ],\n                                                \"id\": 10132,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"3206:33:42\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 10087,\n                                                  \"type\": \"address\",\n                                                  \"value\": \"token1\"\n                                                },\n                                                \"id\": 10133,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"3240:6:42\"\n                                              }\n                                            ],\n                                            \"id\": 10134,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"3206:41:42\"\n                                          }\n                                        ],\n                                        \"id\": 10135,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"3206:45:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"31653138\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 1000000000000000000\",\n                                          \"value\": \"1e18\"\n                                        },\n                                        \"id\": 10136,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"3252:4:42\"\n                                      }\n                                    ],\n                                    \"id\": 10137,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3206:51:42\"\n                                  }\n                                ],\n                                \"id\": 10138,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"3206:55:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"**\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3130\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 10\",\n                                      \"value\": \"10\"\n                                    },\n                                    \"id\": 10139,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"3262:2:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint8\",\n                                              \"typeString\": \"uint8\"\n                                            }\n                                          ],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"type\": \"type(uint256)\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"name\": \"uint256\",\n                                              \"type\": null\n                                            },\n                                            \"id\": 10140,\n                                            \"name\": \"ElementaryTypeName\",\n                                            \"src\": \"3268:7:42\"\n                                          }\n                                        ],\n                                        \"id\": 10141,\n                                        \"name\": \"ElementaryTypeNameExpression\",\n                                        \"src\": \"3268:7:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"arguments\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint8\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"decimals\",\n                                              \"referencedDeclaration\": 11105,\n                                              \"type\": \"function () view external returns (uint8)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"contract ERC20Upgradeable\",\n                                                  \"type_conversion\": true\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [\n                                                        {\n                                                          \"typeIdentifier\": \"t_address\",\n                                                          \"typeString\": \"address\"\n                                                        }\n                                                      ],\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 11533,\n                                                      \"type\": \"type(contract ERC20Upgradeable)\",\n                                                      \"value\": \"ERC20Upgradeable\"\n                                                    },\n                                                    \"id\": 10142,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"3276:16:42\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 10087,\n                                                      \"type\": \"address\",\n                                                      \"value\": \"token1\"\n                                                    },\n                                                    \"id\": 10143,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"3293:6:42\"\n                                                  }\n                                                ],\n                                                \"id\": 10144,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"3276:24:42\"\n                                              }\n                                            ],\n                                            \"id\": 10145,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"3276:33:42\"\n                                          }\n                                        ],\n                                        \"id\": 10146,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"3276:35:42\"\n                                      }\n                                    ],\n                                    \"id\": 10147,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3268:44:42\"\n                                  }\n                                ],\n                                \"id\": 10148,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"3262:50:42\"\n                              }\n                            ],\n                            \"id\": 10149,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"3206:107:42\"\n                          }\n                        ],\n                        \"id\": 10150,\n                        \"name\": \"Conditional\",\n                        \"src\": \"3174:139:42\"\n                      }\n                    ],\n                    \"id\": 10151,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3151:162:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10153]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"sqrtK\",\n                          \"overrides\": null,\n                          \"scope\": 10194,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10152,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"3490:7:42\"\n                          }\n                        ],\n                        \"id\": 10153,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"3490:13:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_5192296858534827628530496329220096_by_1\",\n                                          \"typeString\": \"int_const 5192...(26 digits omitted)...0096\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10396,\n                                              \"type\": \"function (uint256) pure returns (uint256)\",\n                                              \"value\": \"sqrt\"\n                                            },\n                                            \"id\": 10154,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"3506:4:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"isStructConstructorCall\": false,\n                                              \"lValueRequested\": false,\n                                              \"names\": [null],\n                                              \"tryCall\": false,\n                                              \"type\": \"uint256\",\n                                              \"type_conversion\": false\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": [\n                                                    {\n                                                      \"typeIdentifier\": \"t_uint256\",\n                                                      \"typeString\": \"uint256\"\n                                                    }\n                                                  ],\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"member_name\": \"mul\",\n                                                  \"referencedDeclaration\": 10845,\n                                                  \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 10073,\n                                                      \"type\": \"uint256\",\n                                                      \"value\": \"reserve0\"\n                                                    },\n                                                    \"id\": 10155,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"3511:8:42\"\n                                                  }\n                                                ],\n                                                \"id\": 10156,\n                                                \"name\": \"MemberAccess\",\n                                                \"src\": \"3511:12:42\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 10075,\n                                                  \"type\": \"uint256\",\n                                                  \"value\": \"reserve1\"\n                                                },\n                                                \"id\": 10157,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"3524:8:42\"\n                                              }\n                                            ],\n                                            \"id\": 10158,\n                                            \"name\": \"FunctionCall\",\n                                            \"src\": \"3511:22:42\"\n                                          }\n                                        ],\n                                        \"id\": 10159,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"3506:28:42\"\n                                      }\n                                    ],\n                                    \"id\": 10160,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"3506:32:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_rational_5192296858534827628530496329220096_by_1\",\n                                        \"typeString\": \"int_const 5192...(26 digits omitted)...0096\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"**\",\n                                      \"type\": \"int_const 5192...(26 digits omitted)...0096\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"32\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 2\",\n                                          \"value\": \"2\"\n                                        },\n                                        \"id\": 10161,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"3539:1:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"hexvalue\": \"313132\",\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": true,\n                                          \"lValueRequested\": false,\n                                          \"subdenomination\": null,\n                                          \"token\": \"number\",\n                                          \"type\": \"int_const 112\",\n                                          \"value\": \"112\"\n                                        },\n                                        \"id\": 10162,\n                                        \"name\": \"Literal\",\n                                        \"src\": \"3544:3:42\"\n                                      }\n                                    ],\n                                    \"id\": 10163,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"3539:8:42\"\n                                  }\n                                ],\n                                \"id\": 10164,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3506:42:42\"\n                              }\n                            ],\n                            \"id\": 10165,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"3506:46:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10061,\n                              \"type\": \"uint256\",\n                              \"value\": \"totalSupply\"\n                            },\n                            \"id\": 10166,\n                            \"name\": \"Identifier\",\n                            \"src\": \"3553:11:42\"\n                          }\n                        ],\n                        \"id\": 10167,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3506:59:42\"\n                      }\n                    ],\n                    \"id\": 10168,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"3490:75:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 10053\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                  \"typeString\": \"int_const 72057594037927936\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                                  \"typeString\": \"int_const 72057594037927936\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"div\",\n                                              \"referencedDeclaration\": 10862,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"uint256\",\n                                                  \"type_conversion\": false\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [\n                                                        {\n                                                          \"typeIdentifier\": \"t_uint256\",\n                                                          \"typeString\": \"uint256\"\n                                                        }\n                                                      ],\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"member_name\": \"mul\",\n                                                      \"referencedDeclaration\": 10845,\n                                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"isStructConstructorCall\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"names\": [null],\n                                                          \"tryCall\": false,\n                                                          \"type\": \"uint256\",\n                                                          \"type_conversion\": false\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": [\n                                                                {\n                                                                  \"typeIdentifier\": \"t_rational_2_by_1\",\n                                                                  \"typeString\": \"int_const 2\"\n                                                                }\n                                                              ],\n                                                              \"isConstant\": false,\n                                                              \"isLValue\": false,\n                                                              \"isPure\": false,\n                                                              \"lValueRequested\": false,\n                                                              \"member_name\": \"mul\",\n                                                              \"referencedDeclaration\": 10845,\n                                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                            },\n                                                            \"children\": [\n                                                              {\n                                                                \"attributes\": {\n                                                                  \"argumentTypes\": null,\n                                                                  \"overloadedDeclarations\": [\n                                                                    null\n                                                                  ],\n                                                                  \"referencedDeclaration\": 10153,\n                                                                  \"type\": \"uint256\",\n                                                                  \"value\": \"sqrtK\"\n                                                                },\n                                                                \"id\": 10169,\n                                                                \"name\": \"Identifier\",\n                                                                \"src\": \"3583:5:42\"\n                                                              }\n                                                            ],\n                                                            \"id\": 10170,\n                                                            \"name\": \"MemberAccess\",\n                                                            \"src\": \"3583:9:42\"\n                                                          },\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": null,\n                                                              \"hexvalue\": \"32\",\n                                                              \"isConstant\": false,\n                                                              \"isLValue\": false,\n                                                              \"isPure\": true,\n                                                              \"lValueRequested\": false,\n                                                              \"subdenomination\": null,\n                                                              \"token\": \"number\",\n                                                              \"type\": \"int_const 2\",\n                                                              \"value\": \"2\"\n                                                            },\n                                                            \"id\": 10171,\n                                                            \"name\": \"Literal\",\n                                                            \"src\": \"3593:1:42\"\n                                                          }\n                                                        ],\n                                                        \"id\": 10172,\n                                                        \"name\": \"FunctionCall\",\n                                                        \"src\": \"3583:12:42\"\n                                                      }\n                                                    ],\n                                                    \"id\": 10173,\n                                                    \"name\": \"MemberAccess\",\n                                                    \"src\": \"3583:16:42\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"isStructConstructorCall\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"names\": [null],\n                                                      \"tryCall\": false,\n                                                      \"type\": \"uint256\",\n                                                      \"type_conversion\": false\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": [\n                                                            {\n                                                              \"typeIdentifier\": \"t_uint256\",\n                                                              \"typeString\": \"uint256\"\n                                                            }\n                                                          ],\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 10396,\n                                                          \"type\": \"function (uint256) pure returns (uint256)\",\n                                                          \"value\": \"sqrt\"\n                                                        },\n                                                        \"id\": 10174,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"3600:4:42\"\n                                                      },\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"overloadedDeclarations\": [\n                                                            null\n                                                          ],\n                                                          \"referencedDeclaration\": 10093,\n                                                          \"type\": \"uint256\",\n                                                          \"value\": \"token0FairPrice\"\n                                                        },\n                                                        \"id\": 10175,\n                                                        \"name\": \"Identifier\",\n                                                        \"src\": \"3605:15:42\"\n                                                      }\n                                                    ],\n                                                    \"id\": 10176,\n                                                    \"name\": \"FunctionCall\",\n                                                    \"src\": \"3600:21:42\"\n                                                  }\n                                                ],\n                                                \"id\": 10177,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"3583:39:42\"\n                                              }\n                                            ],\n                                            \"id\": 10178,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"3583:43:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"commonType\": {\n                                                \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                                \"typeString\": \"int_const 72057594037927936\"\n                                              },\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"operator\": \"**\",\n                                              \"type\": \"int_const 72057594037927936\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"32\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 2\",\n                                                  \"value\": \"2\"\n                                                },\n                                                \"id\": 10179,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"3627:1:42\"\n                                              },\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"hexvalue\": \"3536\",\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": true,\n                                                  \"lValueRequested\": false,\n                                                  \"subdenomination\": null,\n                                                  \"token\": \"number\",\n                                                  \"type\": \"int_const 56\",\n                                                  \"value\": \"56\"\n                                                },\n                                                \"id\": 10180,\n                                                \"name\": \"Literal\",\n                                                \"src\": \"3632:2:42\"\n                                              }\n                                            ],\n                                            \"id\": 10181,\n                                            \"name\": \"BinaryOperation\",\n                                            \"src\": \"3627:7:42\"\n                                          }\n                                        ],\n                                        \"id\": 10182,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"3583:52:42\"\n                                      }\n                                    ],\n                                    \"id\": 10183,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"3583:56:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"uint256\",\n                                      \"type_conversion\": false\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_uint256\",\n                                              \"typeString\": \"uint256\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10396,\n                                          \"type\": \"function (uint256) pure returns (uint256)\",\n                                          \"value\": \"sqrt\"\n                                        },\n                                        \"id\": 10184,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3640:4:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10123,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"token1FairPrice\"\n                                        },\n                                        \"id\": 10185,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"3645:15:42\"\n                                      }\n                                    ],\n                                    \"id\": 10186,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"3640:21:42\"\n                                  }\n                                ],\n                                \"id\": 10187,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"3583:79:42\"\n                              }\n                            ],\n                            \"id\": 10188,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"3583:83:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_rational_72057594037927936_by_1\",\n                                \"typeString\": \"int_const 72057594037927936\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"operator\": \"**\",\n                              \"type\": \"int_const 72057594037927936\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"32\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 2\",\n                                  \"value\": \"2\"\n                                },\n                                \"id\": 10189,\n                                \"name\": \"Literal\",\n                                \"src\": \"3667:1:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"3536\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 56\",\n                                  \"value\": \"56\"\n                                },\n                                \"id\": 10190,\n                                \"name\": \"Literal\",\n                                \"src\": \"3672:2:42\"\n                              }\n                            ],\n                            \"id\": 10191,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"3667:7:42\"\n                          }\n                        ],\n                        \"id\": 10192,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"3583:92:42\"\n                      }\n                    ],\n                    \"id\": 10193,\n                    \"name\": \"Return\",\n                    \"src\": \"3576:99:42\"\n                  }\n                ],\n                \"id\": 10194,\n                \"name\": \"Block\",\n                \"src\": \"2593:1090:42\"\n              }\n            ],\n            \"id\": 10195,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"2525:1158:42\"\n          },\n          {\n            \"attributes\": {\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"sqrt\",\n              \"overrides\": null,\n              \"scope\": 10397,\n              \"stateMutability\": \"pure\",\n              \"virtual\": false,\n              \"visibility\": \"internal\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Fast square root function.\\n Implementation from: https://github.com/Uniswap/uniswap-lib/commit/99f3f28770640ba1bb1ff460ac7c5292fb8291a0\\n Original implementation: https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L687\"\n                },\n                \"id\": 10196,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"3691:295:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"x\",\n                      \"overrides\": null,\n                      \"scope\": 10396,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 10197,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4006:4:42\"\n                      }\n                    ],\n                    \"id\": 10198,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4006:6:42\"\n                  }\n                ],\n                \"id\": 10199,\n                \"name\": \"ParameterList\",\n                \"src\": \"4005:8:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 10396,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 10200,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"4037:4:42\"\n                      }\n                    ],\n                    \"id\": 10201,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"4037:4:42\"\n                  }\n                ],\n                \"id\": 10202,\n                \"name\": \"ParameterList\",\n                \"src\": \"4036:6:42\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"==\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10198,\n                              \"type\": \"uint256\",\n                              \"value\": \"x\"\n                            },\n                            \"id\": 10203,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4058:1:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 0\",\n                              \"value\": \"0\"\n                            },\n                            \"id\": 10204,\n                            \"name\": \"Literal\",\n                            \"src\": \"4063:1:42\"\n                          }\n                        ],\n                        \"id\": 10205,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4058:6:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"functionReturnParameters\": 10202\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 0\",\n                              \"value\": \"0\"\n                            },\n                            \"id\": 10206,\n                            \"name\": \"Literal\",\n                            \"src\": \"4073:1:42\"\n                          }\n                        ],\n                        \"id\": 10207,\n                        \"name\": \"Return\",\n                        \"src\": \"4066:8:42\"\n                      }\n                    ],\n                    \"id\": 10208,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"4054:20:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10210]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"xx\",\n                          \"overrides\": null,\n                          \"scope\": 10395,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10209,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"4085:4:42\"\n                          }\n                        ],\n                        \"id\": 10210,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"4085:7:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"overloadedDeclarations\": [null],\n                          \"referencedDeclaration\": 10198,\n                          \"type\": \"uint256\",\n                          \"value\": \"x\"\n                        },\n                        \"id\": 10211,\n                        \"name\": \"Identifier\",\n                        \"src\": \"4095:1:42\"\n                      }\n                    ],\n                    \"id\": 10212,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"4085:11:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10214]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"r\",\n                          \"overrides\": null,\n                          \"scope\": 10395,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10213,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"4107:4:42\"\n                          }\n                        ],\n                        \"id\": 10214,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"4107:6:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"hexvalue\": \"31\",\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"subdenomination\": null,\n                          \"token\": \"number\",\n                          \"type\": \"int_const 1\",\n                          \"value\": \"1\"\n                        },\n                        \"id\": 10215,\n                        \"name\": \"Literal\",\n                        \"src\": \"4116:1:42\"\n                      }\n                    ],\n                    \"id\": 10216,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"4107:10:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10210,\n                              \"type\": \"uint256\",\n                              \"value\": \"xx\"\n                            },\n                            \"id\": 10217,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4134:2:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3078313030303030303030303030303030303030303030303030303030303030303030\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 3402...(31 digits omitted)...1456\",\n                              \"value\": \"0x100000000000000000000000000000000\"\n                            },\n                            \"id\": 10218,\n                            \"name\": \"Literal\",\n                            \"src\": \"4140:35:42\"\n                          }\n                        ],\n                        \"id\": 10219,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4134:41:42\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \">>=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10210,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"xx\"\n                                    },\n                                    \"id\": 10220,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4192:2:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"313238\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 128\",\n                                      \"value\": \"128\"\n                                    },\n                                    \"id\": 10221,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4199:3:42\"\n                                  }\n                                ],\n                                \"id\": 10222,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4192:10:42\"\n                              }\n                            ],\n                            \"id\": 10223,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4192:10:42\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<<=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10214,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r\"\n                                    },\n                                    \"id\": 10224,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4217:1:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3634\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 64\",\n                                      \"value\": \"64\"\n                                    },\n                                    \"id\": 10225,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4223:2:42\"\n                                  }\n                                ],\n                                \"id\": 10226,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4217:8:42\"\n                              }\n                            ],\n                            \"id\": 10227,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4217:8:42\"\n                          }\n                        ],\n                        \"id\": 10228,\n                        \"name\": \"Block\",\n                        \"src\": \"4177:60:42\"\n                      }\n                    ],\n                    \"id\": 10229,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"4130:107:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10210,\n                              \"type\": \"uint256\",\n                              \"value\": \"xx\"\n                            },\n                            \"id\": 10230,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4251:2:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30783130303030303030303030303030303030\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 18446744073709551616\",\n                              \"value\": \"0x10000000000000000\"\n                            },\n                            \"id\": 10231,\n                            \"name\": \"Literal\",\n                            \"src\": \"4257:19:42\"\n                          }\n                        ],\n                        \"id\": 10232,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4251:25:42\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \">>=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10210,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"xx\"\n                                    },\n                                    \"id\": 10233,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4293:2:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3634\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 64\",\n                                      \"value\": \"64\"\n                                    },\n                                    \"id\": 10234,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4300:2:42\"\n                                  }\n                                ],\n                                \"id\": 10235,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4293:9:42\"\n                              }\n                            ],\n                            \"id\": 10236,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4293:9:42\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<<=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10214,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r\"\n                                    },\n                                    \"id\": 10237,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4317:1:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3332\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 32\",\n                                      \"value\": \"32\"\n                                    },\n                                    \"id\": 10238,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4323:2:42\"\n                                  }\n                                ],\n                                \"id\": 10239,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4317:8:42\"\n                              }\n                            ],\n                            \"id\": 10240,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4317:8:42\"\n                          }\n                        ],\n                        \"id\": 10241,\n                        \"name\": \"Block\",\n                        \"src\": \"4278:59:42\"\n                      }\n                    ],\n                    \"id\": 10242,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"4247:90:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10210,\n                              \"type\": \"uint256\",\n                              \"value\": \"xx\"\n                            },\n                            \"id\": 10243,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4351:2:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3078313030303030303030\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 4294967296\",\n                              \"value\": \"0x100000000\"\n                            },\n                            \"id\": 10244,\n                            \"name\": \"Literal\",\n                            \"src\": \"4357:11:42\"\n                          }\n                        ],\n                        \"id\": 10245,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4351:17:42\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \">>=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10210,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"xx\"\n                                    },\n                                    \"id\": 10246,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4385:2:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3332\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 32\",\n                                      \"value\": \"32\"\n                                    },\n                                    \"id\": 10247,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4392:2:42\"\n                                  }\n                                ],\n                                \"id\": 10248,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4385:9:42\"\n                              }\n                            ],\n                            \"id\": 10249,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4385:9:42\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<<=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10214,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r\"\n                                    },\n                                    \"id\": 10250,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4409:1:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3136\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 16\",\n                                      \"value\": \"16\"\n                                    },\n                                    \"id\": 10251,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4415:2:42\"\n                                  }\n                                ],\n                                \"id\": 10252,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4409:8:42\"\n                              }\n                            ],\n                            \"id\": 10253,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4409:8:42\"\n                          }\n                        ],\n                        \"id\": 10254,\n                        \"name\": \"Block\",\n                        \"src\": \"4370:59:42\"\n                      }\n                    ],\n                    \"id\": 10255,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"4347:82:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10210,\n                              \"type\": \"uint256\",\n                              \"value\": \"xx\"\n                            },\n                            \"id\": 10256,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4443:2:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30783130303030\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 65536\",\n                              \"value\": \"0x10000\"\n                            },\n                            \"id\": 10257,\n                            \"name\": \"Literal\",\n                            \"src\": \"4449:7:42\"\n                          }\n                        ],\n                        \"id\": 10258,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4443:13:42\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \">>=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10210,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"xx\"\n                                    },\n                                    \"id\": 10259,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4473:2:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"3136\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 16\",\n                                      \"value\": \"16\"\n                                    },\n                                    \"id\": 10260,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4480:2:42\"\n                                  }\n                                ],\n                                \"id\": 10261,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4473:9:42\"\n                              }\n                            ],\n                            \"id\": 10262,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4473:9:42\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<<=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10214,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r\"\n                                    },\n                                    \"id\": 10263,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4497:1:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"38\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 8\",\n                                      \"value\": \"8\"\n                                    },\n                                    \"id\": 10264,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4503:1:42\"\n                                  }\n                                ],\n                                \"id\": 10265,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4497:7:42\"\n                              }\n                            ],\n                            \"id\": 10266,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4497:7:42\"\n                          }\n                        ],\n                        \"id\": 10267,\n                        \"name\": \"Block\",\n                        \"src\": \"4458:58:42\"\n                      }\n                    ],\n                    \"id\": 10268,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"4439:77:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10210,\n                              \"type\": \"uint256\",\n                              \"value\": \"xx\"\n                            },\n                            \"id\": 10269,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4530:2:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3078313030\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 256\",\n                              \"value\": \"0x100\"\n                            },\n                            \"id\": 10270,\n                            \"name\": \"Literal\",\n                            \"src\": \"4536:5:42\"\n                          }\n                        ],\n                        \"id\": 10271,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4530:11:42\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \">>=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10210,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"xx\"\n                                    },\n                                    \"id\": 10272,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4558:2:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"38\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 8\",\n                                      \"value\": \"8\"\n                                    },\n                                    \"id\": 10273,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4565:1:42\"\n                                  }\n                                ],\n                                \"id\": 10274,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4558:8:42\"\n                              }\n                            ],\n                            \"id\": 10275,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4558:8:42\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<<=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10214,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r\"\n                                    },\n                                    \"id\": 10276,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4581:1:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"34\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 4\",\n                                      \"value\": \"4\"\n                                    },\n                                    \"id\": 10277,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4587:1:42\"\n                                  }\n                                ],\n                                \"id\": 10278,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4581:7:42\"\n                              }\n                            ],\n                            \"id\": 10279,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4581:7:42\"\n                          }\n                        ],\n                        \"id\": 10280,\n                        \"name\": \"Block\",\n                        \"src\": \"4543:57:42\"\n                      }\n                    ],\n                    \"id\": 10281,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"4526:74:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10210,\n                              \"type\": \"uint256\",\n                              \"value\": \"xx\"\n                            },\n                            \"id\": 10282,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4614:2:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"30783130\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 16\",\n                              \"value\": \"0x10\"\n                            },\n                            \"id\": 10283,\n                            \"name\": \"Literal\",\n                            \"src\": \"4620:4:42\"\n                          }\n                        ],\n                        \"id\": 10284,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4614:10:42\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \">>=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10210,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"xx\"\n                                    },\n                                    \"id\": 10285,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4641:2:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"34\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 4\",\n                                      \"value\": \"4\"\n                                    },\n                                    \"id\": 10286,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4648:1:42\"\n                                  }\n                                ],\n                                \"id\": 10287,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4641:8:42\"\n                              }\n                            ],\n                            \"id\": 10288,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4641:8:42\"\n                          },\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<<=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10214,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r\"\n                                    },\n                                    \"id\": 10289,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4664:1:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"32\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 2\",\n                                      \"value\": \"2\"\n                                    },\n                                    \"id\": 10290,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4670:1:42\"\n                                  }\n                                ],\n                                \"id\": 10291,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4664:7:42\"\n                              }\n                            ],\n                            \"id\": 10292,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4664:7:42\"\n                          }\n                        ],\n                        \"id\": 10293,\n                        \"name\": \"Block\",\n                        \"src\": \"4626:57:42\"\n                      }\n                    ],\n                    \"id\": 10294,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"4610:73:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"falseBody\": null\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \">=\",\n                          \"type\": \"bool\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10210,\n                              \"type\": \"uint256\",\n                              \"value\": \"xx\"\n                            },\n                            \"id\": 10295,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4697:2:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"307838\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 8\",\n                              \"value\": \"0x8\"\n                            },\n                            \"id\": 10296,\n                            \"name\": \"Literal\",\n                            \"src\": \"4703:3:42\"\n                          }\n                        ],\n                        \"id\": 10297,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"4697:9:42\"\n                      },\n                      {\n                        \"children\": [\n                          {\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<<=\",\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10214,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r\"\n                                    },\n                                    \"id\": 10298,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"4723:1:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"31\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 1\",\n                                      \"value\": \"1\"\n                                    },\n                                    \"id\": 10299,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"4729:1:42\"\n                                  }\n                                ],\n                                \"id\": 10300,\n                                \"name\": \"Assignment\",\n                                \"src\": \"4723:7:42\"\n                              }\n                            ],\n                            \"id\": 10301,\n                            \"name\": \"ExpressionStatement\",\n                            \"src\": \"4723:7:42\"\n                          }\n                        ],\n                        \"id\": 10302,\n                        \"name\": \"Block\",\n                        \"src\": \"4708:34:42\"\n                      }\n                    ],\n                    \"id\": 10303,\n                    \"name\": \"IfStatement\",\n                    \"src\": \"4693:49:42\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10214,\n                              \"type\": \"uint256\",\n                              \"value\": \"r\"\n                            },\n                            \"id\": 10304,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4754:1:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \">>\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isInlineArray\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"+\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10214,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"r\"\n                                        },\n                                        \"id\": 10305,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"4759:1:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"/\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10198,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"x\"\n                                            },\n                                            \"id\": 10306,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4763:1:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10214,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"r\"\n                                            },\n                                            \"id\": 10307,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4767:1:42\"\n                                          }\n                                        ],\n                                        \"id\": 10308,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"4763:5:42\"\n                                      }\n                                    ],\n                                    \"id\": 10309,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"4759:9:42\"\n                                  }\n                                ],\n                                \"id\": 10310,\n                                \"name\": \"TupleExpression\",\n                                \"src\": \"4758:11:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 10311,\n                                \"name\": \"Literal\",\n                                \"src\": \"4773:1:42\"\n                              }\n                            ],\n                            \"id\": 10312,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"4758:16:42\"\n                          }\n                        ],\n                        \"id\": 10313,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4754:20:42\"\n                      }\n                    ],\n                    \"id\": 10314,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4754:20:42\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10214,\n                              \"type\": \"uint256\",\n                              \"value\": \"r\"\n                            },\n                            \"id\": 10315,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4785:1:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \">>\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isInlineArray\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"+\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10214,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"r\"\n                                        },\n                                        \"id\": 10316,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"4790:1:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"/\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10198,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"x\"\n                                            },\n                                            \"id\": 10317,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4794:1:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10214,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"r\"\n                                            },\n                                            \"id\": 10318,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4798:1:42\"\n                                          }\n                                        ],\n                                        \"id\": 10319,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"4794:5:42\"\n                                      }\n                                    ],\n                                    \"id\": 10320,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"4790:9:42\"\n                                  }\n                                ],\n                                \"id\": 10321,\n                                \"name\": \"TupleExpression\",\n                                \"src\": \"4789:11:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 10322,\n                                \"name\": \"Literal\",\n                                \"src\": \"4804:1:42\"\n                              }\n                            ],\n                            \"id\": 10323,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"4789:16:42\"\n                          }\n                        ],\n                        \"id\": 10324,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4785:20:42\"\n                      }\n                    ],\n                    \"id\": 10325,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4785:20:42\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10214,\n                              \"type\": \"uint256\",\n                              \"value\": \"r\"\n                            },\n                            \"id\": 10326,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4816:1:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \">>\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isInlineArray\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"+\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10214,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"r\"\n                                        },\n                                        \"id\": 10327,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"4821:1:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"/\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10198,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"x\"\n                                            },\n                                            \"id\": 10328,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4825:1:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10214,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"r\"\n                                            },\n                                            \"id\": 10329,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4829:1:42\"\n                                          }\n                                        ],\n                                        \"id\": 10330,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"4825:5:42\"\n                                      }\n                                    ],\n                                    \"id\": 10331,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"4821:9:42\"\n                                  }\n                                ],\n                                \"id\": 10332,\n                                \"name\": \"TupleExpression\",\n                                \"src\": \"4820:11:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 10333,\n                                \"name\": \"Literal\",\n                                \"src\": \"4835:1:42\"\n                              }\n                            ],\n                            \"id\": 10334,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"4820:16:42\"\n                          }\n                        ],\n                        \"id\": 10335,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4816:20:42\"\n                      }\n                    ],\n                    \"id\": 10336,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4816:20:42\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10214,\n                              \"type\": \"uint256\",\n                              \"value\": \"r\"\n                            },\n                            \"id\": 10337,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4847:1:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \">>\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isInlineArray\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"+\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10214,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"r\"\n                                        },\n                                        \"id\": 10338,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"4852:1:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"/\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10198,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"x\"\n                                            },\n                                            \"id\": 10339,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4856:1:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10214,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"r\"\n                                            },\n                                            \"id\": 10340,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4860:1:42\"\n                                          }\n                                        ],\n                                        \"id\": 10341,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"4856:5:42\"\n                                      }\n                                    ],\n                                    \"id\": 10342,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"4852:9:42\"\n                                  }\n                                ],\n                                \"id\": 10343,\n                                \"name\": \"TupleExpression\",\n                                \"src\": \"4851:11:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 10344,\n                                \"name\": \"Literal\",\n                                \"src\": \"4866:1:42\"\n                              }\n                            ],\n                            \"id\": 10345,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"4851:16:42\"\n                          }\n                        ],\n                        \"id\": 10346,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4847:20:42\"\n                      }\n                    ],\n                    \"id\": 10347,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4847:20:42\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10214,\n                              \"type\": \"uint256\",\n                              \"value\": \"r\"\n                            },\n                            \"id\": 10348,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4878:1:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \">>\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isInlineArray\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"+\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10214,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"r\"\n                                        },\n                                        \"id\": 10349,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"4883:1:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"/\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10198,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"x\"\n                                            },\n                                            \"id\": 10350,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4887:1:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10214,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"r\"\n                                            },\n                                            \"id\": 10351,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4891:1:42\"\n                                          }\n                                        ],\n                                        \"id\": 10352,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"4887:5:42\"\n                                      }\n                                    ],\n                                    \"id\": 10353,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"4883:9:42\"\n                                  }\n                                ],\n                                \"id\": 10354,\n                                \"name\": \"TupleExpression\",\n                                \"src\": \"4882:11:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 10355,\n                                \"name\": \"Literal\",\n                                \"src\": \"4897:1:42\"\n                              }\n                            ],\n                            \"id\": 10356,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"4882:16:42\"\n                          }\n                        ],\n                        \"id\": 10357,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4878:20:42\"\n                      }\n                    ],\n                    \"id\": 10358,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4878:20:42\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10214,\n                              \"type\": \"uint256\",\n                              \"value\": \"r\"\n                            },\n                            \"id\": 10359,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4909:1:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \">>\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isInlineArray\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"+\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10214,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"r\"\n                                        },\n                                        \"id\": 10360,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"4914:1:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"/\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10198,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"x\"\n                                            },\n                                            \"id\": 10361,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4918:1:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10214,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"r\"\n                                            },\n                                            \"id\": 10362,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4922:1:42\"\n                                          }\n                                        ],\n                                        \"id\": 10363,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"4918:5:42\"\n                                      }\n                                    ],\n                                    \"id\": 10364,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"4914:9:42\"\n                                  }\n                                ],\n                                \"id\": 10365,\n                                \"name\": \"TupleExpression\",\n                                \"src\": \"4913:11:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 10366,\n                                \"name\": \"Literal\",\n                                \"src\": \"4928:1:42\"\n                              }\n                            ],\n                            \"id\": 10367,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"4913:16:42\"\n                          }\n                        ],\n                        \"id\": 10368,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4909:20:42\"\n                      }\n                    ],\n                    \"id\": 10369,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4909:20:42\"\n                  },\n                  {\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"=\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10214,\n                              \"type\": \"uint256\",\n                              \"value\": \"r\"\n                            },\n                            \"id\": 10370,\n                            \"name\": \"Identifier\",\n                            \"src\": \"4940:1:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_uint256\",\n                                \"typeString\": \"uint256\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \">>\",\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isInlineArray\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"uint256\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"commonType\": {\n                                        \"typeIdentifier\": \"t_uint256\",\n                                        \"typeString\": \"uint256\"\n                                      },\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"operator\": \"+\",\n                                      \"type\": \"uint256\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10214,\n                                          \"type\": \"uint256\",\n                                          \"value\": \"r\"\n                                        },\n                                        \"id\": 10371,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"4945:1:42\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"commonType\": {\n                                            \"typeIdentifier\": \"t_uint256\",\n                                            \"typeString\": \"uint256\"\n                                          },\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"operator\": \"/\",\n                                          \"type\": \"uint256\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10198,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"x\"\n                                            },\n                                            \"id\": 10372,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4949:1:42\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10214,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"r\"\n                                            },\n                                            \"id\": 10373,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"4953:1:42\"\n                                          }\n                                        ],\n                                        \"id\": 10374,\n                                        \"name\": \"BinaryOperation\",\n                                        \"src\": \"4949:5:42\"\n                                      }\n                                    ],\n                                    \"id\": 10375,\n                                    \"name\": \"BinaryOperation\",\n                                    \"src\": \"4945:9:42\"\n                                  }\n                                ],\n                                \"id\": 10376,\n                                \"name\": \"TupleExpression\",\n                                \"src\": \"4944:11:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"31\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"int_const 1\",\n                                  \"value\": \"1\"\n                                },\n                                \"id\": 10377,\n                                \"name\": \"Literal\",\n                                \"src\": \"4959:1:42\"\n                              }\n                            ],\n                            \"id\": 10378,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"4944:16:42\"\n                          }\n                        ],\n                        \"id\": 10379,\n                        \"name\": \"Assignment\",\n                        \"src\": \"4940:20:42\"\n                      }\n                    ],\n                    \"id\": 10380,\n                    \"name\": \"ExpressionStatement\",\n                    \"src\": \"4940:20:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10382]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"r1\",\n                          \"overrides\": null,\n                          \"scope\": 10395,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10381,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"5008:4:42\"\n                          }\n                        ],\n                        \"id\": 10382,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"5008:7:42\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"/\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10198,\n                              \"type\": \"uint256\",\n                              \"value\": \"x\"\n                            },\n                            \"id\": 10383,\n                            \"name\": \"Identifier\",\n                            \"src\": \"5018:1:42\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10214,\n                              \"type\": \"uint256\",\n                              \"value\": \"r\"\n                            },\n                            \"id\": 10384,\n                            \"name\": \"Identifier\",\n                            \"src\": \"5022:1:42\"\n                          }\n                        ],\n                        \"id\": 10385,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"5018:5:42\"\n                      }\n                    ],\n                    \"id\": 10386,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"5008:15:42\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 10202\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isInlineArray\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"type\": \"uint256\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"commonType\": {\n                                    \"typeIdentifier\": \"t_uint256\",\n                                    \"typeString\": \"uint256\"\n                                  },\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"operator\": \"<\",\n                                  \"type\": \"bool\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10214,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r\"\n                                    },\n                                    \"id\": 10387,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5042:1:42\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10382,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"r1\"\n                                    },\n                                    \"id\": 10388,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"5046:2:42\"\n                                  }\n                                ],\n                                \"id\": 10389,\n                                \"name\": \"BinaryOperation\",\n                                \"src\": \"5042:6:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10214,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"r\"\n                                },\n                                \"id\": 10390,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5051:1:42\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10382,\n                                  \"type\": \"uint256\",\n                                  \"value\": \"r1\"\n                                },\n                                \"id\": 10391,\n                                \"name\": \"Identifier\",\n                                \"src\": \"5055:2:42\"\n                              }\n                            ],\n                            \"id\": 10392,\n                            \"name\": \"Conditional\",\n                            \"src\": \"5042:15:42\"\n                          }\n                        ],\n                        \"id\": 10393,\n                        \"name\": \"TupleExpression\",\n                        \"src\": \"5041:17:42\"\n                      }\n                    ],\n                    \"id\": 10394,\n                    \"name\": \"Return\",\n                    \"src\": \"5034:24:42\"\n                  }\n                ],\n                \"id\": 10395,\n                \"name\": \"Block\",\n                \"src\": \"4043:1023:42\"\n              }\n            ],\n            \"id\": 10396,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"3992:1074:42\"\n          }\n        ],\n        \"id\": 10397,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"1025:4044:42\"\n      }\n    ],\n    \"id\": 10398,\n    \"name\": \"SourceUnit\",\n    \"src\": \"312:4759:42\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.170Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements the `PriceOracle` interface used by Fuse pools (and Compound v2).\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Implements the PriceOracle interface for Fuse pools (and Compound v2).\",\n        \"params\": {\n          \"cToken\": \"The cToken address for price retrieval\"\n        },\n        \"returns\": {\n          \"_0\": \"Price denominated in ETH, with 18 decimals, for the given cToken address\"\n        }\n      },\n      \"price(address)\": {\n        \"params\": {\n          \"underlying\": \"The underlying token address for which to get the price (set to zero address for ETH)\"\n        },\n        \"returns\": {\n          \"_0\": \"Price denominated in ETH (scaled by 1e18)\"\n        }\n      }\n    },\n    \"stateVariables\": {\n      \"WETH_ADDRESS\": {\n        \"details\": \"WETH contract address.\"\n      }\n    },\n    \"title\": \"UniswapLpTokenPriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"notice\": \"Get the underlying price of a cToken.\"\n      },\n      \"price(address)\": {\n        \"notice\": \"Get the LP token price price for an underlying token address.\"\n      }\n    },\n    \"notice\": \"UniswapLpTokenPriceOracle is a price oracle for Uniswap (and SushiSwap) LP tokens.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/UniswapTwapPriceOracleV2Factory.json",
    "content": "{\n  \"contractName\": \"UniswapTwapPriceOracleV2Factory\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_rootOracle\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_logic\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WETH\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"constant\": true\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"logic\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"constant\": true\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"oracles\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract UniswapTwapPriceOracleV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"constant\": true\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"rootOracle\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"constant\": true\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"uniswapV2Factory\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"baseToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"deploy\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_rootOracle\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_logic\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WETH\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapV2Factory\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"baseToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"deploy\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"logic\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"oracles\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract UniswapTwapPriceOracleV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"rootOracle\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Constructor that sets the `UniswapTwapPriceOracleV2Root` and `UniswapTwapPriceOracleV2` implementation contract.\\\"},\\\"deploy(address,address)\\\":{\\\"params\\\":{\\\"baseToken\\\":\\\"The base token of the pairs for which this oracle will be used.\\\",\\\"uniswapV2Factory\\\":\\\"The `UniswapV2Factory` contract of the pairs for which this oracle will be used.\\\"}}},\\\"stateVariables\\\":{\\\"WETH\\\":{\\\"details\\\":\\\"WETH token contract address.\\\"},\\\"logic\\\":{\\\"details\\\":\\\"Implementation address for the `UniswapV3TwapPriceOracleV2`.\\\"},\\\"rootOracle\\\":{\\\"details\\\":\\\"`UniswapTwapPriceOracleV2Root` contract address.\\\"}},\\\"title\\\":\\\"UniswapTwapPriceOracleV2Factory\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"deploy(address,address)\\\":{\\\"notice\\\":\\\"Deploys a `UniswapTwapPriceOracleV2`.\\\"},\\\"oracles(address,address)\\\":{\\\"notice\\\":\\\"Maps `UniswapV2Factory` contracts to base tokens to `UniswapTwapPriceOracleV2` contract addresses.\\\"}},\\\"notice\\\":\\\"Deploys and catalogs UniswapTwapPriceOracleV2 contracts.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapTwapPriceOracleV2Factory.sol\\\":\\\"UniswapTwapPriceOracleV2Factory\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0x2b941784ef209f5065f5a1d2bfb7363762da10f30af5f05ba5ab135862ac74dd\\\",\\\"license\\\":\\\"BSD-3-Clause\\\",\\\"urls\\\":[\\\"bzz-raw://346d011b27636783409e044f91a8d035f72e20986e34dc3b8fe8f4b1b57fdf3e\\\",\\\"dweb:/ipfs/QmaW51imyx2UrGLK31AwPX31RgF3QFzhyka5Q9vb2tAxGi\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xf7bf43655f5564821af99401f06bb8114e4eba36c5091c18566c5e58df1b730f\\\",\\\"license\\\":\\\"BSD-3-Clause\\\",\\\"urls\\\":[\\\"bzz-raw://70234b3d3db8f599cf7105559683d2ea23cf6e76ee60bec6b97bed9da337b7a2\\\",\\\"dweb:/ipfs/QmSMp41tEM9kYJhPUAugqnDN7XSKsQY22gg11gV1TEANXo\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x5bea460265cac239bb14115e67fc6f565cbb33314d15a4f854fe2f0b56a19656\\\",\\\"license\\\":\\\"BSD-3-Clause\\\",\\\"urls\\\":[\\\"bzz-raw://8838f0322fdbfab13487d1a0ff4ab9bcf99380bb56565d3ab877ab52fdb0e7e7\\\",\\\"dweb:/ipfs/QmVavYcrouTANWjLXig51tnibWWisWnT5GwuuaspzncMXi\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Factory.sol\\\":{\\\"keccak256\\\":\\\"0x49def4668714cc95b019ca1e0d1ae3600d84f68abf0100482960e87a42748d20\\\",\\\"license\\\":\\\"GPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://f41df86e809ca6eff945b19ad280ff4ededd02bd5d6e69191fddad0b7063e955\\\",\\\"dweb:/ipfs/QmQJFutUFHUZEieKNdvLvDtHA75J7pa4JTedDCGkv4YD3f\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/uniswap/IUniswapV2Pair.sol\\\":{\\\"keccak256\\\":\\\"0x32f2ac1a04860ddedb880798a86ebb9b672007a32088a0a26c4f2d84991dff31\\\",\\\"license\\\":\\\"GPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://fa9242659aea58bca561a8d1d1aeb435b70da1fab187518457929f9237e8f36b\\\",\\\"dweb:/ipfs/QmVkafRYyXjEmoii7k8aYzqWwoPPpYe4nE8c78aAERKpMC\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x95147a8358ff9d87d473b7d386870eeab5f2c531808bdf8d4e8eea8a06eafdc7\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://6c53cecdea2bbbc04e5e64a972bb05e41732fe2896dc99715f9bfcfabc968ba9\\\",\\\"dweb:/ipfs/QmPpdnyoRwZ7CR64FCgVU9mmJpoW5M3gtSVdU7B6K8vzrP\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapTwapPriceOracleV2.sol\\\":{\\\"keccak256\\\":\\\"0xe0da878ef377ea37e021a49d1288e3e5be3115c45ec8089b3bf635ac6f2648dd\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://2b2068335b5fd9a79ef1fd8b0a14dacea89c9a22fd42e54f30249e36de7c8f32\\\",\\\"dweb:/ipfs/QmYBtiQekprggsH5npJd5mTsQTSq2nC7AZgmeLNiymvGpH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapTwapPriceOracleV2Factory.sol\\\":{\\\"keccak256\\\":\\\"0xb3b9439141f899876d9c78dc68f055a6f3ef05c2b269cb16877df87f3122d5a8\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://0040d4097e1ced7c49988dff02f61c117cf0fc978025fc94666775a6de0b0357\\\",\\\"dweb:/ipfs/QmfQCJPN4P1UEFx1uXea7e5XSzCBNeE1f8jDwTBpWML912\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapTwapPriceOracleV2Root.sol\\\":{\\\"keccak256\\\":\\\"0xfa92cfc232a0b1084a86496f5b85e2e17f84c157d7689e8acaf5dc3304e54f49\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://06880faed02b9b40df777bcb15c4b70ee456db02ca705407f1dc073d7ed8a235\\\",\\\"dweb:/ipfs/QmX9osD5NWVYUVqL9NMYvkQBxjcbY6caNocPCREQjJsa6Y\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://5e30d594df25d0651c2cd6f85d856e5fc9f3dbae68d017e1da33eb3c7e2f1ecc\\\",\\\"dweb:/ipfs/QmPgkV99jZr3Zs9ex8dJ5j22oX4wDuDtMCnXNy67bTwgAB\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa828d9e2842506a66293b8f68dcb5a81dbb492bffc86a2c683c1b586ccbdf23e\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://787c8180cf88565322e50cf22a4ba507ee1f1bcbabf9797d3aa57acd3a59b073\\\",\\\"dweb:/ipfs/QmQpxHQUPnsnm2TbeycRXfYyVrYguxw4KQRBon1Eun1uZD\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7dbc89479d30592e82442edc38053b380f611037a5e6ceafc7bf57a7aa1f0305\\\",\\\"dweb:/ipfs/QmcdYtt56WmjeYvsFjK69FnahnAriw88VzY3XRZwXkQKKN\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x506dd0718f9ace50588c13848167df5e04ae16abb56341afb10c31ff149bc79b\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://f8f230f6d6889a76ae5a6563c3e0acaee90a8687896188be90fff8d9574c8e13\\\",\\\"dweb:/ipfs/QmcdZmHdcbBkbSet3Yx8hceQK4itK8SBrV7G2nasVZGJwH\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]},\\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://a6b81dcc816857a9d981386f6d8de49198420ee41cdc0ecade366ab412174d03\\\",\\\"dweb:/ipfs/QmV2vznMT6m9qo3pFMAWi3Nz3UDhwesgwFxeXe6Tod3v8A\\\"]},\\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\\\",\\\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60c060405234801561001057600080fd5b506040516105893803806105898339818101604052604081101561003357600080fd5b5080516020909101516001600160a01b0382166100815760405162461bcd60e51b815260040180806020018281038252602981526020018061051d6029913960400191505060405180910390fd5b6001600160a01b0381166100c65760405162461bcd60e51b81526004018080602001828103825260438152602001806105466043913960600191505060405180910390fd5b6001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c61040b610112600039806101bc52806102ea5250806101f4528061030e525061040b6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806352a03c031461005c578063545e7c61146100a6578063ad5c4648146100d4578063d7dfa0dd146100dc578063e3cb23a5146100e4575b600080fd5b61008a6004803603604081101561007257600080fd5b506001600160a01b03813581169160200135166100ec565b604080516001600160a01b039092168252519081900360200190f35b61008a600480360360408110156100bc57600080fd5b506001600160a01b038135811691602001351661010f565b61008a6102d0565b61008a6102e8565b61008a61030c565b60006020818152928152604080822090935290815220546001600160a01b031681565b60006001600160a01b0382166101375773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc291505b6001600160a01b03808416600090815260208181526040808320868516845290915290205416801561016a5790506102ca565b6000848460405160200180836001600160a01b031660601b8152601401826001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120905060006101e17f000000000000000000000000000000000000000000000000000000000000000083610330565b9050806001600160a01b031663c0c53b8b7f000000000000000000000000000000000000000000000000000000000000000088886040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b031681526020019350505050600060405180830381600087803b15801561027457600080fd5b505af1158015610288573d6000803e3d6000fd5b505050506001600160a01b038681166000908152602081815260408083208985168452909152902080546001600160a01b031916918316919091179055925050505b92915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b0381166102ca576040805162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015290519081900360640190fdfea264697066735822122060bdc654e01b6600803b45f7d31a7d09f0e77069b7ec024c52b994bff031639f64736f6c634300060c0033556e69737761705477617050726963654f7261636c655632526f6f74206e6f7420646566696e65642e556e69737761705477617050726963654f7261636c65563220696d706c656d656e746174696f6e2f6c6f67696320636f6e7472616374206e6f7420646566696e65642e\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100575760003560e01c806352a03c031461005c578063545e7c61146100a6578063ad5c4648146100d4578063d7dfa0dd146100dc578063e3cb23a5146100e4575b600080fd5b61008a6004803603604081101561007257600080fd5b506001600160a01b03813581169160200135166100ec565b604080516001600160a01b039092168252519081900360200190f35b61008a600480360360408110156100bc57600080fd5b506001600160a01b038135811691602001351661010f565b61008a6102d0565b61008a6102e8565b61008a61030c565b60006020818152928152604080822090935290815220546001600160a01b031681565b60006001600160a01b0382166101375773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc291505b6001600160a01b03808416600090815260208181526040808320868516845290915290205416801561016a5790506102ca565b6000848460405160200180836001600160a01b031660601b8152601401826001600160a01b031660601b81526014019250505060405160208183030381529060405280519060200120905060006101e17f000000000000000000000000000000000000000000000000000000000000000083610330565b9050806001600160a01b031663c0c53b8b7f000000000000000000000000000000000000000000000000000000000000000088886040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b03168152602001826001600160a01b031681526020019350505050600060405180830381600087803b15801561027457600080fd5b505af1158015610288573d6000803e3d6000fd5b505050506001600160a01b038681166000908152602081815260408083208985168452909152902080546001600160a01b031916918316919091179055925050505b92915050565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b0381166102ca576040805162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015290519081900360640190fdfea264697066735822122060bdc654e01b6600803b45f7d31a7d09f0e77069b7ec024c52b994bff031639f64736f6c634300060c0033\",\n  \"immutableReferences\": {\n    \"21660\": [\n      {\n        \"length\": 32,\n        \"start\": 500\n      },\n      {\n        \"length\": 32,\n        \"start\": 782\n      }\n    ],\n    \"21663\": [\n      {\n        \"length\": 32,\n        \"start\": 444\n      },\n      {\n        \"length\": 32,\n        \"start\": 746\n      }\n    ]\n  },\n  \"sourceMap\": \"387:2261:108:-:0;;;1197:326;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1197:326:108;;;;;;;-1:-1:-1;;;;;1273:25:108;;1265:79;;;;-1:-1:-1;;;1265:79:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1363:20:108;;1355:100;;;;-1:-1:-1;;;1355:100:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1466:24:108;;;;;;;;1501:14;;;;;387:2261;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"387:2261:108:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;965:79;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;965:79:108;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;965:79:108;;;;;;;;;;;;;;1805:840;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1805:840:108;;;;;;;;;;:::i;495:73::-;;;:::i;793:30::-;;;:::i;657:35::-;;;:::i;965:79::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;965:79:108;;:::o;1805:840::-;1884:7;-1:-1:-1;;;;;1937:23:108;;1933:54;;526:42;1962:25;;1933:54;-1:-1:-1;;;;;2078:25:108;;;2046:21;2078:25;;;;;;;;;;;:36;;;;;;;;;;;;2130:27;;2126:53;;2166:13;-1:-1:-1;2159:20:108;;2126:53;2218:12;2260:16;2278:9;2243:45;;;;;;-1:-1:-1;;;;;2243:45:108;;;;;;;;-1:-1:-1;;;;;2243:45:108;;;;;;;;;;;;;;;;;;;;;;;2233:56;;;;;;2218:71;;2300:14;2317:49;2354:5;2361:4;2317:36;:49::i;:::-;2300:66;;2402:6;-1:-1:-1;;;;;2377:43:108;;2421:10;2433:16;2451:9;2377:84;;;;;;;;;;;;;-1:-1:-1;;;;;2377:84:108;;;;;;-1:-1:-1;;;;;2377:84:108;;;;;;-1:-1:-1;;;;;2377:84:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;2506:25:108;;;:7;:25;;;;;;;;;;;:36;;;;;;;;;;:71;;-1:-1:-1;;;;;;2506:71:108;;;;;;;;;;;-1:-1:-1;;;1805:840:108;;;;;:::o;495:73::-;526:42;495:73;:::o;793:30::-;;;:::o;657:35::-;;;:::o;1831:590:118:-;1907:16;2031:4;2025:11;-1:-1:-1;;;2056:3:118;2049:79;2174:6;2168:4;2164:17;2157:4;2152:3;2148:14;2141:41;-1:-1:-1;;;2211:4:118;2206:3;2202:14;2195:90;2332:4;2326;2321:3;2318:1;2310:27;2298:39;-1:-1:-1;;;;;;;2364:22:118;;2356:58;;;;;-1:-1:-1;;;2356:58:118;;;;;;;;;;;;;;;;;;;;;;;;;;\",\n  \"source\": \"// SPDX-License-Identifier: UNLICENSED\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\\\";\\r\\n\\r\\nimport \\\"./UniswapTwapPriceOracleV2.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title UniswapTwapPriceOracleV2Factory\\r\\n * @notice Deploys and catalogs UniswapTwapPriceOracleV2 contracts.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract UniswapTwapPriceOracleV2Factory {\\r\\n    /**\\r\\n     * @dev WETH token contract address.\\r\\n     */\\r\\n    address constant public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\\r\\n\\r\\n    /**\\r\\n     * @dev `UniswapTwapPriceOracleV2Root` contract address.\\r\\n     */\\r\\n    address immutable public rootOracle;\\r\\n\\r\\n    /**\\r\\n     * @dev Implementation address for the `UniswapV3TwapPriceOracleV2`.\\r\\n     */\\r\\n    address immutable public logic;\\r\\n\\r\\n    /**\\r\\n     * @notice Maps `UniswapV2Factory` contracts to base tokens to `UniswapTwapPriceOracleV2` contract addresses.\\r\\n     */\\r\\n    mapping(address => mapping(address => UniswapTwapPriceOracleV2)) public oracles;\\r\\n\\r\\n    /**\\r\\n     * @dev Constructor that sets the `UniswapTwapPriceOracleV2Root` and `UniswapTwapPriceOracleV2` implementation contract.\\r\\n     */\\r\\n    constructor (address _rootOracle, address _logic) public {\\r\\n        require(_rootOracle != address(0), \\\"UniswapTwapPriceOracleV2Root not defined.\\\");\\r\\n        require(_logic != address(0), \\\"UniswapTwapPriceOracleV2 implementation/logic contract not defined.\\\");\\r\\n        rootOracle = _rootOracle;\\r\\n        logic = _logic;\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @notice Deploys a `UniswapTwapPriceOracleV2`.\\r\\n     * @param uniswapV2Factory The `UniswapV2Factory` contract of the pairs for which this oracle will be used.\\r\\n     * @param baseToken The base token of the pairs for which this oracle will be used.\\r\\n     */\\r\\n    function deploy(address uniswapV2Factory, address baseToken) external returns (address) {\\r\\n        // Input validation\\r\\n        if (baseToken == address(0)) baseToken = address(WETH);\\r\\n\\r\\n        // Return existing oracle if present\\r\\n        address currentOracle = address(oracles[uniswapV2Factory][baseToken]);\\r\\n        if (currentOracle != address(0)) return currentOracle;\\r\\n\\r\\n        // Deploy oracle\\r\\n        bytes32 salt = keccak256(abi.encodePacked(uniswapV2Factory, baseToken));\\r\\n        address oracle = ClonesUpgradeable.cloneDeterministic(logic, salt);\\r\\n        UniswapTwapPriceOracleV2(oracle).initialize(rootOracle, uniswapV2Factory, baseToken);\\r\\n\\r\\n        // Set oracle in state\\r\\n        oracles[uniswapV2Factory][baseToken] = UniswapTwapPriceOracleV2(oracle);\\r\\n\\r\\n        // Return oracle address\\r\\n        return oracle;\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapTwapPriceOracleV2Factory.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapTwapPriceOracleV2Factory.sol\",\n    \"exportedSymbols\": {\n      \"UniswapTwapPriceOracleV2Factory\": [\n        21792\n      ]\n    },\n    \"id\": 21793,\n    \"license\": \"UNLICENSED\",\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 21650,\n        \"literals\": [\n          \"solidity\",\n          \"0.6\",\n          \".12\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"40:23:108\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\",\n        \"id\": 21651,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 21793,\n        \"sourceUnit\": 24118,\n        \"src\": \"67:73:108\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapTwapPriceOracleV2.sol\",\n        \"file\": \"./UniswapTwapPriceOracleV2.sol\",\n        \"id\": 21652,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 21793,\n        \"sourceUnit\": 21649,\n        \"src\": \"144:40:108\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 21653,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"188:197:108\",\n          \"text\": \" @title UniswapTwapPriceOracleV2Factory\\n @notice Deploys and catalogs UniswapTwapPriceOracleV2 contracts.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 21792,\n        \"linearizedBaseContracts\": [\n          21792\n        ],\n        \"name\": \"UniswapTwapPriceOracleV2Factory\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 21654,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"435:54:108\",\n              \"text\": \" @dev WETH token contract address.\"\n            },\n            \"functionSelector\": \"ad5c4648\",\n            \"id\": 21657,\n            \"mutability\": \"constant\",\n            \"name\": \"WETH\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 21792,\n            \"src\": \"495:73:108\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 21655,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"495:7:108\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n              \"id\": 21656,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"526:42:108\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              },\n              \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 21658,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"577:74:108\",\n              \"text\": \" @dev `UniswapTwapPriceOracleV2Root` contract address.\"\n            },\n            \"functionSelector\": \"e3cb23a5\",\n            \"id\": 21660,\n            \"mutability\": \"immutable\",\n            \"name\": \"rootOracle\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 21792,\n            \"src\": \"657:35:108\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 21659,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"657:7:108\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 21661,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"701:86:108\",\n              \"text\": \" @dev Implementation address for the `UniswapV3TwapPriceOracleV2`.\"\n            },\n            \"functionSelector\": \"d7dfa0dd\",\n            \"id\": 21663,\n            \"mutability\": \"immutable\",\n            \"name\": \"logic\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 21792,\n            \"src\": \"793:30:108\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 21662,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"793:7:108\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 21664,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"832:127:108\",\n              \"text\": \" @notice Maps `UniswapV2Factory` contracts to base tokens to `UniswapTwapPriceOracleV2` contract addresses.\"\n            },\n            \"functionSelector\": \"52a03c03\",\n            \"id\": 21670,\n            \"mutability\": \"mutable\",\n            \"name\": \"oracles\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 21792,\n            \"src\": \"965:79:108\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$_$\",\n              \"typeString\": \"mapping(address => mapping(address => contract UniswapTwapPriceOracleV2))\"\n            },\n            \"typeName\": {\n              \"id\": 21669,\n              \"keyType\": {\n                \"id\": 21665,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"973:7:108\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"965:64:108\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$_$\",\n                \"typeString\": \"mapping(address => mapping(address => contract UniswapTwapPriceOracleV2))\"\n              },\n              \"valueType\": {\n                \"id\": 21668,\n                \"keyType\": {\n                  \"id\": 21666,\n                  \"name\": \"address\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"992:7:108\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  }\n                },\n                \"nodeType\": \"Mapping\",\n                \"src\": \"984:44:108\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                  \"typeString\": \"mapping(address => contract UniswapTwapPriceOracleV2)\"\n                },\n                \"valueType\": {\n                  \"contractScope\": null,\n                  \"id\": 21667,\n                  \"name\": \"UniswapTwapPriceOracleV2\",\n                  \"nodeType\": \"UserDefinedTypeName\",\n                  \"referencedDeclaration\": 21648,\n                  \"src\": \"1003:24:108\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                    \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                  }\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 21706,\n              \"nodeType\": \"Block\",\n              \"src\": \"1254:269:108\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 21684,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21679,\n                          \"name\": \"_rootOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21673,\n                          \"src\": \"1273:11:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 21682,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"1296:1:108\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 21681,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1288:7:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 21680,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1288:7:108\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 21683,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1288:10:108\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"1273:25:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"556e69737761705477617050726963654f7261636c655632526f6f74206e6f7420646566696e65642e\",\n                        \"id\": 21685,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1300:43:108\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_1d681ce5f9add9387e4a1251b489ef586272dc893992511e4a2556f5c8de164d\",\n                          \"typeString\": \"literal_string \\\"UniswapTwapPriceOracleV2Root not defined.\\\"\"\n                        },\n                        \"value\": \"UniswapTwapPriceOracleV2Root not defined.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_1d681ce5f9add9387e4a1251b489ef586272dc893992511e4a2556f5c8de164d\",\n                          \"typeString\": \"literal_string \\\"UniswapTwapPriceOracleV2Root not defined.\\\"\"\n                        }\n                      ],\n                      \"id\": 21678,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"1265:7:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 21686,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1265:79:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 21687,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1265:79:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 21694,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21689,\n                          \"name\": \"_logic\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21675,\n                          \"src\": \"1363:6:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 21692,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"1381:1:108\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 21691,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1373:7:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 21690,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1373:7:108\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 21693,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1373:10:108\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"1363:20:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"556e69737761705477617050726963654f7261636c65563220696d706c656d656e746174696f6e2f6c6f67696320636f6e7472616374206e6f7420646566696e65642e\",\n                        \"id\": 21695,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1385:69:108\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_40b499c40ea3a56bcbec782d9db7fa5a10c9aefc7e27ce26d7c59ea6dae1d358\",\n                          \"typeString\": \"literal_string \\\"UniswapTwapPriceOracleV2 implementation/logic contract not defined.\\\"\"\n                        },\n                        \"value\": \"UniswapTwapPriceOracleV2 implementation/logic contract not defined.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_40b499c40ea3a56bcbec782d9db7fa5a10c9aefc7e27ce26d7c59ea6dae1d358\",\n                          \"typeString\": \"literal_string \\\"UniswapTwapPriceOracleV2 implementation/logic contract not defined.\\\"\"\n                        }\n                      ],\n                      \"id\": 21688,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"1355:7:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 21696,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1355:100:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 21697,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1355:100:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 21700,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21698,\n                      \"name\": \"rootOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21660,\n                      \"src\": \"1466:10:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21699,\n                      \"name\": \"_rootOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21673,\n                      \"src\": \"1479:11:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1466:24:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 21701,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1466:24:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 21704,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21702,\n                      \"name\": \"logic\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21663,\n                      \"src\": \"1501:5:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21703,\n                      \"name\": \"_logic\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21675,\n                      \"src\": \"1509:6:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1501:14:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 21705,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1501:14:108\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 21671,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1053:138:108\",\n              \"text\": \" @dev Constructor that sets the `UniswapTwapPriceOracleV2Root` and `UniswapTwapPriceOracleV2` implementation contract.\"\n            },\n            \"id\": 21707,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 21676,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 21673,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_rootOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21707,\n                  \"src\": \"1210:19:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21672,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1210:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 21675,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_logic\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21707,\n                  \"src\": \"1231:14:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21674,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1231:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1209:37:108\"\n            },\n            \"returnParameters\": {\n              \"id\": 21677,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1254:0:108\"\n            },\n            \"scope\": 21792,\n            \"src\": \"1197:326:108\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 21790,\n              \"nodeType\": \"Block\",\n              \"src\": \"1893:752:108\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 21722,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21717,\n                      \"name\": \"baseToken\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21712,\n                      \"src\": \"1937:9:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 21720,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1958:1:108\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 21719,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1950:7:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 21718,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1950:7:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 21721,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1950:10:108\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1937:23:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 21730,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1933:54:108\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21728,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftHandSide\": {\n                        \"argumentTypes\": null,\n                        \"id\": 21723,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21712,\n                        \"src\": \"1962:9:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"Assignment\",\n                      \"operator\": \"=\",\n                      \"rightHandSide\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 21726,\n                            \"name\": \"WETH\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21657,\n                            \"src\": \"1982:4:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 21725,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"1974:7:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 21724,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"1974:7:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 21727,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1974:13:108\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"src\": \"1962:25:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 21729,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1962:25:108\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    21732\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 21732,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 21790,\n                      \"src\": \"2046:21:108\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 21731,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2046:7:108\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 21741,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 21735,\n                            \"name\": \"oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21670,\n                            \"src\": \"2078:7:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$_$\",\n                              \"typeString\": \"mapping(address => mapping(address => contract UniswapTwapPriceOracleV2))\"\n                            }\n                          },\n                          \"id\": 21737,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 21736,\n                            \"name\": \"uniswapV2Factory\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21710,\n                            \"src\": \"2086:16:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2078:25:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                            \"typeString\": \"mapping(address => contract UniswapTwapPriceOracleV2)\"\n                          }\n                        },\n                        \"id\": 21739,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21738,\n                          \"name\": \"baseToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21712,\n                          \"src\": \"2104:9:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"2078:36:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                          \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                          \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                        }\n                      ],\n                      \"id\": 21734,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"2070:7:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_address_$\",\n                        \"typeString\": \"type(address)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 21733,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2070:7:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 21740,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2070:45:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2046:69:108\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 21747,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21742,\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21732,\n                      \"src\": \"2130:13:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 21745,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2155:1:108\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 21744,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"2147:7:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 21743,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2147:7:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 21746,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2147:10:108\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"2130:27:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 21750,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2126:53:108\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21748,\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21732,\n                      \"src\": \"2166:13:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"functionReturnParameters\": 21716,\n                    \"id\": 21749,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"2159:20:108\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    21752\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 21752,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"salt\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 21790,\n                      \"src\": \"2218:12:108\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bytes32\",\n                        \"typeString\": \"bytes32\"\n                      },\n                      \"typeName\": {\n                        \"id\": 21751,\n                        \"name\": \"bytes32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2218:7:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 21760,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 21756,\n                            \"name\": \"uniswapV2Factory\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21710,\n                            \"src\": \"2260:16:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 21757,\n                            \"name\": \"baseToken\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21712,\n                            \"src\": \"2278:9:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 21754,\n                            \"name\": \"abi\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -1,\n                            \"src\": \"2243:3:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_abi\",\n                              \"typeString\": \"abi\"\n                            }\n                          },\n                          \"id\": 21755,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"encodePacked\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2243:16:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\n                            \"typeString\": \"function () pure returns (bytes memory)\"\n                          }\n                        },\n                        \"id\": 21758,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2243:45:108\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                          \"typeString\": \"bytes memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                          \"typeString\": \"bytes memory\"\n                        }\n                      ],\n                      \"id\": 21753,\n                      \"name\": \"keccak256\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": -8,\n                      \"src\": \"2233:9:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n                        \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n                      }\n                    },\n                    \"id\": 21759,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2233:56:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes32\",\n                      \"typeString\": \"bytes32\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2218:71:108\"\n                },\n                {\n                  \"assignments\": [\n                    21762\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 21762,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 21790,\n                      \"src\": \"2300:14:108\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 21761,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2300:7:108\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 21768,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21765,\n                        \"name\": \"logic\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21663,\n                        \"src\": \"2354:5:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21766,\n                        \"name\": \"salt\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21752,\n                        \"src\": \"2361:4:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 21763,\n                        \"name\": \"ClonesUpgradeable\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 24117,\n                        \"src\": \"2317:17:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_ClonesUpgradeable_$24117_$\",\n                          \"typeString\": \"type(library ClonesUpgradeable)\"\n                        }\n                      },\n                      \"id\": 21764,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"cloneDeterministic\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 24082,\n                      \"src\": \"2317:36:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$\",\n                        \"typeString\": \"function (address,bytes32) returns (address)\"\n                      }\n                    },\n                    \"id\": 21767,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2317:49:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2300:66:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21773,\n                        \"name\": \"rootOracle\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21660,\n                        \"src\": \"2421:10:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21774,\n                        \"name\": \"uniswapV2Factory\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21710,\n                        \"src\": \"2433:16:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21775,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21712,\n                        \"src\": \"2451:9:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 21770,\n                            \"name\": \"oracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21762,\n                            \"src\": \"2402:6:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 21769,\n                          \"name\": \"UniswapTwapPriceOracleV2\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21648,\n                          \"src\": \"2377:24:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                            \"typeString\": \"type(contract UniswapTwapPriceOracleV2)\"\n                          }\n                        },\n                        \"id\": 21771,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2377:32:108\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                          \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                        }\n                      },\n                      \"id\": 21772,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"initialize\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 21528,\n                      \"src\": \"2377:43:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address,address) external\"\n                      }\n                    },\n                    \"id\": 21776,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2377:84:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 21777,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2377:84:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 21786,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21778,\n                          \"name\": \"oracles\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21670,\n                          \"src\": \"2506:7:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$_$\",\n                            \"typeString\": \"mapping(address => mapping(address => contract UniswapTwapPriceOracleV2))\"\n                          }\n                        },\n                        \"id\": 21781,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21779,\n                          \"name\": \"uniswapV2Factory\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21710,\n                          \"src\": \"2514:16:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"2506:25:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                          \"typeString\": \"mapping(address => contract UniswapTwapPriceOracleV2)\"\n                        }\n                      },\n                      \"id\": 21782,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 21780,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21712,\n                        \"src\": \"2532:9:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2506:36:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                        \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 21784,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21762,\n                          \"src\": \"2570:6:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"id\": 21783,\n                        \"name\": \"UniswapTwapPriceOracleV2\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21648,\n                        \"src\": \"2545:24:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                          \"typeString\": \"type(contract UniswapTwapPriceOracleV2)\"\n                        }\n                      },\n                      \"id\": 21785,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2545:32:108\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                        \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                      }\n                    },\n                    \"src\": \"2506:71:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                      \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                    }\n                  },\n                  \"id\": 21787,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2506:71:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 21788,\n                    \"name\": \"oracle\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 21762,\n                    \"src\": \"2631:6:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"functionReturnParameters\": 21716,\n                  \"id\": 21789,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2624:13:108\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 21708,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1531:268:108\",\n              \"text\": \" @notice Deploys a `UniswapTwapPriceOracleV2`.\\n @param uniswapV2Factory The `UniswapV2Factory` contract of the pairs for which this oracle will be used.\\n @param baseToken The base token of the pairs for which this oracle will be used.\"\n            },\n            \"functionSelector\": \"545e7c61\",\n            \"id\": 21791,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"deploy\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 21713,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 21710,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"uniswapV2Factory\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21791,\n                  \"src\": \"1821:24:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21709,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1821:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 21712,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"baseToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21791,\n                  \"src\": \"1847:17:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21711,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1847:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1820:45:108\"\n            },\n            \"returnParameters\": {\n              \"id\": 21716,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 21715,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21791,\n                  \"src\": \"1884:7:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21714,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1884:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1883:9:108\"\n            },\n            \"scope\": 21792,\n            \"src\": \"1805:840:108\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 21793,\n        \"src\": \"387:2261:108\"\n      }\n    ],\n    \"src\": \"40:2610:108\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapTwapPriceOracleV2Factory.sol\",\n    \"exportedSymbols\": {\n      \"UniswapTwapPriceOracleV2Factory\": [\n        21792\n      ]\n    },\n    \"id\": 21793,\n    \"license\": \"UNLICENSED\",\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 21650,\n        \"literals\": [\n          \"solidity\",\n          \"0.6\",\n          \".12\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"40:23:108\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\",\n        \"id\": 21651,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 21793,\n        \"sourceUnit\": 24118,\n        \"src\": \"67:73:108\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapTwapPriceOracleV2.sol\",\n        \"file\": \"./UniswapTwapPriceOracleV2.sol\",\n        \"id\": 21652,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 21793,\n        \"sourceUnit\": 21649,\n        \"src\": \"144:40:108\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 21653,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"188:197:108\",\n          \"text\": \" @title UniswapTwapPriceOracleV2Factory\\n @notice Deploys and catalogs UniswapTwapPriceOracleV2 contracts.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 21792,\n        \"linearizedBaseContracts\": [\n          21792\n        ],\n        \"name\": \"UniswapTwapPriceOracleV2Factory\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 21654,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"435:54:108\",\n              \"text\": \" @dev WETH token contract address.\"\n            },\n            \"functionSelector\": \"ad5c4648\",\n            \"id\": 21657,\n            \"mutability\": \"constant\",\n            \"name\": \"WETH\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 21792,\n            \"src\": \"495:73:108\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 21655,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"495:7:108\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n              \"id\": 21656,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"526:42:108\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              },\n              \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 21658,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"577:74:108\",\n              \"text\": \" @dev `UniswapTwapPriceOracleV2Root` contract address.\"\n            },\n            \"functionSelector\": \"e3cb23a5\",\n            \"id\": 21660,\n            \"mutability\": \"immutable\",\n            \"name\": \"rootOracle\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 21792,\n            \"src\": \"657:35:108\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 21659,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"657:7:108\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 21661,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"701:86:108\",\n              \"text\": \" @dev Implementation address for the `UniswapV3TwapPriceOracleV2`.\"\n            },\n            \"functionSelector\": \"d7dfa0dd\",\n            \"id\": 21663,\n            \"mutability\": \"immutable\",\n            \"name\": \"logic\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 21792,\n            \"src\": \"793:30:108\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 21662,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"793:7:108\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 21664,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"832:127:108\",\n              \"text\": \" @notice Maps `UniswapV2Factory` contracts to base tokens to `UniswapTwapPriceOracleV2` contract addresses.\"\n            },\n            \"functionSelector\": \"52a03c03\",\n            \"id\": 21670,\n            \"mutability\": \"mutable\",\n            \"name\": \"oracles\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 21792,\n            \"src\": \"965:79:108\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$_$\",\n              \"typeString\": \"mapping(address => mapping(address => contract UniswapTwapPriceOracleV2))\"\n            },\n            \"typeName\": {\n              \"id\": 21669,\n              \"keyType\": {\n                \"id\": 21665,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"973:7:108\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"965:64:108\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$_$\",\n                \"typeString\": \"mapping(address => mapping(address => contract UniswapTwapPriceOracleV2))\"\n              },\n              \"valueType\": {\n                \"id\": 21668,\n                \"keyType\": {\n                  \"id\": 21666,\n                  \"name\": \"address\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"992:7:108\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  }\n                },\n                \"nodeType\": \"Mapping\",\n                \"src\": \"984:44:108\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                  \"typeString\": \"mapping(address => contract UniswapTwapPriceOracleV2)\"\n                },\n                \"valueType\": {\n                  \"contractScope\": null,\n                  \"id\": 21667,\n                  \"name\": \"UniswapTwapPriceOracleV2\",\n                  \"nodeType\": \"UserDefinedTypeName\",\n                  \"referencedDeclaration\": 21648,\n                  \"src\": \"1003:24:108\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                    \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                  }\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 21706,\n              \"nodeType\": \"Block\",\n              \"src\": \"1254:269:108\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 21684,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21679,\n                          \"name\": \"_rootOracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21673,\n                          \"src\": \"1273:11:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 21682,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"1296:1:108\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 21681,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1288:7:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 21680,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1288:7:108\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 21683,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1288:10:108\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"1273:25:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"556e69737761705477617050726963654f7261636c655632526f6f74206e6f7420646566696e65642e\",\n                        \"id\": 21685,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1300:43:108\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_1d681ce5f9add9387e4a1251b489ef586272dc893992511e4a2556f5c8de164d\",\n                          \"typeString\": \"literal_string \\\"UniswapTwapPriceOracleV2Root not defined.\\\"\"\n                        },\n                        \"value\": \"UniswapTwapPriceOracleV2Root not defined.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_1d681ce5f9add9387e4a1251b489ef586272dc893992511e4a2556f5c8de164d\",\n                          \"typeString\": \"literal_string \\\"UniswapTwapPriceOracleV2Root not defined.\\\"\"\n                        }\n                      ],\n                      \"id\": 21678,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"1265:7:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 21686,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1265:79:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 21687,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1265:79:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 21694,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21689,\n                          \"name\": \"_logic\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21675,\n                          \"src\": \"1363:6:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 21692,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"1381:1:108\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 21691,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1373:7:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 21690,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1373:7:108\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 21693,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1373:10:108\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"1363:20:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"556e69737761705477617050726963654f7261636c65563220696d706c656d656e746174696f6e2f6c6f67696320636f6e7472616374206e6f7420646566696e65642e\",\n                        \"id\": 21695,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1385:69:108\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_40b499c40ea3a56bcbec782d9db7fa5a10c9aefc7e27ce26d7c59ea6dae1d358\",\n                          \"typeString\": \"literal_string \\\"UniswapTwapPriceOracleV2 implementation/logic contract not defined.\\\"\"\n                        },\n                        \"value\": \"UniswapTwapPriceOracleV2 implementation/logic contract not defined.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_40b499c40ea3a56bcbec782d9db7fa5a10c9aefc7e27ce26d7c59ea6dae1d358\",\n                          \"typeString\": \"literal_string \\\"UniswapTwapPriceOracleV2 implementation/logic contract not defined.\\\"\"\n                        }\n                      ],\n                      \"id\": 21688,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"1355:7:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 21696,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1355:100:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 21697,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1355:100:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 21700,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21698,\n                      \"name\": \"rootOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21660,\n                      \"src\": \"1466:10:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21699,\n                      \"name\": \"_rootOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21673,\n                      \"src\": \"1479:11:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1466:24:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 21701,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1466:24:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 21704,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21702,\n                      \"name\": \"logic\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21663,\n                      \"src\": \"1501:5:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21703,\n                      \"name\": \"_logic\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21675,\n                      \"src\": \"1509:6:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1501:14:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 21705,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1501:14:108\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 21671,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1053:138:108\",\n              \"text\": \" @dev Constructor that sets the `UniswapTwapPriceOracleV2Root` and `UniswapTwapPriceOracleV2` implementation contract.\"\n            },\n            \"id\": 21707,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 21676,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 21673,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_rootOracle\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21707,\n                  \"src\": \"1210:19:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21672,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1210:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 21675,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_logic\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21707,\n                  \"src\": \"1231:14:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21674,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1231:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1209:37:108\"\n            },\n            \"returnParameters\": {\n              \"id\": 21677,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1254:0:108\"\n            },\n            \"scope\": 21792,\n            \"src\": \"1197:326:108\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 21790,\n              \"nodeType\": \"Block\",\n              \"src\": \"1893:752:108\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 21722,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21717,\n                      \"name\": \"baseToken\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21712,\n                      \"src\": \"1937:9:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 21720,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1958:1:108\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 21719,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1950:7:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 21718,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1950:7:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 21721,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1950:10:108\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1937:23:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 21730,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1933:54:108\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21728,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftHandSide\": {\n                        \"argumentTypes\": null,\n                        \"id\": 21723,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21712,\n                        \"src\": \"1962:9:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"Assignment\",\n                      \"operator\": \"=\",\n                      \"rightHandSide\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 21726,\n                            \"name\": \"WETH\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21657,\n                            \"src\": \"1982:4:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 21725,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"1974:7:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 21724,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"1974:7:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 21727,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1974:13:108\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"src\": \"1962:25:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 21729,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1962:25:108\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    21732\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 21732,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 21790,\n                      \"src\": \"2046:21:108\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 21731,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2046:7:108\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 21741,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 21735,\n                            \"name\": \"oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21670,\n                            \"src\": \"2078:7:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$_$\",\n                              \"typeString\": \"mapping(address => mapping(address => contract UniswapTwapPriceOracleV2))\"\n                            }\n                          },\n                          \"id\": 21737,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 21736,\n                            \"name\": \"uniswapV2Factory\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21710,\n                            \"src\": \"2086:16:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2078:25:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                            \"typeString\": \"mapping(address => contract UniswapTwapPriceOracleV2)\"\n                          }\n                        },\n                        \"id\": 21739,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21738,\n                          \"name\": \"baseToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21712,\n                          \"src\": \"2104:9:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"2078:36:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                          \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                          \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                        }\n                      ],\n                      \"id\": 21734,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"2070:7:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_address_$\",\n                        \"typeString\": \"type(address)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 21733,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2070:7:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 21740,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2070:45:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2046:69:108\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 21747,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21742,\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21732,\n                      \"src\": \"2130:13:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 21745,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2155:1:108\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 21744,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"2147:7:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 21743,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2147:7:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 21746,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2147:10:108\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"2130:27:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 21750,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2126:53:108\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 21748,\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 21732,\n                      \"src\": \"2166:13:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"functionReturnParameters\": 21716,\n                    \"id\": 21749,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"2159:20:108\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    21752\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 21752,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"salt\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 21790,\n                      \"src\": \"2218:12:108\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bytes32\",\n                        \"typeString\": \"bytes32\"\n                      },\n                      \"typeName\": {\n                        \"id\": 21751,\n                        \"name\": \"bytes32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2218:7:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 21760,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 21756,\n                            \"name\": \"uniswapV2Factory\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21710,\n                            \"src\": \"2260:16:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 21757,\n                            \"name\": \"baseToken\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21712,\n                            \"src\": \"2278:9:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 21754,\n                            \"name\": \"abi\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -1,\n                            \"src\": \"2243:3:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_abi\",\n                              \"typeString\": \"abi\"\n                            }\n                          },\n                          \"id\": 21755,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"encodePacked\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2243:16:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\n                            \"typeString\": \"function () pure returns (bytes memory)\"\n                          }\n                        },\n                        \"id\": 21758,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2243:45:108\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                          \"typeString\": \"bytes memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                          \"typeString\": \"bytes memory\"\n                        }\n                      ],\n                      \"id\": 21753,\n                      \"name\": \"keccak256\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": -8,\n                      \"src\": \"2233:9:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n                        \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n                      }\n                    },\n                    \"id\": 21759,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2233:56:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes32\",\n                      \"typeString\": \"bytes32\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2218:71:108\"\n                },\n                {\n                  \"assignments\": [\n                    21762\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 21762,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 21790,\n                      \"src\": \"2300:14:108\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 21761,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2300:7:108\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 21768,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21765,\n                        \"name\": \"logic\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21663,\n                        \"src\": \"2354:5:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21766,\n                        \"name\": \"salt\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21752,\n                        \"src\": \"2361:4:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 21763,\n                        \"name\": \"ClonesUpgradeable\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 24117,\n                        \"src\": \"2317:17:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_ClonesUpgradeable_$24117_$\",\n                          \"typeString\": \"type(library ClonesUpgradeable)\"\n                        }\n                      },\n                      \"id\": 21764,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"cloneDeterministic\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 24082,\n                      \"src\": \"2317:36:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$\",\n                        \"typeString\": \"function (address,bytes32) returns (address)\"\n                      }\n                    },\n                    \"id\": 21767,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2317:49:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2300:66:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21773,\n                        \"name\": \"rootOracle\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21660,\n                        \"src\": \"2421:10:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21774,\n                        \"name\": \"uniswapV2Factory\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21710,\n                        \"src\": \"2433:16:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 21775,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21712,\n                        \"src\": \"2451:9:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 21770,\n                            \"name\": \"oracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 21762,\n                            \"src\": \"2402:6:108\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 21769,\n                          \"name\": \"UniswapTwapPriceOracleV2\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21648,\n                          \"src\": \"2377:24:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                            \"typeString\": \"type(contract UniswapTwapPriceOracleV2)\"\n                          }\n                        },\n                        \"id\": 21771,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2377:32:108\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                          \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                        }\n                      },\n                      \"id\": 21772,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"initialize\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 21528,\n                      \"src\": \"2377:43:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,address,address) external\"\n                      }\n                    },\n                    \"id\": 21776,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2377:84:108\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 21777,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2377:84:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 21786,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21778,\n                          \"name\": \"oracles\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21670,\n                          \"src\": \"2506:7:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$_$\",\n                            \"typeString\": \"mapping(address => mapping(address => contract UniswapTwapPriceOracleV2))\"\n                          }\n                        },\n                        \"id\": 21781,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 21779,\n                          \"name\": \"uniswapV2Factory\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21710,\n                          \"src\": \"2514:16:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"2506:25:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                          \"typeString\": \"mapping(address => contract UniswapTwapPriceOracleV2)\"\n                        }\n                      },\n                      \"id\": 21782,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 21780,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21712,\n                        \"src\": \"2532:9:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2506:36:108\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                        \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 21784,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 21762,\n                          \"src\": \"2570:6:108\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"id\": 21783,\n                        \"name\": \"UniswapTwapPriceOracleV2\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 21648,\n                        \"src\": \"2545:24:108\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_UniswapTwapPriceOracleV2_$21648_$\",\n                          \"typeString\": \"type(contract UniswapTwapPriceOracleV2)\"\n                        }\n                      },\n                      \"id\": 21785,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2545:32:108\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                        \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                      }\n                    },\n                    \"src\": \"2506:71:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_UniswapTwapPriceOracleV2_$21648\",\n                      \"typeString\": \"contract UniswapTwapPriceOracleV2\"\n                    }\n                  },\n                  \"id\": 21787,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2506:71:108\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 21788,\n                    \"name\": \"oracle\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 21762,\n                    \"src\": \"2631:6:108\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"functionReturnParameters\": 21716,\n                  \"id\": 21789,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2624:13:108\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 21708,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1531:268:108\",\n              \"text\": \" @notice Deploys a `UniswapTwapPriceOracleV2`.\\n @param uniswapV2Factory The `UniswapV2Factory` contract of the pairs for which this oracle will be used.\\n @param baseToken The base token of the pairs for which this oracle will be used.\"\n            },\n            \"functionSelector\": \"545e7c61\",\n            \"id\": 21791,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"deploy\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 21713,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 21710,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"uniswapV2Factory\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21791,\n                  \"src\": \"1821:24:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21709,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1821:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 21712,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"baseToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21791,\n                  \"src\": \"1847:17:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21711,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1847:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1820:45:108\"\n            },\n            \"returnParameters\": {\n              \"id\": 21716,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 21715,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 21791,\n                  \"src\": \"1884:7:108\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 21714,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1884:7:108\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1883:9:108\"\n            },\n            \"scope\": 21792,\n            \"src\": \"1805:840:108\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 21793,\n        \"src\": \"387:2261:108\"\n      }\n    ],\n    \"src\": \"40:2610:108\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {\n    \"31337\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0x52D5645835B2d9B0F5Ab142A91EC021eb6CE9b54\",\n      \"transactionHash\": \"0x5e6105aa3b356cd500d6b003933d424ab80d30d9fcff16fc5ff244cf2601e07b\"\n    }\n  },\n  \"schemaVersion\": \"3.2.3\",\n  \"updatedAt\": \"2021-10-01T20:30:26.994Z\",\n  \"networkType\": \"ethereum\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"details\": \"Constructor that sets the `UniswapTwapPriceOracleV2Root` and `UniswapTwapPriceOracleV2` implementation contract.\"\n      },\n      \"deploy(address,address)\": {\n        \"params\": {\n          \"baseToken\": \"The base token of the pairs for which this oracle will be used.\",\n          \"uniswapV2Factory\": \"The `UniswapV2Factory` contract of the pairs for which this oracle will be used.\"\n        }\n      }\n    },\n    \"stateVariables\": {\n      \"WETH\": {\n        \"details\": \"WETH token contract address.\"\n      },\n      \"logic\": {\n        \"details\": \"Implementation address for the `UniswapV3TwapPriceOracleV2`.\"\n      },\n      \"rootOracle\": {\n        \"details\": \"`UniswapTwapPriceOracleV2Root` contract address.\"\n      }\n    },\n    \"title\": \"UniswapTwapPriceOracleV2Factory\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"deploy(address,address)\": {\n        \"notice\": \"Deploys a `UniswapTwapPriceOracleV2`.\"\n      },\n      \"oracles(address,address)\": {\n        \"notice\": \"Maps `UniswapV2Factory` contracts to base tokens to `UniswapTwapPriceOracleV2` contract addresses.\"\n      }\n    },\n    \"notice\": \"Deploys and catalogs UniswapTwapPriceOracleV2 contracts.\",\n    \"version\": 1\n  }\n}"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/UniswapV3TwapPriceOracleV2Factory.json",
    "content": "{\n  \"contractName\": \"UniswapV3TwapPriceOracleV2Factory\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"_logic\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"constructor\"\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"WETH\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"constant\": true\n    },\n    {\n      \"inputs\": [],\n      \"name\": \"logic\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"constant\": true\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"oracles\",\n      \"outputs\": [\n        {\n          \"internalType\": \"contract UniswapV3TwapPriceOracleV2\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\",\n      \"constant\": true\n    },\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"uniswapV3Factory\",\n          \"type\": \"address\"\n        },\n        {\n          \"internalType\": \"uint24\",\n          \"name\": \"feeTier\",\n          \"type\": \"uint24\"\n        },\n        {\n          \"internalType\": \"address\",\n          \"name\": \"baseToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"deploy\",\n      \"outputs\": [\n        {\n          \"internalType\": \"address\",\n          \"name\": \"\",\n          \"type\": \"address\"\n        }\n      ],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_logic\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"WETH\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"uniswapV3Factory\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint24\\\",\\\"name\\\":\\\"feeTier\\\",\\\"type\\\":\\\"uint24\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"baseToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"deploy\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"logic\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"oracles\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract UniswapV3TwapPriceOracleV2\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"params\\\":{\\\"_logic\\\":\\\"The `UniswapV3TwapPriceOracleV2` implementation contract.\\\"}},\\\"deploy(address,uint24,address)\\\":{\\\"params\\\":{\\\"baseToken\\\":\\\"The base token of the pairs for which this oracle will be used.\\\",\\\"feeTier\\\":\\\"The fee tier of the pairs for which this oracle will be used.\\\",\\\"uniswapV3Factory\\\":\\\"The `UniswapV3Factory` contract of the pairs for which this oracle will be used.\\\"}}},\\\"stateVariables\\\":{\\\"WETH\\\":{\\\"details\\\":\\\"WETH token contract address.\\\"},\\\"logic\\\":{\\\"details\\\":\\\"Implementation address for the `UniswapV3TwapPriceOracleV2`.\\\"}},\\\"title\\\":\\\"UniswapV3TwapPriceOracleV2Factory\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"constructor\\\":\\\"Constructor that stores the UniswapV3TwapPriceOracleV2 implementation/logic contract.\\\",\\\"deploy(address,uint24,address)\\\":{\\\"notice\\\":\\\"Deploys a `UniswapV3TwapPriceOracleV2`.\\\"},\\\"oracles(address,uint256,address)\\\":{\\\"notice\\\":\\\"Maps `UniswapV3Factory` contracts to fee tiers to base tokens to `UniswapV3TwapPriceOracleV2` contract addresses.\\\"}},\\\"notice\\\":\\\"Deploys and catalogs UniswapV3TwapPriceOracleV2 contracts.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapV3TwapPriceOracleV2Factory.sol\\\":\\\"UniswapV3TwapPriceOracleV2Factory\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0x2b941784ef209f5065f5a1d2bfb7363762da10f30af5f05ba5ab135862ac74dd\\\",\\\"license\\\":\\\"BSD-3-Clause\\\",\\\"urls\\\":[\\\"bzz-raw://346d011b27636783409e044f91a8d035f72e20986e34dc3b8fe8f4b1b57fdf3e\\\",\\\"dweb:/ipfs/QmaW51imyx2UrGLK31AwPX31RgF3QFzhyka5Q9vb2tAxGi\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xf7bf43655f5564821af99401f06bb8114e4eba36c5091c18566c5e58df1b730f\\\",\\\"license\\\":\\\"BSD-3-Clause\\\",\\\"urls\\\":[\\\"bzz-raw://70234b3d3db8f599cf7105559683d2ea23cf6e76ee60bec6b97bed9da337b7a2\\\",\\\"dweb:/ipfs/QmSMp41tEM9kYJhPUAugqnDN7XSKsQY22gg11gV1TEANXo\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x5bea460265cac239bb14115e67fc6f565cbb33314d15a4f854fe2f0b56a19656\\\",\\\"license\\\":\\\"BSD-3-Clause\\\",\\\"urls\\\":[\\\"bzz-raw://8838f0322fdbfab13487d1a0ff4ab9bcf99380bb56565d3ab877ab52fdb0e7e7\\\",\\\"dweb:/ipfs/QmVavYcrouTANWjLXig51tnibWWisWnT5GwuuaspzncMXi\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x95147a8358ff9d87d473b7d386870eeab5f2c531808bdf8d4e8eea8a06eafdc7\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://6c53cecdea2bbbc04e5e64a972bb05e41732fe2896dc99715f9bfcfabc968ba9\\\",\\\"dweb:/ipfs/QmPpdnyoRwZ7CR64FCgVU9mmJpoW5M3gtSVdU7B6K8vzrP\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapV3TwapPriceOracleV2.sol\\\":{\\\"keccak256\\\":\\\"0xfc5e9af06574bc45c3af410a837c1b8b235e3e02a730539492fee011792bd701\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://24bf4b302a5c8bc7f9e8f2dacd9edd14fdec58d101a91c43f8ec7326cf3bee96\\\",\\\"dweb:/ipfs/QmedwqSo8Cpa344awDn4kNnGn734dzAtkHfifgcnvGeGSY\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapV3TwapPriceOracleV2Factory.sol\\\":{\\\"keccak256\\\":\\\"0x286dc4cb15652c903e41fc6a3bc48d046bd23f79f8b8641407f1c87512666cdb\\\",\\\"license\\\":\\\"UNLICENSED\\\",\\\"urls\\\":[\\\"bzz-raw://f5d1134c0c0edc040a6ba120b079368dcb199470ee4ab598b51eab72d7bd4d25\\\",\\\"dweb:/ipfs/QmXge2syhFoBgsWMmGpUmW2DaLPAR9ZW6hkYsoKQycyGbR\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://5e30d594df25d0651c2cd6f85d856e5fc9f3dbae68d017e1da33eb3c7e2f1ecc\\\",\\\"dweb:/ipfs/QmPgkV99jZr3Zs9ex8dJ5j22oX4wDuDtMCnXNy67bTwgAB\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa828d9e2842506a66293b8f68dcb5a81dbb492bffc86a2c683c1b586ccbdf23e\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://787c8180cf88565322e50cf22a4ba507ee1f1bcbabf9797d3aa57acd3a59b073\\\",\\\"dweb:/ipfs/QmQpxHQUPnsnm2TbeycRXfYyVrYguxw4KQRBon1Eun1uZD\\\"]},\\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\":{\\\"keccak256\\\":\\\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7dbc89479d30592e82442edc38053b380f611037a5e6ceafc7bf57a7aa1f0305\\\",\\\"dweb:/ipfs/QmcdYtt56WmjeYvsFjK69FnahnAriw88VzY3XRZwXkQKKN\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0x506dd0718f9ace50588c13848167df5e04ae16abb56341afb10c31ff149bc79b\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://f8f230f6d6889a76ae5a6563c3e0acaee90a8687896188be90fff8d9574c8e13\\\",\\\"dweb:/ipfs/QmcdZmHdcbBkbSet3Yx8hceQK4itK8SBrV7G2nasVZGJwH\\\"]},\\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\\\",\\\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\\\"]},\\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://a6b81dcc816857a9d981386f6d8de49198420ee41cdc0ecade366ab412174d03\\\",\\\"dweb:/ipfs/QmV2vznMT6m9qo3pFMAWi3Nz3UDhwesgwFxeXe6Tod3v8A\\\"]},\\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\\\",\\\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\\\"]},\\\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol\\\":{\\\"keccak256\\\":\\\"0xcc3d0c93fc9ac0febbe09f941b465b57f750bcf3b48432da0b97dc289cfdc489\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://b9379ad954680c44a0bc523b314ae4c4da735f9fe1d02aa56ea5bdba6f1136f2\\\",\\\"dweb:/ipfs/QmZXdgQNXKAckrXWz9R3mc47F1fvDvr28a2ewJrwNAw71B\\\"]},\\\"@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol\\\":{\\\"keccak256\\\":\\\"0xfe6113d518466cd6652c85b111e01f33eb62157f49ae5ed7d5a3947a2044adb1\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://1c42b9e6f5902ac38dd43e25750939baa7e0c1425dc75afd717c4412731065d5\\\",\\\"dweb:/ipfs/QmWaoacnzsucTvBME2o7YgZBZMhaHv7fkj83htHMVWJKWh\\\"]},\\\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\\\":{\\\"keccak256\\\":\\\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\\\",\\\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\\\"]},\\\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\\\":{\\\"keccak256\\\":\\\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\\\",\\\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\\\"]},\\\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\\\":{\\\"keccak256\\\":\\\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\\\",\\\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\\\"]},\\\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\\\":{\\\"keccak256\\\":\\\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\\\",\\\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\\\"]},\\\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\\\":{\\\"keccak256\\\":\\\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\\\",\\\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\\\"]},\\\"@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\\\":{\\\"keccak256\\\":\\\"0x852dc1f5df7dcf7f11e7bb3eed79f0cea72ad4b25f6a9d2c35aafb48925fd49f\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://ed63907c38ff36b0e22bc9ffc53e791ea74f0d4f0e7c257fdfb5aaf8825b1f0f\\\",\\\"dweb:/ipfs/QmSQrckghEjs6HVsA5GVgpNpZWvTXMY5eQLF7cN6deFeEg\\\"]},\\\"@uniswap/v3-core/contracts/libraries/FullMath.sol\\\":{\\\"keccak256\\\":\\\"0xe511530871deaef86692cea9adb6076d26d7b47fd4815ce51af52af981026057\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://bc5a6ae776be3e7dcbd23d49ffbc9d792fed0ddf4b111ebb64b9bb2133ec263e\\\",\\\"dweb:/ipfs/QmbAUtWqvipzEARQpFpkzYKBELy3qeW5WXnZxHFU84sxG7\\\"]},\\\"@uniswap/v3-core/contracts/libraries/LowGasSafeMath.sol\\\":{\\\"keccak256\\\":\\\"0xc96ba4e985950ecffd96feda6385286d9a4b1ebb2279e420c9bb1b79b765306c\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://d5ead6a53282214cce910e511f7dca4d14c8933de6375cd9fa3653cc94934e2b\\\",\\\"dweb:/ipfs/QmcnPR5qhzEYjX7YLdjUeWD7wpLMVn4HonhpNroEh9itpC\\\"]},\\\"@uniswap/v3-core/contracts/libraries/TickMath.sol\\\":{\\\"keccak256\\\":\\\"0x1f864a2bf61ba05f3173eaf2e3f94c5e1da4bec0554757527b6d1ef1fe439e4e\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://5139b586df546a9d1c46804ca400b1cb9ce87236eaf212ebd64edee6747a172a\\\",\\\"dweb:/ipfs/QmVa2kcRw3VyuB6j1EVWXACKnkbQZgfXYXNi5voq3XkYG8\\\"]},\\\"@uniswap/v3-periphery/contracts/libraries/OracleLibrary.sol\\\":{\\\"keccak256\\\":\\\"0x19517bf2478c3ec56253f37b48adde7f34a6acdb467e329f74d79f9e72e2a63f\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://c2a6c20fb775e7a55ff9d6eb6f13982ca019e9fec3caecda5b21b6671335a5c1\\\",\\\"dweb:/ipfs/QmannSYDmR9Novyks8KRHe4u4PajfvkGU39owUBzfwy4rn\\\"]},\\\"@uniswap/v3-periphery/contracts/libraries/PoolAddress.sol\\\":{\\\"keccak256\\\":\\\"0x5edd84eb8ba7c12fd8cb6cffe52e1e9f3f6464514ee5f539c2283826209035a2\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://f375d0e6d5ea3674e1aa6f112b021e9a86721a6a2f3cb22d673378b30cf0e840\\\",\\\"dweb:/ipfs/QmWJir2qnJyp963mU6U3jEEx9i3H3V5BgKawAfSnG1pC8w\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x60a060405234801561001057600080fd5b506040516104f13803806104f18339818101604052602081101561003357600080fd5b50516001600160a01b03811661007a5760405162461bcd60e51b81526004018080602001828103825260458152602001806104ac6045913960600191505060405180910390fd5b606081901b6001600160601b0319166080526001600160a01b03166103fb6100b1600039806101b552806102f852506103fb6000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630e26154e1461005157806368c4a1ee146100a8578063ad5c4648146100de578063d7dfa0dd146100e6575b600080fd5b61008c6004803603606081101561006757600080fd5b506001600160a01b03813581169162ffffff60208201351691604090910135166100ee565b604080516001600160a01b039092168252519081900360200190f35b61008c600480360360608110156100be57600080fd5b506001600160a01b038135811691602081013591604090910135166102b3565b61008c6102de565b61008c6102f6565b60006001600160a01b0382166101165773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc291505b6001600160a01b0380851660009081526020818152604080832062ffffff88168452825280832086851684529091529020541680156101565790506102ac565b60408051606087811b6bffffffffffffffffffffffff1990811660208085019190915260e889901b6001600160e81b03191660348501529187901b1660378301528251808303602b018152604b909201909252805191012060006101da7f00000000000000000000000000000000000000000000000000000000000000008361031a565b9050806001600160a01b031663d9d3d00a8888886040518463ffffffff1660e01b815260040180846001600160a01b031681526020018362ffffff168152602001826001600160a01b031681526020019350505050600060405180830381600087803b15801561024957600080fd5b505af115801561025d573d6000803e3d6000fd5b505050506001600160a01b0387811660009081526020818152604080832062ffffff8b16845282528083208985168452909152902080546001600160a01b031916918316919091179055925050505b9392505050565b600060208181529381526040808220855292815282812090935282529020546001600160a01b031681565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b0381166103bf576040805162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015290519081900360640190fd5b9291505056fea26469706673582212207031ba8c86a5a5639c83372d821649c2f323477dbfdc6826ca73624c0574849e64736f6c634300060c0033556e697377617056335477617050726963654f7261636c65563220696d706c656d656e746174696f6e2f6c6f67696320636f6e7472616374206e6f7420646566696e65642e\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630e26154e1461005157806368c4a1ee146100a8578063ad5c4648146100de578063d7dfa0dd146100e6575b600080fd5b61008c6004803603606081101561006757600080fd5b506001600160a01b03813581169162ffffff60208201351691604090910135166100ee565b604080516001600160a01b039092168252519081900360200190f35b61008c600480360360608110156100be57600080fd5b506001600160a01b038135811691602081013591604090910135166102b3565b61008c6102de565b61008c6102f6565b60006001600160a01b0382166101165773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc291505b6001600160a01b0380851660009081526020818152604080832062ffffff88168452825280832086851684529091529020541680156101565790506102ac565b60408051606087811b6bffffffffffffffffffffffff1990811660208085019190915260e889901b6001600160e81b03191660348501529187901b1660378301528251808303602b018152604b909201909252805191012060006101da7f00000000000000000000000000000000000000000000000000000000000000008361031a565b9050806001600160a01b031663d9d3d00a8888886040518463ffffffff1660e01b815260040180846001600160a01b031681526020018362ffffff168152602001826001600160a01b031681526020019350505050600060405180830381600087803b15801561024957600080fd5b505af115801561025d573d6000803e3d6000fd5b505050506001600160a01b0387811660009081526020818152604080832062ffffff8b16845282528083208985168452909152902080546001600160a01b031916918316919091179055925050505b9392505050565b600060208181529381526040808220855292815282812090935282529020546001600160a01b031681565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b0381166103bf576040805162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c6564000000000000000000604482015290519081900360640190fd5b9291505056fea26469706673582212207031ba8c86a5a5639c83372d821649c2f323477dbfdc6826ca73624c0574849e64736f6c634300060c0033\",\n  \"immutableReferences\": {\n    \"23179\": [\n      {\n        \"length\": 32,\n        \"start\": 437\n      },\n      {\n        \"length\": 32,\n        \"start\": 760\n      }\n    ]\n  },\n  \"sourceMap\": \"393:2219:112:-:0;;;1174:182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1174:182:112;-1:-1:-1;;;;;1228:20:112;;1220:102;;;;-1:-1:-1;;;1220:102:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1333:15;;;;-1:-1:-1;;;;;;1333:15:112;;;-1:-1:-1;;;;;393:2219:112;;;;;;;;\",\n  \"deployedSourceMap\": \"393:2219:112:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1725:884;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1725:884:112;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1725:884:112;;;;;;;;;;;;;;864:101;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;864:101:112;;;;;;;;;;;;;;;;;:::i;503:73::-;;;:::i;677:30::-;;;:::i;1725:884::-;1820:7;-1:-1:-1;;;;;1873:23:112;;1869:54;;534:42;1898:25;;1869:54;-1:-1:-1;;;;;2014:25:112;;;1982:21;2014:25;;;;;;;;;;;:34;;;;;;;;;;:45;;;;;;;;;;;;2075:27;;2071:53;;2111:13;-1:-1:-1;2104:20:112;;2071:53;2188:54;;;;;;;-1:-1:-1;;2188:54:112;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2188:54:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2178:65;;;;;-1:-1:-1;2271:49:112;2308:5;2178:65;2271:36;:49::i;:::-;2254:66;;2358:6;-1:-1:-1;;;;;2331:45:112;;2377:16;2395:7;2404:9;2331:83;;;;;;;;;;;;;-1:-1:-1;;;;;2331:83:112;;;;;;;;;;;;;-1:-1:-1;;;;;2331:83:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;2459:25:112;;;:7;:25;;;;;;;;;;;:34;;;;;;;;;;:45;;;;;;;;;;:82;;-1:-1:-1;;;;;;2459:82:112;;;;;;;;;;;-1:-1:-1;;;1725:884:112;;;;;;:::o;864:101::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;864:101:112;;:::o;503:73::-;534:42;503:73;:::o;677:30::-;;;:::o;1831:590:118:-;1907:16;2031:4;2025:11;-1:-1:-1;;;2056:3:118;2049:79;2174:6;2168:4;2164:17;2157:4;2152:3;2148:14;2141:41;-1:-1:-1;;;2211:4:118;2206:3;2202:14;2195:90;2332:4;2326;2321:3;2318:1;2310:27;2298:39;-1:-1:-1;;;;;;;2364:22:118;;2356:58;;;;;-1:-1:-1;;;2356:58:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;1831:590;;;;:::o\",\n  \"source\": \"// SPDX-License-Identifier: UNLICENSED\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\\\";\\r\\n\\r\\nimport \\\"./UniswapV3TwapPriceOracleV2.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title UniswapV3TwapPriceOracleV2Factory\\r\\n * @notice Deploys and catalogs UniswapV3TwapPriceOracleV2 contracts.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract UniswapV3TwapPriceOracleV2Factory {\\r\\n    /**\\r\\n     * @dev WETH token contract address.\\r\\n     */\\r\\n    address constant public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;\\r\\n\\r\\n    /**\\r\\n     * @dev Implementation address for the `UniswapV3TwapPriceOracleV2`.\\r\\n     */\\r\\n    address immutable public logic;\\r\\n\\r\\n    /**\\r\\n     * @notice Maps `UniswapV3Factory` contracts to fee tiers to base tokens to `UniswapV3TwapPriceOracleV2` contract addresses.\\r\\n     */\\r\\n    mapping(address => mapping(uint256 => mapping(address => UniswapV3TwapPriceOracleV2))) public oracles;\\r\\n\\r\\n    /**\\r\\n     * @notice Constructor that stores the UniswapV3TwapPriceOracleV2 implementation/logic contract.\\r\\n     * @param _logic The `UniswapV3TwapPriceOracleV2` implementation contract.\\r\\n     */\\r\\n    constructor(address _logic) public {\\r\\n        require(_logic != address(0), \\\"UniswapV3TwapPriceOracleV2 implementation/logic contract not defined.\\\");\\r\\n        logic  = _logic;\\r\\n    }\\r\\n\\r\\n    /**\\r\\n     * @notice Deploys a `UniswapV3TwapPriceOracleV2`.\\r\\n     * @param uniswapV3Factory The `UniswapV3Factory` contract of the pairs for which this oracle will be used.\\r\\n     * @param feeTier The fee tier of the pairs for which this oracle will be used.\\r\\n     * @param baseToken The base token of the pairs for which this oracle will be used.\\r\\n     */\\r\\n    function deploy(address uniswapV3Factory, uint24 feeTier, address baseToken) external returns (address) {\\r\\n        // Input validation\\r\\n        if (baseToken == address(0)) baseToken = address(WETH);\\r\\n\\r\\n        // Return existing oracle if present\\r\\n        address currentOracle = address(oracles[uniswapV3Factory][feeTier][baseToken]);\\r\\n        if (currentOracle != address(0)) return currentOracle;\\r\\n\\r\\n        // Deploy oracle\\r\\n        bytes32 salt = keccak256(abi.encodePacked(uniswapV3Factory, feeTier, baseToken));\\r\\n        address oracle = ClonesUpgradeable.cloneDeterministic(logic, salt);\\r\\n        UniswapV3TwapPriceOracleV2(oracle).initialize(uniswapV3Factory, feeTier, baseToken);\\r\\n\\r\\n        // Set oracle in state\\r\\n        oracles[uniswapV3Factory][feeTier][baseToken] = UniswapV3TwapPriceOracleV2(oracle);\\r\\n\\r\\n        // Return oracle address\\r\\n        return oracle;\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapV3TwapPriceOracleV2Factory.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapV3TwapPriceOracleV2Factory.sol\",\n    \"exportedSymbols\": {\n      \"UniswapV3TwapPriceOracleV2Factory\": [\n        23301\n      ]\n    },\n    \"id\": 23302,\n    \"license\": \"UNLICENSED\",\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 23169,\n        \"literals\": [\n          \"solidity\",\n          \"0.6\",\n          \".12\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"40:23:112\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\",\n        \"id\": 23170,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 23302,\n        \"sourceUnit\": 24118,\n        \"src\": \"67:73:112\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapV3TwapPriceOracleV2.sol\",\n        \"file\": \"./UniswapV3TwapPriceOracleV2.sol\",\n        \"id\": 23171,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 23302,\n        \"sourceUnit\": 23168,\n        \"src\": \"144:42:112\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 23172,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"190:201:112\",\n          \"text\": \" @title UniswapV3TwapPriceOracleV2Factory\\n @notice Deploys and catalogs UniswapV3TwapPriceOracleV2 contracts.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 23301,\n        \"linearizedBaseContracts\": [\n          23301\n        ],\n        \"name\": \"UniswapV3TwapPriceOracleV2Factory\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 23173,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"443:54:112\",\n              \"text\": \" @dev WETH token contract address.\"\n            },\n            \"functionSelector\": \"ad5c4648\",\n            \"id\": 23176,\n            \"mutability\": \"constant\",\n            \"name\": \"WETH\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 23301,\n            \"src\": \"503:73:112\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 23174,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"503:7:112\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n              \"id\": 23175,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"534:42:112\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              },\n              \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 23177,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"585:86:112\",\n              \"text\": \" @dev Implementation address for the `UniswapV3TwapPriceOracleV2`.\"\n            },\n            \"functionSelector\": \"d7dfa0dd\",\n            \"id\": 23179,\n            \"mutability\": \"immutable\",\n            \"name\": \"logic\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 23301,\n            \"src\": \"677:30:112\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 23178,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"677:7:112\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 23180,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"716:142:112\",\n              \"text\": \" @notice Maps `UniswapV3Factory` contracts to fee tiers to base tokens to `UniswapV3TwapPriceOracleV2` contract addresses.\"\n            },\n            \"functionSelector\": \"68c4a1ee\",\n            \"id\": 23188,\n            \"mutability\": \"mutable\",\n            \"name\": \"oracles\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 23301,\n            \"src\": \"864:101:112\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$_$\",\n              \"typeString\": \"mapping(address => mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2)))\"\n            },\n            \"typeName\": {\n              \"id\": 23187,\n              \"keyType\": {\n                \"id\": 23181,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"872:7:112\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"864:86:112\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$_$\",\n                \"typeString\": \"mapping(address => mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2)))\"\n              },\n              \"valueType\": {\n                \"id\": 23186,\n                \"keyType\": {\n                  \"id\": 23182,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"891:7:112\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"nodeType\": \"Mapping\",\n                \"src\": \"883:66:112\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$\",\n                  \"typeString\": \"mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2))\"\n                },\n                \"valueType\": {\n                  \"id\": 23185,\n                  \"keyType\": {\n                    \"id\": 23183,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"910:7:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"Mapping\",\n                  \"src\": \"902:46:112\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                    \"typeString\": \"mapping(address => contract UniswapV3TwapPriceOracleV2)\"\n                  },\n                  \"valueType\": {\n                    \"contractScope\": null,\n                    \"id\": 23184,\n                    \"name\": \"UniswapV3TwapPriceOracleV2\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 23167,\n                    \"src\": \"921:26:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                      \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                    }\n                  }\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 23208,\n              \"nodeType\": \"Block\",\n              \"src\": \"1209:147:112\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 23200,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 23195,\n                          \"name\": \"_logic\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23191,\n                          \"src\": \"1228:6:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 23198,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"1246:1:112\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 23197,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1238:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 23196,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1238:7:112\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 23199,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1238:10:112\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"1228:20:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"556e697377617056335477617050726963654f7261636c65563220696d706c656d656e746174696f6e2f6c6f67696320636f6e7472616374206e6f7420646566696e65642e\",\n                        \"id\": 23201,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1250:71:112\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_3c59fecc77bca7848e4b5509eb06d310c36a467e2a731e4325b696abc8440157\",\n                          \"typeString\": \"literal_string \\\"UniswapV3TwapPriceOracleV2 implementation/logic contract not defined.\\\"\"\n                        },\n                        \"value\": \"UniswapV3TwapPriceOracleV2 implementation/logic contract not defined.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_3c59fecc77bca7848e4b5509eb06d310c36a467e2a731e4325b696abc8440157\",\n                          \"typeString\": \"literal_string \\\"UniswapV3TwapPriceOracleV2 implementation/logic contract not defined.\\\"\"\n                        }\n                      ],\n                      \"id\": 23194,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"1220:7:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 23202,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1220:102:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 23203,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1220:102:112\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 23206,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23204,\n                      \"name\": \"logic\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23179,\n                      \"src\": \"1333:5:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23205,\n                      \"name\": \"_logic\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23191,\n                      \"src\": \"1342:6:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1333:15:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 23207,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1333:15:112\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 23189,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"974:194:112\",\n              \"text\": \" @notice Constructor that stores the UniswapV3TwapPriceOracleV2 implementation/logic contract.\\n @param _logic The `UniswapV3TwapPriceOracleV2` implementation contract.\"\n            },\n            \"id\": 23209,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 23192,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 23191,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_logic\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23209,\n                  \"src\": \"1186:14:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23190,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1186:7:112\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1185:16:112\"\n            },\n            \"returnParameters\": {\n              \"id\": 23193,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1209:0:112\"\n            },\n            \"scope\": 23301,\n            \"src\": \"1174:182:112\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 23299,\n              \"nodeType\": \"Block\",\n              \"src\": \"1829:780:112\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 23226,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23221,\n                      \"name\": \"baseToken\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23216,\n                      \"src\": \"1873:9:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 23224,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1894:1:112\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 23223,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1886:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 23222,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1886:7:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 23225,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1886:10:112\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1873:23:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 23234,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1869:54:112\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23232,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftHandSide\": {\n                        \"argumentTypes\": null,\n                        \"id\": 23227,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23216,\n                        \"src\": \"1898:9:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"Assignment\",\n                      \"operator\": \"=\",\n                      \"rightHandSide\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23230,\n                            \"name\": \"WETH\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23176,\n                            \"src\": \"1918:4:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 23229,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"1910:7:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 23228,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"1910:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 23231,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1910:13:112\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"src\": \"1898:25:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 23233,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1898:25:112\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    23236\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 23236,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 23299,\n                      \"src\": \"1982:21:112\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 23235,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1982:7:112\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 23247,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 23239,\n                              \"name\": \"oracles\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 23188,\n                              \"src\": \"2014:7:112\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$_$\",\n                                \"typeString\": \"mapping(address => mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2)))\"\n                              }\n                            },\n                            \"id\": 23241,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 23240,\n                              \"name\": \"uniswapV3Factory\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 23212,\n                              \"src\": \"2022:16:112\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2014:25:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$\",\n                              \"typeString\": \"mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2))\"\n                            }\n                          },\n                          \"id\": 23243,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 23242,\n                            \"name\": \"feeTier\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23214,\n                            \"src\": \"2040:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint24\",\n                              \"typeString\": \"uint24\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2014:34:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                            \"typeString\": \"mapping(address => contract UniswapV3TwapPriceOracleV2)\"\n                          }\n                        },\n                        \"id\": 23245,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 23244,\n                          \"name\": \"baseToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23216,\n                          \"src\": \"2049:9:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"2014:45:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                          \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                          \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                        }\n                      ],\n                      \"id\": 23238,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"2006:7:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_address_$\",\n                        \"typeString\": \"type(address)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 23237,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2006:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 23246,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2006:54:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1982:78:112\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 23253,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23248,\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23236,\n                      \"src\": \"2075:13:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 23251,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2100:1:112\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 23250,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"2092:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 23249,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2092:7:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 23252,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2092:10:112\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"2075:27:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 23256,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2071:53:112\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23254,\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23236,\n                      \"src\": \"2111:13:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"functionReturnParameters\": 23220,\n                    \"id\": 23255,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"2104:20:112\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    23258\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 23258,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"salt\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 23299,\n                      \"src\": \"2163:12:112\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bytes32\",\n                        \"typeString\": \"bytes32\"\n                      },\n                      \"typeName\": {\n                        \"id\": 23257,\n                        \"name\": \"bytes32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2163:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 23267,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23262,\n                            \"name\": \"uniswapV3Factory\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23212,\n                            \"src\": \"2205:16:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23263,\n                            \"name\": \"feeTier\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23214,\n                            \"src\": \"2223:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint24\",\n                              \"typeString\": \"uint24\"\n                            }\n                          },\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23264,\n                            \"name\": \"baseToken\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23216,\n                            \"src\": \"2232:9:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            {\n                              \"typeIdentifier\": \"t_uint24\",\n                              \"typeString\": \"uint24\"\n                            },\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 23260,\n                            \"name\": \"abi\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -1,\n                            \"src\": \"2188:3:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_abi\",\n                              \"typeString\": \"abi\"\n                            }\n                          },\n                          \"id\": 23261,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"encodePacked\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2188:16:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\n                            \"typeString\": \"function () pure returns (bytes memory)\"\n                          }\n                        },\n                        \"id\": 23265,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2188:54:112\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                          \"typeString\": \"bytes memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                          \"typeString\": \"bytes memory\"\n                        }\n                      ],\n                      \"id\": 23259,\n                      \"name\": \"keccak256\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": -8,\n                      \"src\": \"2178:9:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n                        \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n                      }\n                    },\n                    \"id\": 23266,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2178:65:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes32\",\n                      \"typeString\": \"bytes32\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2163:80:112\"\n                },\n                {\n                  \"assignments\": [\n                    23269\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 23269,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 23299,\n                      \"src\": \"2254:14:112\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 23268,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2254:7:112\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 23275,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23272,\n                        \"name\": \"logic\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23179,\n                        \"src\": \"2308:5:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23273,\n                        \"name\": \"salt\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23258,\n                        \"src\": \"2315:4:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 23270,\n                        \"name\": \"ClonesUpgradeable\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 24117,\n                        \"src\": \"2271:17:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_ClonesUpgradeable_$24117_$\",\n                          \"typeString\": \"type(library ClonesUpgradeable)\"\n                        }\n                      },\n                      \"id\": 23271,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"cloneDeterministic\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 24082,\n                      \"src\": \"2271:36:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$\",\n                        \"typeString\": \"function (address,bytes32) returns (address)\"\n                      }\n                    },\n                    \"id\": 23274,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2271:49:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2254:66:112\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23280,\n                        \"name\": \"uniswapV3Factory\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23212,\n                        \"src\": \"2377:16:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23281,\n                        \"name\": \"feeTier\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23214,\n                        \"src\": \"2395:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint24\",\n                          \"typeString\": \"uint24\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23282,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23216,\n                        \"src\": \"2404:9:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint24\",\n                          \"typeString\": \"uint24\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23277,\n                            \"name\": \"oracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23269,\n                            \"src\": \"2358:6:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 23276,\n                          \"name\": \"UniswapV3TwapPriceOracleV2\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23167,\n                          \"src\": \"2331:26:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                            \"typeString\": \"type(contract UniswapV3TwapPriceOracleV2)\"\n                          }\n                        },\n                        \"id\": 23278,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2331:34:112\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                          \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                        }\n                      },\n                      \"id\": 23279,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"initialize\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 23014,\n                      \"src\": \"2331:45:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_address_$_t_uint24_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,uint24,address) external\"\n                      }\n                    },\n                    \"id\": 23283,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2331:83:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 23284,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2331:83:112\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 23295,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 23285,\n                            \"name\": \"oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23188,\n                            \"src\": \"2459:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$_$\",\n                              \"typeString\": \"mapping(address => mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2)))\"\n                            }\n                          },\n                          \"id\": 23289,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 23286,\n                            \"name\": \"uniswapV3Factory\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23212,\n                            \"src\": \"2467:16:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2459:25:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$\",\n                            \"typeString\": \"mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2))\"\n                          }\n                        },\n                        \"id\": 23290,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 23287,\n                          \"name\": \"feeTier\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23214,\n                          \"src\": \"2485:7:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint24\",\n                            \"typeString\": \"uint24\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"2459:34:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                          \"typeString\": \"mapping(address => contract UniswapV3TwapPriceOracleV2)\"\n                        }\n                      },\n                      \"id\": 23291,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 23288,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23216,\n                        \"src\": \"2494:9:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2459:45:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                        \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 23293,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23269,\n                          \"src\": \"2534:6:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"id\": 23292,\n                        \"name\": \"UniswapV3TwapPriceOracleV2\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23167,\n                        \"src\": \"2507:26:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                          \"typeString\": \"type(contract UniswapV3TwapPriceOracleV2)\"\n                        }\n                      },\n                      \"id\": 23294,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2507:34:112\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                        \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                      }\n                    },\n                    \"src\": \"2459:82:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                      \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                    }\n                  },\n                  \"id\": 23296,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2459:82:112\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 23297,\n                    \"name\": \"oracle\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 23269,\n                    \"src\": \"2595:6:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"functionReturnParameters\": 23220,\n                  \"id\": 23298,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2588:13:112\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 23210,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1364:355:112\",\n              \"text\": \" @notice Deploys a `UniswapV3TwapPriceOracleV2`.\\n @param uniswapV3Factory The `UniswapV3Factory` contract of the pairs for which this oracle will be used.\\n @param feeTier The fee tier of the pairs for which this oracle will be used.\\n @param baseToken The base token of the pairs for which this oracle will be used.\"\n            },\n            \"functionSelector\": \"0e26154e\",\n            \"id\": 23300,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"deploy\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 23217,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 23212,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"uniswapV3Factory\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23300,\n                  \"src\": \"1741:24:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23211,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1741:7:112\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 23214,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"feeTier\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23300,\n                  \"src\": \"1767:14:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint24\",\n                    \"typeString\": \"uint24\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23213,\n                    \"name\": \"uint24\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1767:6:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint24\",\n                      \"typeString\": \"uint24\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 23216,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"baseToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23300,\n                  \"src\": \"1783:17:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23215,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1783:7:112\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1740:61:112\"\n            },\n            \"returnParameters\": {\n              \"id\": 23220,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 23219,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23300,\n                  \"src\": \"1820:7:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23218,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1820:7:112\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1819:9:112\"\n            },\n            \"scope\": 23301,\n            \"src\": \"1725:884:112\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 23302,\n        \"src\": \"393:2219:112\"\n      }\n    ],\n    \"src\": \"40:2574:112\"\n  },\n  \"legacyAST\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapV3TwapPriceOracleV2Factory.sol\",\n    \"exportedSymbols\": {\n      \"UniswapV3TwapPriceOracleV2Factory\": [\n        23301\n      ]\n    },\n    \"id\": 23302,\n    \"license\": \"UNLICENSED\",\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 23169,\n        \"literals\": [\n          \"solidity\",\n          \"0.6\",\n          \".12\"\n        ],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"40:23:112\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/proxy/ClonesUpgradeable.sol\",\n        \"id\": 23170,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 23302,\n        \"sourceUnit\": 24118,\n        \"src\": \"67:73:112\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/UniswapV3TwapPriceOracleV2.sol\",\n        \"file\": \"./UniswapV3TwapPriceOracleV2.sol\",\n        \"id\": 23171,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 23302,\n        \"sourceUnit\": 23168,\n        \"src\": \"144:42:112\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [],\n        \"contractDependencies\": [],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 23172,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"190:201:112\",\n          \"text\": \" @title UniswapV3TwapPriceOracleV2Factory\\n @notice Deploys and catalogs UniswapV3TwapPriceOracleV2 contracts.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 23301,\n        \"linearizedBaseContracts\": [\n          23301\n        ],\n        \"name\": \"UniswapV3TwapPriceOracleV2Factory\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"constant\": true,\n            \"documentation\": {\n              \"id\": 23173,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"443:54:112\",\n              \"text\": \" @dev WETH token contract address.\"\n            },\n            \"functionSelector\": \"ad5c4648\",\n            \"id\": 23176,\n            \"mutability\": \"constant\",\n            \"name\": \"WETH\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 23301,\n            \"src\": \"503:73:112\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 23174,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"503:7:112\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": {\n              \"argumentTypes\": null,\n              \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n              \"id\": 23175,\n              \"isConstant\": false,\n              \"isLValue\": false,\n              \"isPure\": true,\n              \"kind\": \"number\",\n              \"lValueRequested\": false,\n              \"nodeType\": \"Literal\",\n              \"src\": \"534:42:112\",\n              \"subdenomination\": null,\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address_payable\",\n                \"typeString\": \"address payable\"\n              },\n              \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n            },\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 23177,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"585:86:112\",\n              \"text\": \" @dev Implementation address for the `UniswapV3TwapPriceOracleV2`.\"\n            },\n            \"functionSelector\": \"d7dfa0dd\",\n            \"id\": 23179,\n            \"mutability\": \"immutable\",\n            \"name\": \"logic\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 23301,\n            \"src\": \"677:30:112\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_address\",\n              \"typeString\": \"address\"\n            },\n            \"typeName\": {\n              \"id\": 23178,\n              \"name\": \"address\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"677:7:112\",\n              \"stateMutability\": \"nonpayable\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_address\",\n                \"typeString\": \"address\"\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"constant\": false,\n            \"documentation\": {\n              \"id\": 23180,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"716:142:112\",\n              \"text\": \" @notice Maps `UniswapV3Factory` contracts to fee tiers to base tokens to `UniswapV3TwapPriceOracleV2` contract addresses.\"\n            },\n            \"functionSelector\": \"68c4a1ee\",\n            \"id\": 23188,\n            \"mutability\": \"mutable\",\n            \"name\": \"oracles\",\n            \"nodeType\": \"VariableDeclaration\",\n            \"overrides\": null,\n            \"scope\": 23301,\n            \"src\": \"864:101:112\",\n            \"stateVariable\": true,\n            \"storageLocation\": \"default\",\n            \"typeDescriptions\": {\n              \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$_$\",\n              \"typeString\": \"mapping(address => mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2)))\"\n            },\n            \"typeName\": {\n              \"id\": 23187,\n              \"keyType\": {\n                \"id\": 23181,\n                \"name\": \"address\",\n                \"nodeType\": \"ElementaryTypeName\",\n                \"src\": \"872:7:112\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_address\",\n                  \"typeString\": \"address\"\n                }\n              },\n              \"nodeType\": \"Mapping\",\n              \"src\": \"864:86:112\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$_$\",\n                \"typeString\": \"mapping(address => mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2)))\"\n              },\n              \"valueType\": {\n                \"id\": 23186,\n                \"keyType\": {\n                  \"id\": 23182,\n                  \"name\": \"uint256\",\n                  \"nodeType\": \"ElementaryTypeName\",\n                  \"src\": \"891:7:112\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  }\n                },\n                \"nodeType\": \"Mapping\",\n                \"src\": \"883:66:112\",\n                \"typeDescriptions\": {\n                  \"typeIdentifier\": \"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$\",\n                  \"typeString\": \"mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2))\"\n                },\n                \"valueType\": {\n                  \"id\": 23185,\n                  \"keyType\": {\n                    \"id\": 23183,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"910:7:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"Mapping\",\n                  \"src\": \"902:46:112\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                    \"typeString\": \"mapping(address => contract UniswapV3TwapPriceOracleV2)\"\n                  },\n                  \"valueType\": {\n                    \"contractScope\": null,\n                    \"id\": 23184,\n                    \"name\": \"UniswapV3TwapPriceOracleV2\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 23167,\n                    \"src\": \"921:26:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                      \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                    }\n                  }\n                }\n              }\n            },\n            \"value\": null,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 23208,\n              \"nodeType\": \"Block\",\n              \"src\": \"1209:147:112\",\n              \"statements\": [\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"commonType\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        \"id\": 23200,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"leftExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 23195,\n                          \"name\": \"_logic\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23191,\n                          \"src\": \"1228:6:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"nodeType\": \"BinaryOperation\",\n                        \"operator\": \"!=\",\n                        \"rightExpression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"hexValue\": \"30\",\n                              \"id\": 23198,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"kind\": \"number\",\n                              \"lValueRequested\": false,\n                              \"nodeType\": \"Literal\",\n                              \"src\": \"1246:1:112\",\n                              \"subdenomination\": null,\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              },\n                              \"value\": \"0\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_rational_0_by_1\",\n                                \"typeString\": \"int_const 0\"\n                              }\n                            ],\n                            \"id\": 23197,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"ElementaryTypeNameExpression\",\n                            \"src\": \"1238:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_address_$\",\n                              \"typeString\": \"type(address)\"\n                            },\n                            \"typeName\": {\n                              \"id\": 23196,\n                              \"name\": \"address\",\n                              \"nodeType\": \"ElementaryTypeName\",\n                              \"src\": \"1238:7:112\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": null,\n                                \"typeString\": null\n                              }\n                            }\n                          },\n                          \"id\": 23199,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1238:10:112\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address_payable\",\n                            \"typeString\": \"address payable\"\n                          }\n                        },\n                        \"src\": \"1228:20:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"556e697377617056335477617050726963654f7261636c65563220696d706c656d656e746174696f6e2f6c6f67696320636f6e7472616374206e6f7420646566696e65642e\",\n                        \"id\": 23201,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"string\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1250:71:112\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_stringliteral_3c59fecc77bca7848e4b5509eb06d310c36a467e2a731e4325b696abc8440157\",\n                          \"typeString\": \"literal_string \\\"UniswapV3TwapPriceOracleV2 implementation/logic contract not defined.\\\"\"\n                        },\n                        \"value\": \"UniswapV3TwapPriceOracleV2 implementation/logic contract not defined.\"\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bool\",\n                          \"typeString\": \"bool\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_stringliteral_3c59fecc77bca7848e4b5509eb06d310c36a467e2a731e4325b696abc8440157\",\n                          \"typeString\": \"literal_string \\\"UniswapV3TwapPriceOracleV2 implementation/logic contract not defined.\\\"\"\n                        }\n                      ],\n                      \"id\": 23194,\n                      \"name\": \"require\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [\n                        -18,\n                        -18\n                      ],\n                      \"referencedDeclaration\": -18,\n                      \"src\": \"1220:7:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$\",\n                        \"typeString\": \"function (bool,string memory) pure\"\n                      }\n                    },\n                    \"id\": 23202,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1220:102:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 23203,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1220:102:112\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 23206,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23204,\n                      \"name\": \"logic\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23179,\n                      \"src\": \"1333:5:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23205,\n                      \"name\": \"_logic\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23191,\n                      \"src\": \"1342:6:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"src\": \"1333:15:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"id\": 23207,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"1333:15:112\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 23189,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"974:194:112\",\n              \"text\": \" @notice Constructor that stores the UniswapV3TwapPriceOracleV2 implementation/logic contract.\\n @param _logic The `UniswapV3TwapPriceOracleV2` implementation contract.\"\n            },\n            \"id\": 23209,\n            \"implemented\": true,\n            \"kind\": \"constructor\",\n            \"modifiers\": [],\n            \"name\": \"\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 23192,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 23191,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"_logic\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23209,\n                  \"src\": \"1186:14:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23190,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1186:7:112\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1185:16:112\"\n            },\n            \"returnParameters\": {\n              \"id\": 23193,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [],\n              \"src\": \"1209:0:112\"\n            },\n            \"scope\": 23301,\n            \"src\": \"1174:182:112\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"public\"\n          },\n          {\n            \"body\": {\n              \"id\": 23299,\n              \"nodeType\": \"Block\",\n              \"src\": \"1829:780:112\",\n              \"statements\": [\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 23226,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23221,\n                      \"name\": \"baseToken\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23216,\n                      \"src\": \"1873:9:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"==\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 23224,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"1894:1:112\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 23223,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1886:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 23222,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1886:7:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 23225,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1886:10:112\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"1873:23:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 23234,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"1869:54:112\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23232,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftHandSide\": {\n                        \"argumentTypes\": null,\n                        \"id\": 23227,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23216,\n                        \"src\": \"1898:9:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"Assignment\",\n                      \"operator\": \"=\",\n                      \"rightHandSide\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23230,\n                            \"name\": \"WETH\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23176,\n                            \"src\": \"1918:4:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 23229,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"ElementaryTypeNameExpression\",\n                          \"src\": \"1910:7:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_address_$\",\n                            \"typeString\": \"type(address)\"\n                          },\n                          \"typeName\": {\n                            \"id\": 23228,\n                            \"name\": \"address\",\n                            \"nodeType\": \"ElementaryTypeName\",\n                            \"src\": \"1910:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": null,\n                              \"typeString\": null\n                            }\n                          }\n                        },\n                        \"id\": 23231,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1910:13:112\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"src\": \"1898:25:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"id\": 23233,\n                    \"nodeType\": \"ExpressionStatement\",\n                    \"src\": \"1898:25:112\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    23236\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 23236,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 23299,\n                      \"src\": \"1982:21:112\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 23235,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1982:7:112\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 23247,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"baseExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 23239,\n                              \"name\": \"oracles\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 23188,\n                              \"src\": \"2014:7:112\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$_$\",\n                                \"typeString\": \"mapping(address => mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2)))\"\n                              }\n                            },\n                            \"id\": 23241,\n                            \"indexExpression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 23240,\n                              \"name\": \"uniswapV3Factory\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 23212,\n                              \"src\": \"2022:16:112\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              }\n                            },\n                            \"isConstant\": false,\n                            \"isLValue\": true,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"IndexAccess\",\n                            \"src\": \"2014:25:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$\",\n                              \"typeString\": \"mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2))\"\n                            }\n                          },\n                          \"id\": 23243,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 23242,\n                            \"name\": \"feeTier\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23214,\n                            \"src\": \"2040:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint24\",\n                              \"typeString\": \"uint24\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2014:34:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                            \"typeString\": \"mapping(address => contract UniswapV3TwapPriceOracleV2)\"\n                          }\n                        },\n                        \"id\": 23245,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 23244,\n                          \"name\": \"baseToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23216,\n                          \"src\": \"2049:9:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"2014:45:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                          \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                          \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                        }\n                      ],\n                      \"id\": 23238,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"ElementaryTypeNameExpression\",\n                      \"src\": \"2006:7:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_address_$\",\n                        \"typeString\": \"type(address)\"\n                      },\n                      \"typeName\": {\n                        \"id\": 23237,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2006:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": null,\n                          \"typeString\": null\n                        }\n                      }\n                    },\n                    \"id\": 23246,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2006:54:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1982:78:112\"\n                },\n                {\n                  \"condition\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    },\n                    \"id\": 23253,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23248,\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23236,\n                      \"src\": \"2075:13:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"!=\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"hexValue\": \"30\",\n                          \"id\": 23251,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"kind\": \"number\",\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"Literal\",\n                          \"src\": \"2100:1:112\",\n                          \"subdenomination\": null,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          },\n                          \"value\": \"0\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_rational_0_by_1\",\n                            \"typeString\": \"int_const 0\"\n                          }\n                        ],\n                        \"id\": 23250,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"2092:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_address_$\",\n                          \"typeString\": \"type(address)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 23249,\n                          \"name\": \"address\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"2092:7:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 23252,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2092:10:112\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address_payable\",\n                        \"typeString\": \"address payable\"\n                      }\n                    },\n                    \"src\": \"2075:27:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bool\",\n                      \"typeString\": \"bool\"\n                    }\n                  },\n                  \"falseBody\": null,\n                  \"id\": 23256,\n                  \"nodeType\": \"IfStatement\",\n                  \"src\": \"2071:53:112\",\n                  \"trueBody\": {\n                    \"expression\": {\n                      \"argumentTypes\": null,\n                      \"id\": 23254,\n                      \"name\": \"currentOracle\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 23236,\n                      \"src\": \"2111:13:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      }\n                    },\n                    \"functionReturnParameters\": 23220,\n                    \"id\": 23255,\n                    \"nodeType\": \"Return\",\n                    \"src\": \"2104:20:112\"\n                  }\n                },\n                {\n                  \"assignments\": [\n                    23258\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 23258,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"salt\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 23299,\n                      \"src\": \"2163:12:112\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bytes32\",\n                        \"typeString\": \"bytes32\"\n                      },\n                      \"typeName\": {\n                        \"id\": 23257,\n                        \"name\": \"bytes32\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2163:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 23267,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23262,\n                            \"name\": \"uniswapV3Factory\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23212,\n                            \"src\": \"2205:16:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23263,\n                            \"name\": \"feeTier\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23214,\n                            \"src\": \"2223:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint24\",\n                              \"typeString\": \"uint24\"\n                            }\n                          },\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23264,\n                            \"name\": \"baseToken\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23216,\n                            \"src\": \"2232:9:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            },\n                            {\n                              \"typeIdentifier\": \"t_uint24\",\n                              \"typeString\": \"uint24\"\n                            },\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 23260,\n                            \"name\": \"abi\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": -1,\n                            \"src\": \"2188:3:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_magic_abi\",\n                              \"typeString\": \"abi\"\n                            }\n                          },\n                          \"id\": 23261,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": true,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"encodePacked\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": null,\n                          \"src\": \"2188:16:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\n                            \"typeString\": \"function () pure returns (bytes memory)\"\n                          }\n                        },\n                        \"id\": 23265,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2188:54:112\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                          \"typeString\": \"bytes memory\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_bytes_memory_ptr\",\n                          \"typeString\": \"bytes memory\"\n                        }\n                      ],\n                      \"id\": 23259,\n                      \"name\": \"keccak256\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": -8,\n                      \"src\": \"2178:9:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n                        \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n                      }\n                    },\n                    \"id\": 23266,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2178:65:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_bytes32\",\n                      \"typeString\": \"bytes32\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2163:80:112\"\n                },\n                {\n                  \"assignments\": [\n                    23269\n                  ],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 23269,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"oracle\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 23299,\n                      \"src\": \"2254:14:112\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 23268,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"2254:7:112\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 23275,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23272,\n                        \"name\": \"logic\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23179,\n                        \"src\": \"2308:5:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23273,\n                        \"name\": \"salt\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23258,\n                        \"src\": \"2315:4:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_bytes32\",\n                          \"typeString\": \"bytes32\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 23270,\n                        \"name\": \"ClonesUpgradeable\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 24117,\n                        \"src\": \"2271:17:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_ClonesUpgradeable_$24117_$\",\n                          \"typeString\": \"type(library ClonesUpgradeable)\"\n                        }\n                      },\n                      \"id\": 23271,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"cloneDeterministic\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 24082,\n                      \"src\": \"2271:36:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_nonpayable$_t_address_$_t_bytes32_$returns$_t_address_$\",\n                        \"typeString\": \"function (address,bytes32) returns (address)\"\n                      }\n                    },\n                    \"id\": 23274,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2271:49:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"2254:66:112\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23280,\n                        \"name\": \"uniswapV3Factory\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23212,\n                        \"src\": \"2377:16:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23281,\n                        \"name\": \"feeTier\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23214,\n                        \"src\": \"2395:7:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint24\",\n                          \"typeString\": \"uint24\"\n                        }\n                      },\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 23282,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23216,\n                        \"src\": \"2404:9:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_uint24\",\n                          \"typeString\": \"uint24\"\n                        },\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 23277,\n                            \"name\": \"oracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23269,\n                            \"src\": \"2358:6:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          ],\n                          \"id\": 23276,\n                          \"name\": \"UniswapV3TwapPriceOracleV2\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23167,\n                          \"src\": \"2331:26:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_type$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                            \"typeString\": \"type(contract UniswapV3TwapPriceOracleV2)\"\n                          }\n                        },\n                        \"id\": 23278,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"typeConversion\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"2331:34:112\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                          \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                        }\n                      },\n                      \"id\": 23279,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"initialize\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 23014,\n                      \"src\": \"2331:45:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_nonpayable$_t_address_$_t_uint24_$_t_address_$returns$__$\",\n                        \"typeString\": \"function (address,uint24,address) external\"\n                      }\n                    },\n                    \"id\": 23283,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"2331:83:112\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_tuple$__$\",\n                      \"typeString\": \"tuple()\"\n                    }\n                  },\n                  \"id\": 23284,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2331:83:112\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 23295,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftHandSide\": {\n                      \"argumentTypes\": null,\n                      \"baseExpression\": {\n                        \"argumentTypes\": null,\n                        \"baseExpression\": {\n                          \"argumentTypes\": null,\n                          \"baseExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 23285,\n                            \"name\": \"oracles\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23188,\n                            \"src\": \"2459:7:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$_$\",\n                              \"typeString\": \"mapping(address => mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2)))\"\n                            }\n                          },\n                          \"id\": 23289,\n                          \"indexExpression\": {\n                            \"argumentTypes\": null,\n                            \"id\": 23286,\n                            \"name\": \"uniswapV3Factory\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 23212,\n                            \"src\": \"2467:16:112\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_address\",\n                              \"typeString\": \"address\"\n                            }\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": true,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"nodeType\": \"IndexAccess\",\n                          \"src\": \"2459:25:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$_$\",\n                            \"typeString\": \"mapping(uint256 => mapping(address => contract UniswapV3TwapPriceOracleV2))\"\n                          }\n                        },\n                        \"id\": 23290,\n                        \"indexExpression\": {\n                          \"argumentTypes\": null,\n                          \"id\": 23287,\n                          \"name\": \"feeTier\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23214,\n                          \"src\": \"2485:7:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint24\",\n                            \"typeString\": \"uint24\"\n                          }\n                        },\n                        \"isConstant\": false,\n                        \"isLValue\": true,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"IndexAccess\",\n                        \"src\": \"2459:34:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_mapping$_t_address_$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                          \"typeString\": \"mapping(address => contract UniswapV3TwapPriceOracleV2)\"\n                        }\n                      },\n                      \"id\": 23291,\n                      \"indexExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 23288,\n                        \"name\": \"baseToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23216,\n                        \"src\": \"2494:9:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"isConstant\": false,\n                      \"isLValue\": true,\n                      \"isPure\": false,\n                      \"lValueRequested\": true,\n                      \"nodeType\": \"IndexAccess\",\n                      \"src\": \"2459:45:112\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                        \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                      }\n                    },\n                    \"nodeType\": \"Assignment\",\n                    \"operator\": \"=\",\n                    \"rightHandSide\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 23293,\n                          \"name\": \"oracle\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 23269,\n                          \"src\": \"2534:6:112\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"id\": 23292,\n                        \"name\": \"UniswapV3TwapPriceOracleV2\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 23167,\n                        \"src\": \"2507:26:112\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_contract$_UniswapV3TwapPriceOracleV2_$23167_$\",\n                          \"typeString\": \"type(contract UniswapV3TwapPriceOracleV2)\"\n                        }\n                      },\n                      \"id\": 23294,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"2507:34:112\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                        \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                      }\n                    },\n                    \"src\": \"2459:82:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_UniswapV3TwapPriceOracleV2_$23167\",\n                      \"typeString\": \"contract UniswapV3TwapPriceOracleV2\"\n                    }\n                  },\n                  \"id\": 23296,\n                  \"nodeType\": \"ExpressionStatement\",\n                  \"src\": \"2459:82:112\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"id\": 23297,\n                    \"name\": \"oracle\",\n                    \"nodeType\": \"Identifier\",\n                    \"overloadedDeclarations\": [],\n                    \"referencedDeclaration\": 23269,\n                    \"src\": \"2595:6:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"functionReturnParameters\": 23220,\n                  \"id\": 23298,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"2588:13:112\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 23210,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"1364:355:112\",\n              \"text\": \" @notice Deploys a `UniswapV3TwapPriceOracleV2`.\\n @param uniswapV3Factory The `UniswapV3Factory` contract of the pairs for which this oracle will be used.\\n @param feeTier The fee tier of the pairs for which this oracle will be used.\\n @param baseToken The base token of the pairs for which this oracle will be used.\"\n            },\n            \"functionSelector\": \"0e26154e\",\n            \"id\": 23300,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"deploy\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": null,\n            \"parameters\": {\n              \"id\": 23217,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 23212,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"uniswapV3Factory\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23300,\n                  \"src\": \"1741:24:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23211,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1741:7:112\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 23214,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"feeTier\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23300,\n                  \"src\": \"1767:14:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint24\",\n                    \"typeString\": \"uint24\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23213,\n                    \"name\": \"uint24\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1767:6:112\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint24\",\n                      \"typeString\": \"uint24\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                },\n                {\n                  \"constant\": false,\n                  \"id\": 23216,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"baseToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23300,\n                  \"src\": \"1783:17:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23215,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1783:7:112\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1740:61:112\"\n            },\n            \"returnParameters\": {\n              \"id\": 23220,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 23219,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 23300,\n                  \"src\": \"1820:7:112\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_address\",\n                    \"typeString\": \"address\"\n                  },\n                  \"typeName\": {\n                    \"id\": 23218,\n                    \"name\": \"address\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1820:7:112\",\n                    \"stateMutability\": \"nonpayable\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1819:9:112\"\n            },\n            \"scope\": 23301,\n            \"src\": \"1725:884:112\",\n            \"stateMutability\": \"nonpayable\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 23302,\n        \"src\": \"393:2219:112\"\n      }\n    ],\n    \"src\": \"40:2574:112\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {\n    \"1\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0x8Eed20f31E7d434648fF51114446b3CfFD1FF9F1\",\n      \"transactionHash\": \"0x13bd64cd39efa12535d4dbf9e77eb063fd676c7217e8fb45c760d61bfa5959f4\"\n    },\n    \"31337\": {\n      \"events\": {},\n      \"links\": {},\n      \"address\": \"0x8411708c8b8DFFB278757b42eBe06b7E9267dD52\",\n      \"transactionHash\": \"0x56121ed374977caaac65d3e475cf62062c8ad6d79bf0e7095fed3431b988ed46\"\n    }\n  },\n  \"schemaVersion\": \"3.2.3\",\n  \"updatedAt\": \"2021-10-01T20:30:26.997Z\",\n  \"networkType\": \"ethereum\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"constructor\": {\n        \"params\": {\n          \"_logic\": \"The `UniswapV3TwapPriceOracleV2` implementation contract.\"\n        }\n      },\n      \"deploy(address,uint24,address)\": {\n        \"params\": {\n          \"baseToken\": \"The base token of the pairs for which this oracle will be used.\",\n          \"feeTier\": \"The fee tier of the pairs for which this oracle will be used.\",\n          \"uniswapV3Factory\": \"The `UniswapV3Factory` contract of the pairs for which this oracle will be used.\"\n        }\n      }\n    },\n    \"stateVariables\": {\n      \"WETH\": {\n        \"details\": \"WETH token contract address.\"\n      },\n      \"logic\": {\n        \"details\": \"Implementation address for the `UniswapV3TwapPriceOracleV2`.\"\n      }\n    },\n    \"title\": \"UniswapV3TwapPriceOracleV2Factory\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {\n      \"constructor\": \"Constructor that stores the UniswapV3TwapPriceOracleV2 implementation/logic contract.\",\n      \"deploy(address,uint24,address)\": {\n        \"notice\": \"Deploys a `UniswapV3TwapPriceOracleV2`.\"\n      },\n      \"oracles(address,uint256,address)\": {\n        \"notice\": \"Maps `UniswapV3Factory` contracts to fee tiers to base tokens to `UniswapV3TwapPriceOracleV2` contract addresses.\"\n      }\n    },\n    \"notice\": \"Deploys and catalogs UniswapV3TwapPriceOracleV2 contracts.\",\n    \"version\": 1\n  }\n}"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/YVaultV1PriceOracle.json",
    "content": "{\n  \"contractName\": \"YVaultV1PriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements the `PriceOracle` interface.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\\"}},\\\"title\\\":\\\"YVaultV1PriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"notice\\\":\\\"Returns prices for yVaults using the sender as a root oracle.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV1PriceOracle.sol\\\":\\\"YVaultV1PriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/yearn/IVault.sol\\\":{\\\"keccak256\\\":\\\"0xf23dd37bee36351b1a8f983e44ac72a47384e8faf03cc6d5cdcfbdf814de1125\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://36722e739c28ae16dd3f0a9ad96957cd6941fdacb900943663836b087b374eaf\\\",\\\"dweb:/ipfs/QmVHqHxCGjsA7mMSCtBcHnhg2kdY6gFr8xcBPFH9MxtkAc\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xf267cd7f597c43c528b18543849347126d814357a0c3e262ac657f3054260a89\\\",\\\"urls\\\":[\\\"bzz-raw://d315fcc20e26f6378189167f4ab86893819903823ea18a485588f355aab5e036\\\",\\\"dweb:/ipfs/QmYG9oa8Rti6u7bAoBWJC8TtSqM1V8QsBiivsQo9y4wkAF\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV1PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xaf5794fd7ad78175a2f03d181f5fa20a27fde3aa6657852f0628c1373198e96e\\\",\\\"urls\\\":[\\\"bzz-raw://e0c3bb57cedf20ea4edd5e9e6f3397fd7a34e4881e562e348497441ee02c4d94\\\",\\\"dweb:/ipfs/QmSrgQVf1nWsn67CsoU134gBjk2T1WqSxQUBDqkTcC7aPR\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b50610485806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063fc57d4df14610030575b600080fd5b6100566004803603602081101561004657600080fd5b50356001600160a01b0316610068565b60408051918252519081900360200190f35b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156100a457600080fd5b505afa1580156100b8573d6000803e3d6000fd5b505050506040513d60208110156100ce57600080fd5b505160408051637e062a3560e11b815290519192506000916001600160a01b0384169163fc0c546a916004808301926020929190829003018186803b15801561011657600080fd5b505afa15801561012a573d6000803e3d6000fd5b505050506040513d602081101561014057600080fd5b50519050600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b038316146101e157604080516315d5220f60e31b81526001600160a01b03841660048201529051339163aea91078916024808301926020929190829003018186803b1580156101b057600080fd5b505afa1580156101c4573d6000803e3d6000fd5b505050506040513d60208110156101da57600080fd5b50516101eb565b670de0b6b3a76400005b90506000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561022857600080fd5b505afa15801561023c573d6000803e3d6000fd5b505050506040513d602081101561025257600080fd5b505160408051631df1ee3f60e21b8152905160ff909216600a0a92506102e39183916102dd9186916001600160a01b038a16916377c7b8fc91600480820192602092909190829003018186803b1580156102ab57600080fd5b505afa1580156102bf573d6000803e3d6000fd5b505050506040513d60208110156102d557600080fd5b5051906102ed565b9061034f565b9695505050505050565b6000826102fc57506000610349565b8282028284828161030957fe5b04146103465760405162461bcd60e51b815260040180806020018281038252602181526020018061042f6021913960400191505060405180910390fd5b90505b92915050565b600061034683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836104185760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156103dd5781810151838201526020016103c5565b50505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161042457fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122077a3655618850cb7d6bb3134107ee0af7446ed81a55505a8e3344834f3aff68f64736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063fc57d4df14610030575b600080fd5b6100566004803603602081101561004657600080fd5b50356001600160a01b0316610068565b60408051918252519081900360200190f35b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156100a457600080fd5b505afa1580156100b8573d6000803e3d6000fd5b505050506040513d60208110156100ce57600080fd5b505160408051637e062a3560e11b815290519192506000916001600160a01b0384169163fc0c546a916004808301926020929190829003018186803b15801561011657600080fd5b505afa15801561012a573d6000803e3d6000fd5b505050506040513d602081101561014057600080fd5b50519050600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b038316146101e157604080516315d5220f60e31b81526001600160a01b03841660048201529051339163aea91078916024808301926020929190829003018186803b1580156101b057600080fd5b505afa1580156101c4573d6000803e3d6000fd5b505050506040513d60208110156101da57600080fd5b50516101eb565b670de0b6b3a76400005b90506000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561022857600080fd5b505afa15801561023c573d6000803e3d6000fd5b505050506040513d602081101561025257600080fd5b505160408051631df1ee3f60e21b8152905160ff909216600a0a92506102e39183916102dd9186916001600160a01b038a16916377c7b8fc91600480820192602092909190829003018186803b1580156102ab57600080fd5b505afa1580156102bf573d6000803e3d6000fd5b505050506040513d60208110156102d557600080fd5b5051906102ed565b9061034f565b9695505050505050565b6000826102fc57506000610349565b8282028284828161030957fe5b04146103465760405162461bcd60e51b815260040180806020018281038252602181526020018061042f6021913960400191505060405180910390fd5b90505b92915050565b600061034683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836104185760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156103dd5781810151838201526020016103c5565b50505050905090810190601f16801561040a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161042457fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122077a3655618850cb7d6bb3134107ee0af7446ed81a55505a8e3344834f3aff68f64736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"828:1150:43:-:0;;;;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"828:1150:43:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:933;;;;;;;;;;;;;;;;-1:-1:-1;1042:933:43;-1:-1:-1;;;;;1042:933:43;;:::i;:::-;;;;;;;;;;;;;;;;;1117:4;1183:13;1221:6;-1:-1:-1;;;;;1206:34:43;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1206:36:43;1280:14;;;-1:-1:-1;;;1280:14:43;;;;1206:36;;-1:-1:-1;1254:23:43;;-1:-1:-1;;;;;1280:12:43;;;;;:14;;;;;1206:36;;1280:14;;;;;;;:12;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1280:14:43;;-1:-1:-1;1305:20:43;1347:42;-1:-1:-1;;;;;1328:61:43;;;:121;;1399:50;;;-1:-1:-1;;;1399:50:43;;-1:-1:-1;;;;;1399:50:43;;;;;;;;1415:10;;1399:33;;:50;;;;;;;;;;;;;;1415:10;1399:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1399:50:43;1328:121;;;1392:4;1328:121;1305:144;;1792:16;1825:6;-1:-1:-1;;;;;1825:15:43;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1825:17:43;1861:29;;;-1:-1:-1;;;1861:29:43;;;;1817:26;;;;1811:2;:32;;-1:-1:-1;1861:64:43;;1811:32;;1861:50;;1895:15;;-1:-1:-1;;;;;1861:27:43;;;;;:29;;;;;1825:17;;1861:29;;;;;;;;:27;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1861:29:43;;:33;:50::i;:::-;:54;;:64::i;:::-;1854:71;1042:933;-1:-1:-1;;;;;;1042:933:43:o;2199:459:47:-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:47;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:1;-1:-1:-1;2199:459:47;;;;;:::o;3120:130::-;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:47:o\",\n  \"source\": \"/**\\r\\n * COPYRIGHT © 2020 RARI CAPITAL, INC. ALL RIGHTS RESERVED.\\r\\n * No one is permitted to use the software for any purpose without the explicit permission of David Lucid of Rari Capital, Inc.\\r\\n * This license is liable to change at any time at the sole discretion of David Lucid of Rari Capital, Inc.\\r\\n */\\r\\n\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"../external/yearn/IVault.sol\\\";\\r\\n\\r\\nimport \\\"./BasePriceOracle.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title YVaultV1PriceOracle\\r\\n * @notice Returns prices for yVaults using the sender as a root oracle.\\r\\n * @dev Implements the `PriceOracle` interface.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract YVaultV1PriceOracle is PriceOracle {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint) {\\r\\n        // Get price of token underlying yVault\\r\\n        IVault yVault = IVault(CErc20(address(cToken)).underlying());\\r\\n        address underlyingToken = yVault.token();\\r\\n        uint underlyingPrice = underlyingToken == 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 ? 1e18 : BasePriceOracle(msg.sender).price(underlyingToken);\\r\\n\\r\\n        // yVault/ETH = yVault/token * token/ETH\\r\\n        // Return value = yVault/ETH scaled by 1e(36 - yVault decimals)\\r\\n        // `getPricePerFullShare` = yVault/token scaled by 1e18\\r\\n        // `underlyingPrice` = token/ETH scaled by 1e18\\r\\n        // Return value = `pricePerShare` * `underlyingPrice` / 1e(yVault decimals)\\r\\n        uint256 baseUnit = 10 ** uint256(yVault.decimals());\\r\\n        return yVault.getPricePerFullShare().mul(underlyingPrice).div(baseUnit); // getPricePerFullShare is scaled by 1e18\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV1PriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV1PriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"YVaultV1PriceOracle\": [10476]\n    },\n    \"id\": 10477,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 10399,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"312:23:43\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 10400,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10477,\n        \"sourceUnit\": 10933,\n        \"src\": \"339:74:43\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 10401,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10477,\n        \"sourceUnit\": 6024,\n        \"src\": \"417:46:43\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 10402,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10477,\n        \"sourceUnit\": 5724,\n        \"src\": \"465:41:43\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/yearn/IVault.sol\",\n        \"file\": \"../external/yearn/IVault.sol\",\n        \"id\": 10403,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10477,\n        \"sourceUnit\": 7277,\n        \"src\": \"510:38:43\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n        \"file\": \"./BasePriceOracle.sol\",\n        \"id\": 10404,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10477,\n        \"sourceUnit\": 7739,\n        \"src\": \"552:31:43\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 10406,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"860:11:43\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 10407,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"860:11:43\"\n          }\n        ],\n        \"contractDependencies\": [6023],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 10405,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"587:239:43\",\n          \"text\": \" @title YVaultV1PriceOracle\\n @notice Returns prices for yVaults using the sender as a root oracle.\\n @dev Implements the `PriceOracle` interface.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 10476,\n        \"linearizedBaseContracts\": [10476, 6023],\n        \"name\": \"YVaultV1PriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 10410,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 10408,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 10932,\n              \"src\": \"885:19:43\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$10932\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"879:38:43\",\n            \"typeName\": {\n              \"id\": 10409,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"909:7:43\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 10474,\n              \"nodeType\": \"Block\",\n              \"src\": \"1123:852:43\",\n              \"statements\": [\n                {\n                  \"assignments\": [10420],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10420,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"yVault\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10474,\n                      \"src\": \"1183:13:43\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_IVault_$7276\",\n                        \"typeString\": \"contract IVault\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 10419,\n                        \"name\": \"IVault\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 7276,\n                        \"src\": \"1183:6:43\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IVault_$7276\",\n                          \"typeString\": \"contract IVault\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10431,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 10425,\n                                    \"name\": \"cToken\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 10413,\n                                    \"src\": \"1221:6:43\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  ],\n                                  \"id\": 10424,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"ElementaryTypeNameExpression\",\n                                  \"src\": \"1213:7:43\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_type$_t_address_$\",\n                                    \"typeString\": \"type(address)\"\n                                  },\n                                  \"typeName\": {\n                                    \"id\": 10423,\n                                    \"name\": \"address\",\n                                    \"nodeType\": \"ElementaryTypeName\",\n                                    \"src\": \"1213:7:43\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": null,\n                                      \"typeString\": null\n                                    }\n                                  }\n                                },\n                                \"id\": 10426,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"typeConversion\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"1213:15:43\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 10422,\n                              \"name\": \"CErc20\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 5723,\n                              \"src\": \"1206:6:43\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                                \"typeString\": \"type(contract CErc20)\"\n                              }\n                            },\n                            \"id\": 10427,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1206:23:43\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                              \"typeString\": \"contract CErc20\"\n                            }\n                          },\n                          \"id\": 10428,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"underlying\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5711,\n                          \"src\": \"1206:34:43\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                            \"typeString\": \"function () view external returns (address)\"\n                          }\n                        },\n                        \"id\": 10429,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1206:36:43\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 10421,\n                      \"name\": \"IVault\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7276,\n                      \"src\": \"1199:6:43\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_IVault_$7276_$\",\n                        \"typeString\": \"type(contract IVault)\"\n                      }\n                    },\n                    \"id\": 10430,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1199:44:43\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_IVault_$7276\",\n                      \"typeString\": \"contract IVault\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1183:60:43\"\n                },\n                {\n                  \"assignments\": [10433],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10433,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlyingToken\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10474,\n                      \"src\": \"1254:23:43\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10432,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1254:7:43\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10437,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10434,\n                        \"name\": \"yVault\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10420,\n                        \"src\": \"1280:6:43\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IVault_$7276\",\n                          \"typeString\": \"contract IVault\"\n                        }\n                      },\n                      \"id\": 10435,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"token\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 7270,\n                      \"src\": \"1280:12:43\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 10436,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1280:14:43\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1254:40:43\"\n                },\n                {\n                  \"assignments\": [10439],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10439,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlyingPrice\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10474,\n                      \"src\": \"1305:20:43\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10438,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1305:4:43\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10452,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"condition\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"id\": 10442,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10440,\n                        \"name\": \"underlyingToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10433,\n                        \"src\": \"1328:15:43\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"==\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                        \"id\": 10441,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1347:42:43\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                      },\n                      \"src\": \"1328:61:43\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"falseExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 10449,\n                          \"name\": \"underlyingToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 10433,\n                          \"src\": \"1433:15:43\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10445,\n                                \"name\": \"msg\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": -15,\n                                \"src\": \"1415:3:43\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_magic_message\",\n                                  \"typeString\": \"msg\"\n                                }\n                              },\n                              \"id\": 10446,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"sender\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": null,\n                              \"src\": \"1415:10:43\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              }\n                            ],\n                            \"id\": 10444,\n                            \"name\": \"BasePriceOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7738,\n                            \"src\": \"1399:15:43\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$7738_$\",\n                              \"typeString\": \"type(contract BasePriceOracle)\"\n                            }\n                          },\n                          \"id\": 10447,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1399:27:43\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_BasePriceOracle_$7738\",\n                            \"typeString\": \"contract BasePriceOracle\"\n                          }\n                        },\n                        \"id\": 10448,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"price\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 7737,\n                        \"src\": \"1399:33:43\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (address) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 10450,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1399:50:43\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 10451,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"Conditional\",\n                    \"src\": \"1328:121:43\",\n                    \"trueExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 10443,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1392:4:43\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1305:144:43\"\n                },\n                {\n                  \"assignments\": [10454],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10454,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"baseUnit\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10474,\n                      \"src\": \"1792:16:43\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10453,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1792:7:43\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10463,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10462,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3130\",\n                      \"id\": 10455,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1811:2:43\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_10_by_1\",\n                        \"typeString\": \"int_const 10\"\n                      },\n                      \"value\": \"10\"\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"**\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 10458,\n                              \"name\": \"yVault\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10420,\n                              \"src\": \"1825:6:43\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_IVault_$7276\",\n                                \"typeString\": \"contract IVault\"\n                              }\n                            },\n                            \"id\": 10459,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"decimals\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 7275,\n                            \"src\": \"1825:15:43\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                              \"typeString\": \"function () view external returns (uint8)\"\n                            }\n                          },\n                          \"id\": 10460,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1825:17:43\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        ],\n                        \"id\": 10457,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1817:7:43\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                          \"typeString\": \"type(uint256)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 10456,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1817:7:43\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 10461,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1817:26:43\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1811:32:43\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1792:51:43\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 10471,\n                        \"name\": \"baseUnit\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10454,\n                        \"src\": \"1916:8:43\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"id\": 10468,\n                            \"name\": \"underlyingPrice\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 10439,\n                            \"src\": \"1895:15:43\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [],\n                            \"expression\": {\n                              \"argumentTypes\": [],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10464,\n                                \"name\": \"yVault\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10420,\n                                \"src\": \"1861:6:43\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_contract$_IVault_$7276\",\n                                  \"typeString\": \"contract IVault\"\n                                }\n                              },\n                              \"id\": 10465,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"getPricePerFullShare\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 7265,\n                              \"src\": \"1861:27:43\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                                \"typeString\": \"function () view external returns (uint256)\"\n                              }\n                            },\n                            \"id\": 10466,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1861:29:43\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 10467,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"1861:33:43\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 10469,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1861:50:43\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 10470,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"1861:54:43\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 10472,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1861:64:43\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 10418,\n                  \"id\": 10473,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1854:71:43\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 10411,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"925:111:43\",\n              \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 10475,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 10415,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"1094:8:43\"\n            },\n            \"parameters\": {\n              \"id\": 10414,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10413,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10475,\n                  \"src\": \"1070:13:43\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 10412,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"1070:6:43\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1069:15:43\"\n            },\n            \"returnParameters\": {\n              \"id\": 10418,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10417,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10475,\n                  \"src\": \"1117:4:43\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 10416,\n                    \"name\": \"uint\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1117:4:43\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1116:6:43\"\n            },\n            \"scope\": 10476,\n            \"src\": \"1042:933:43\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 10477,\n        \"src\": \"828:1150:43\"\n      }\n    ],\n    \"src\": \"312:1668:43\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV1PriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"YVaultV1PriceOracle\": [10476]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 10399,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"312:23:43\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 10933,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 10477,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10400,\n        \"name\": \"ImportDirective\",\n        \"src\": \"339:74:43\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 10477,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10401,\n        \"name\": \"ImportDirective\",\n        \"src\": \"417:46:43\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 10477,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10402,\n        \"name\": \"ImportDirective\",\n        \"src\": \"465:41:43\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 7277,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/yearn/IVault.sol\",\n          \"file\": \"../external/yearn/IVault.sol\",\n          \"scope\": 10477,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10403,\n        \"name\": \"ImportDirective\",\n        \"src\": \"510:38:43\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 7739,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n          \"file\": \"./BasePriceOracle.sol\",\n          \"scope\": 10477,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10404,\n        \"name\": \"ImportDirective\",\n        \"src\": \"552:31:43\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [10476, 6023],\n          \"name\": \"YVaultV1PriceOracle\",\n          \"scope\": 10477\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title YVaultV1PriceOracle\\n @notice Returns prices for yVaults using the sender as a root oracle.\\n @dev Implements the `PriceOracle` interface.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n            },\n            \"id\": 10405,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"587:239:43\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 10406,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"860:11:43\"\n              }\n            ],\n            \"id\": 10407,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"860:11:43\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 10932,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 10408,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"885:19:43\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 10409,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"909:7:43\"\n              }\n            ],\n            \"id\": 10410,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"879:38:43\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 10476,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n                },\n                \"id\": 10411,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"925:111:43\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 10415,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"1094:8:43\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 10475,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 10412,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"1070:6:43\"\n                      }\n                    ],\n                    \"id\": 10413,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1070:13:43\"\n                  }\n                ],\n                \"id\": 10414,\n                \"name\": \"ParameterList\",\n                \"src\": \"1069:15:43\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 10475,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 10416,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1117:4:43\"\n                      }\n                    ],\n                    \"id\": 10417,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1117:4:43\"\n                  }\n                ],\n                \"id\": 10418,\n                \"name\": \"ParameterList\",\n                \"src\": \"1116:6:43\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10420]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"yVault\",\n                          \"overrides\": null,\n                          \"scope\": 10474,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"contract IVault\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"contractScope\": null,\n                              \"name\": \"IVault\",\n                              \"referencedDeclaration\": 7276,\n                              \"type\": \"contract IVault\"\n                            },\n                            \"id\": 10419,\n                            \"name\": \"UserDefinedTypeName\",\n                            \"src\": \"1183:6:43\"\n                          }\n                        ],\n                        \"id\": 10420,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1183:13:43\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"contract IVault\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7276,\n                              \"type\": \"type(contract IVault)\",\n                              \"value\": \"IVault\"\n                            },\n                            \"id\": 10421,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1199:6:43\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"underlying\",\n                                  \"referencedDeclaration\": 5711,\n                                  \"type\": \"function () view external returns (address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract CErc20\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 5723,\n                                          \"type\": \"type(contract CErc20)\",\n                                          \"value\": \"CErc20\"\n                                        },\n                                        \"id\": 10422,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1206:6:43\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"address\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                                  \"typeString\": \"contract CToken\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"type\": \"type(address)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"name\": \"address\",\n                                                  \"type\": null\n                                                },\n                                                \"id\": 10423,\n                                                \"name\": \"ElementaryTypeName\",\n                                                \"src\": \"1213:7:43\"\n                                              }\n                                            ],\n                                            \"id\": 10424,\n                                            \"name\": \"ElementaryTypeNameExpression\",\n                                            \"src\": \"1213:7:43\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10413,\n                                              \"type\": \"contract CToken\",\n                                              \"value\": \"cToken\"\n                                            },\n                                            \"id\": 10425,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1221:6:43\"\n                                          }\n                                        ],\n                                        \"id\": 10426,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1213:15:43\"\n                                      }\n                                    ],\n                                    \"id\": 10427,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1206:23:43\"\n                                  }\n                                ],\n                                \"id\": 10428,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1206:34:43\"\n                              }\n                            ],\n                            \"id\": 10429,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1206:36:43\"\n                          }\n                        ],\n                        \"id\": 10430,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1199:44:43\"\n                      }\n                    ],\n                    \"id\": 10431,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1183:60:43\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10433]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlyingToken\",\n                          \"overrides\": null,\n                          \"scope\": 10474,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 10432,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1254:7:43\"\n                          }\n                        ],\n                        \"id\": 10433,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1254:23:43\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"token\",\n                              \"referencedDeclaration\": 7270,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10420,\n                                  \"type\": \"contract IVault\",\n                                  \"value\": \"yVault\"\n                                },\n                                \"id\": 10434,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1280:6:43\"\n                              }\n                            ],\n                            \"id\": 10435,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1280:12:43\"\n                          }\n                        ],\n                        \"id\": 10436,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1280:14:43\"\n                      }\n                    ],\n                    \"id\": 10437,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1254:40:43\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10439]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlyingPrice\",\n                          \"overrides\": null,\n                          \"scope\": 10474,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10438,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1305:4:43\"\n                          }\n                        ],\n                        \"id\": 10439,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1305:20:43\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"==\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10433,\n                                  \"type\": \"address\",\n                                  \"value\": \"underlyingToken\"\n                                },\n                                \"id\": 10440,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1328:15:43\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                                },\n                                \"id\": 10441,\n                                \"name\": \"Literal\",\n                                \"src\": \"1347:42:43\"\n                              }\n                            ],\n                            \"id\": 10442,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"1328:61:43\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 10443,\n                            \"name\": \"Literal\",\n                            \"src\": \"1392:4:43\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"price\",\n                                  \"referencedDeclaration\": 7737,\n                                  \"type\": \"function (address) view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract BasePriceOracle\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address_payable\",\n                                              \"typeString\": \"address payable\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7738,\n                                          \"type\": \"type(contract BasePriceOracle)\",\n                                          \"value\": \"BasePriceOracle\"\n                                        },\n                                        \"id\": 10444,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1399:15:43\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"sender\",\n                                          \"referencedDeclaration\": null,\n                                          \"type\": \"address payable\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": -15,\n                                              \"type\": \"msg\",\n                                              \"value\": \"msg\"\n                                            },\n                                            \"id\": 10445,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1415:3:43\"\n                                          }\n                                        ],\n                                        \"id\": 10446,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"1415:10:43\"\n                                      }\n                                    ],\n                                    \"id\": 10447,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1399:27:43\"\n                                  }\n                                ],\n                                \"id\": 10448,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1399:33:43\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10433,\n                                  \"type\": \"address\",\n                                  \"value\": \"underlyingToken\"\n                                },\n                                \"id\": 10449,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1433:15:43\"\n                              }\n                            ],\n                            \"id\": 10450,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1399:50:43\"\n                          }\n                        ],\n                        \"id\": 10451,\n                        \"name\": \"Conditional\",\n                        \"src\": \"1328:121:43\"\n                      }\n                    ],\n                    \"id\": 10452,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1305:144:43\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10454]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"baseUnit\",\n                          \"overrides\": null,\n                          \"scope\": 10474,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10453,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1792:7:43\"\n                          }\n                        ],\n                        \"id\": 10454,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1792:16:43\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"**\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3130\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 10\",\n                              \"value\": \"10\"\n                            },\n                            \"id\": 10455,\n                            \"name\": \"Literal\",\n                            \"src\": \"1811:2:43\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint8\",\n                                      \"typeString\": \"uint8\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"type(uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint256\",\n                                      \"type\": null\n                                    },\n                                    \"id\": 10456,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"1817:7:43\"\n                                  }\n                                ],\n                                \"id\": 10457,\n                                \"name\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"1817:7:43\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint8\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"decimals\",\n                                      \"referencedDeclaration\": 7275,\n                                      \"type\": \"function () view external returns (uint8)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10420,\n                                          \"type\": \"contract IVault\",\n                                          \"value\": \"yVault\"\n                                        },\n                                        \"id\": 10458,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1825:6:43\"\n                                      }\n                                    ],\n                                    \"id\": 10459,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1825:15:43\"\n                                  }\n                                ],\n                                \"id\": 10460,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1825:17:43\"\n                              }\n                            ],\n                            \"id\": 10461,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1817:26:43\"\n                          }\n                        ],\n                        \"id\": 10462,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"1811:32:43\"\n                      }\n                    ],\n                    \"id\": 10463,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1792:51:43\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 10418\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_uint256\",\n                                          \"typeString\": \"uint256\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"arguments\": [null],\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [null],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"getPricePerFullShare\",\n                                              \"referencedDeclaration\": 7265,\n                                              \"type\": \"function () view external returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"overloadedDeclarations\": [\n                                                    null\n                                                  ],\n                                                  \"referencedDeclaration\": 10420,\n                                                  \"type\": \"contract IVault\",\n                                                  \"value\": \"yVault\"\n                                                },\n                                                \"id\": 10464,\n                                                \"name\": \"Identifier\",\n                                                \"src\": \"1861:6:43\"\n                                              }\n                                            ],\n                                            \"id\": 10465,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"1861:27:43\"\n                                          }\n                                        ],\n                                        \"id\": 10466,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1861:29:43\"\n                                      }\n                                    ],\n                                    \"id\": 10467,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1861:33:43\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"overloadedDeclarations\": [null],\n                                      \"referencedDeclaration\": 10439,\n                                      \"type\": \"uint256\",\n                                      \"value\": \"underlyingPrice\"\n                                    },\n                                    \"id\": 10468,\n                                    \"name\": \"Identifier\",\n                                    \"src\": \"1895:15:43\"\n                                  }\n                                ],\n                                \"id\": 10469,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1861:50:43\"\n                              }\n                            ],\n                            \"id\": 10470,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1861:54:43\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10454,\n                              \"type\": \"uint256\",\n                              \"value\": \"baseUnit\"\n                            },\n                            \"id\": 10471,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1916:8:43\"\n                          }\n                        ],\n                        \"id\": 10472,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1861:64:43\"\n                      }\n                    ],\n                    \"id\": 10473,\n                    \"name\": \"Return\",\n                    \"src\": \"1854:71:43\"\n                  }\n                ],\n                \"id\": 10474,\n                \"name\": \"Block\",\n                \"src\": \"1123:852:43\"\n              }\n            ],\n            \"id\": 10475,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1042:933:43\"\n          }\n        ],\n        \"id\": 10476,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"828:1150:43\"\n      }\n    ],\n    \"id\": 10477,\n    \"name\": \"SourceUnit\",\n    \"src\": \"312:1668:43\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.177Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements the `PriceOracle` interface.\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n      }\n    },\n    \"title\": \"YVaultV1PriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"notice\": \"Returns prices for yVaults using the sender as a root oracle.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles/YVaultV2PriceOracle.json",
    "content": "{\n  \"contractName\": \"YVaultV2PriceOracle\",\n  \"abi\": [\n    {\n      \"inputs\": [\n        {\n          \"internalType\": \"contract CToken\",\n          \"name\": \"cToken\",\n          \"type\": \"address\"\n        }\n      ],\n      \"name\": \"getUnderlyingPrice\",\n      \"outputs\": [\n        {\n          \"internalType\": \"uint256\",\n          \"name\": \"\",\n          \"type\": \"uint256\"\n        }\n      ],\n      \"stateMutability\": \"view\",\n      \"type\": \"function\"\n    }\n  ],\n  \"metadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.6.12+commit.27d51765\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract CToken\\\",\\\"name\\\":\\\"cToken\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"getUnderlyingPrice\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"David Lucid <david@rari.capital> (https://github.com/davidlucid)\\\",\\\"details\\\":\\\"Implements the `PriceOracle` interface.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"getUnderlyingPrice(address)\\\":{\\\"details\\\":\\\"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\\"}},\\\"title\\\":\\\"YVaultV2PriceOracle\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{},\\\"notice\\\":\\\"Returns prices for yVaults using the sender as a root oracle.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV2PriceOracle.sol\\\":\\\"YVaultV2PriceOracle\\\"},\\\"evmVersion\\\":\\\"istanbul\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\\\":{\\\"keccak256\\\":\\\"0xb5389113393e785b62d404388e3a4edd5d0846c7af03a8877b1fb27e2714e2a0\\\",\\\"urls\\\":[\\\"bzz-raw://5f7756611610b189a731e18d59fa867ca6d4f0921b2d54f5301d615574f449ef\\\",\\\"dweb:/ipfs/QmSwVh5o9mpx3V3X8qmscmWBJrGhaFZZZUYhhX3Wysa3R7\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CToken.sol\\\":{\\\"keccak256\\\":\\\"0xdfa3477ac5b45b78648b7ab1c804f5ad032e4b3143ffe178c0609fcd598fc2c7\\\",\\\"urls\\\":[\\\"bzz-raw://2ce9c025dd3897daabbe8e2f24be1d050e358c61d927047918fc3ab0042a4ea9\\\",\\\"dweb:/ipfs/QmPGpp9FMK1rpapJBUGzH9RTPidb865E4D9ZepiFUgrQ3t\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x87c6066612ced3b1beed4ac7ca5c7786903005b3d6cede8783faf3683f95a5d2\\\",\\\"urls\\\":[\\\"bzz-raw://449b3e2f89482f2bd95e0ccdf5dfcec65052c52283d4a36655053ebee52902f2\\\",\\\"dweb:/ipfs/Qmf65HW2oxh4nZupaau58vm91w75Edf3Lqyhn8mh9uDuRH\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/yearn/IVaultV2.sol\\\":{\\\"keccak256\\\":\\\"0xa540629e8ac69e0b48236c0a916b93af6ff1e15b424e98f01477ec786985e446\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://19154e978bc0061ce3d297a58f838d6d951f74f402b1df5238aa9cbad8875330\\\",\\\"dweb:/ipfs/QmWh9wJvcdu22vCXi7fR6kWfS2LxCaB5UkoGtaNcbMrQYD\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0xf267cd7f597c43c528b18543849347126d814357a0c3e262ac657f3054260a89\\\",\\\"urls\\\":[\\\"bzz-raw://d315fcc20e26f6378189167f4ab86893819903823ea18a485588f355aab5e036\\\",\\\"dweb:/ipfs/QmYG9oa8Rti6u7bAoBWJC8TtSqM1V8QsBiivsQo9y4wkAF\\\"]},\\\"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV2PriceOracle.sol\\\":{\\\"keccak256\\\":\\\"0x6ae7ca6f9c1688e533f72cf64e4008f18fbde07a344a850492b2f3b6767bba03\\\",\\\"urls\\\":[\\\"bzz-raw://06640cd96249e2e4fff83188efdd6c82be6320802429e4babac9cf17414d0e10\\\",\\\"dweb:/ipfs/QmZVyHFeD96gBwH1kbZHjQE4Zaqwg8G9LA34FGhwcXAVJ2\\\"]},\\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\":{\\\"keccak256\\\":\\\"0xe9ecc18d06bcc5aa48c40a98333540248b6c1c18ecb6262329c06d3f0cbb45ae\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8a81bcbe4f867a4eaf7ec375508a9901ea7517b9854c9a542c242050beda5127\\\",\\\"dweb:/ipfs/QmS499VRDhAgMg1pK96PiyRpP3gJZzzMcoNBbe8AV3JNw3\\\"]}},\\\"version\\\":1}\",\n  \"bytecode\": \"0x608060405234801561001057600080fd5b5061049c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063fc57d4df14610030575b600080fd5b6100566004803603602081101561004657600080fd5b50356001600160a01b0316610068565b60408051918252519081900360200190f35b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156100a457600080fd5b505afa1580156100b8573d6000803e3d6000fd5b505050506040513d60208110156100ce57600080fd5b505160408051637e062a3560e11b815290519192506000916001600160a01b0384169163fc0c546a916004808301926020929190829003018186803b15801561011657600080fd5b505afa15801561012a573d6000803e3d6000fd5b505050506040513d602081101561014057600080fd5b50519050600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b038316146101e157604080516315d5220f60e31b81526001600160a01b03841660048201529051339163aea91078916024808301926020929190829003018186803b1580156101b057600080fd5b505afa1580156101c4573d6000803e3d6000fd5b505050506040513d60208110156101da57600080fd5b50516101eb565b670de0b6b3a76400005b90506000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561022857600080fd5b505afa15801561023c573d6000803e3d6000fd5b505050506040513d602081101561025257600080fd5b810190808051906020019092919050505060ff16600a0a90506102fa816102ee670de0b6b3a76400006102f4856102ee888b6001600160a01b03166399530b066040518163ffffffff1660e01b815260040160206040518083038186803b1580156102bc57600080fd5b505afa1580156102d0573d6000803e3d6000fd5b505050506040513d60208110156102e657600080fd5b505190610304565b90610366565b90610304565b9695505050505050565b60008261031357506000610360565b8282028284828161032057fe5b041461035d5760405162461bcd60e51b81526004018080602001828103825260218152602001806104466021913960400191505060405180910390fd5b90505b92915050565b600061035d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361042f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156103f45781810151838201526020016103dc565b50505050905090810190601f1680156104215780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161043b57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220d5726607294518af854f553d9dd62fed8ec7c09b7b41857cecce7e82c387068064736f6c634300060c0033\",\n  \"deployedBytecode\": \"0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063fc57d4df14610030575b600080fd5b6100566004803603602081101561004657600080fd5b50356001600160a01b0316610068565b60408051918252519081900360200190f35b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156100a457600080fd5b505afa1580156100b8573d6000803e3d6000fd5b505050506040513d60208110156100ce57600080fd5b505160408051637e062a3560e11b815290519192506000916001600160a01b0384169163fc0c546a916004808301926020929190829003018186803b15801561011657600080fd5b505afa15801561012a573d6000803e3d6000fd5b505050506040513d602081101561014057600080fd5b50519050600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b038316146101e157604080516315d5220f60e31b81526001600160a01b03841660048201529051339163aea91078916024808301926020929190829003018186803b1580156101b057600080fd5b505afa1580156101c4573d6000803e3d6000fd5b505050506040513d60208110156101da57600080fd5b50516101eb565b670de0b6b3a76400005b90506000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561022857600080fd5b505afa15801561023c573d6000803e3d6000fd5b505050506040513d602081101561025257600080fd5b810190808051906020019092919050505060ff16600a0a90506102fa816102ee670de0b6b3a76400006102f4856102ee888b6001600160a01b03166399530b066040518163ffffffff1660e01b815260040160206040518083038186803b1580156102bc57600080fd5b505afa1580156102d0573d6000803e3d6000fd5b505050506040513d60208110156102e657600080fd5b505190610304565b90610366565b90610304565b9695505050505050565b60008261031357506000610360565b8282028284828161032057fe5b041461035d5760405162461bcd60e51b81526004018080602001828103825260218152602001806104466021913960400191505060405180910390fd5b90505b92915050565b600061035d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361042f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156103f45781810151838201526020016103dc565b50505050905090810190601f1680156104215780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161043b57fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220d5726607294518af854f553d9dd62fed8ec7c09b7b41857cecce7e82c387068064736f6c634300060c0033\",\n  \"immutableReferences\": {},\n  \"sourceMap\": \"830:1151:44:-:0;;;;;;;;;;;;;;;;;;;\",\n  \"deployedSourceMap\": \"830:1151:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1044:934;;;;;;;;;;;;;;;;-1:-1:-1;1044:934:44;-1:-1:-1;;;;;1044:934:44;;:::i;:::-;;;;;;;;;;;;;;;;;1119:7;1188:15;1230:6;-1:-1:-1;;;;;1215:34:44;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1215:36:44;1289:14;;;-1:-1:-1;;;1289:14:44;;;;1215:36;;-1:-1:-1;1263:23:44;;-1:-1:-1;;;;;1289:12:44;;;;;:14;;;;;1215:36;;1289:14;;;;;;;:12;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1289:14:44;;-1:-1:-1;1314:20:44;1356:42;-1:-1:-1;;;;;1337:61:44;;;:121;;1408:50;;;-1:-1:-1;;;1408:50:44;;-1:-1:-1;;;;;1408:50:44;;;;;;;;1424:10;;1408:33;;:50;;;;;;;;;;;;;;1424:10;1408:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1408:50:44;1337:121;;;1401:4;1337:121;1314:144;;1820:16;1853:6;-1:-1:-1;;;;;1853:15:44;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1845:26;;1839:2;:32;1820:51;;1889:81;1961:8;1889:67;1951:4;1889:57;1937:8;1889:43;1916:15;1889:6;-1:-1:-1;;;;;1889:20:44;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1889:22:44;;:26;:43::i;:::-;:47;;:57::i;:::-;:61;;:67::i;:81::-;1882:88;1044:934;-1:-1:-1;;;;;;1044:934:44:o;2199:459:47:-;2257:7;2498:6;2494:45;;-1:-1:-1;2527:1:47;2520:8;;2494:45;2561:5;;;2565:1;2561;:5;:1;2584:5;;;;;:10;2576:56;;;;-1:-1:-1;;;2576:56:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2650:1;-1:-1:-1;2199:459:47;;;;;:::o;3120:130::-;3178:7;3204:39;3208:1;3211;3204:39;;;;;;;;;;;;;;;;;3818:7;3852:12;3845:5;3837:28;;;;-1:-1:-1;;;3837:28:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3875:9;3891:1;3887;:5;;;;;;;3732:272;-1:-1:-1;;;;;3732:272:47:o\",\n  \"source\": \"/**\\r\\n * COPYRIGHT © 2020 RARI CAPITAL, INC. ALL RIGHTS RESERVED.\\r\\n * No one is permitted to use the software for any purpose without the explicit permission of David Lucid of Rari Capital, Inc.\\r\\n * This license is liable to change at any time at the sole discretion of David Lucid of Rari Capital, Inc.\\r\\n */\\r\\n\\r\\npragma solidity 0.6.12;\\r\\n\\r\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\r\\n\\r\\nimport \\\"../external/compound/PriceOracle.sol\\\";\\r\\nimport \\\"../external/compound/CErc20.sol\\\";\\r\\n\\r\\nimport \\\"../external/yearn/IVaultV2.sol\\\";\\r\\n\\r\\nimport \\\"./BasePriceOracle.sol\\\";\\r\\n\\r\\n/**\\r\\n * @title YVaultV2PriceOracle\\r\\n * @notice Returns prices for yVaults using the sender as a root oracle.\\r\\n * @dev Implements the `PriceOracle` interface.\\r\\n * @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\\r\\n */\\r\\ncontract YVaultV2PriceOracle is PriceOracle {\\r\\n    using SafeMathUpgradeable for uint256;\\r\\n\\r\\n    /**\\r\\n     * @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\\r\\n     */\\r\\n    function getUnderlyingPrice(CToken cToken) external override view returns (uint256) {\\r\\n        // Get price of token underlying yVault\\r\\n        IVaultV2 yVault = IVaultV2(CErc20(address(cToken)).underlying());\\r\\n        address underlyingToken = yVault.token();\\r\\n        uint underlyingPrice = underlyingToken == 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 ? 1e18 : BasePriceOracle(msg.sender).price(underlyingToken);\\r\\n\\r\\n        // yVault/ETH = yVault/token * token/ETH\\r\\n        // Return value = yVault/ETH scaled by 1e(36 - yVault decimals)\\r\\n        // `pricePerShare` = yVault/token scaled by 1e(yVault decimals)\\r\\n        // `underlyingPrice` = token/ETH scaled by 1e18\\r\\n        // Return value = `pricePerShare` * `underlyingPrice` * 1e(18 - (yVault decimals * 2))\\r\\n        uint256 baseUnit = 10 ** uint256(yVault.decimals());\\r\\n        return yVault.pricePerShare().mul(underlyingPrice).div(baseUnit).mul(1e18).div(baseUnit);\\r\\n    }\\r\\n}\\r\\n\",\n  \"sourcePath\": \"C:/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV2PriceOracle.sol\",\n  \"ast\": {\n    \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV2PriceOracle.sol\",\n    \"exportedSymbols\": {\n      \"YVaultV2PriceOracle\": [10561]\n    },\n    \"id\": 10562,\n    \"license\": null,\n    \"nodeType\": \"SourceUnit\",\n    \"nodes\": [\n      {\n        \"id\": 10478,\n        \"literals\": [\"solidity\", \"0.6\", \".12\"],\n        \"nodeType\": \"PragmaDirective\",\n        \"src\": \"312:23:44\"\n      },\n      {\n        \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n        \"id\": 10479,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10562,\n        \"sourceUnit\": 10933,\n        \"src\": \"339:74:44\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n        \"file\": \"../external/compound/PriceOracle.sol\",\n        \"id\": 10480,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10562,\n        \"sourceUnit\": 6024,\n        \"src\": \"417:46:44\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n        \"file\": \"../external/compound/CErc20.sol\",\n        \"id\": 10481,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10562,\n        \"sourceUnit\": 5724,\n        \"src\": \"465:41:44\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/yearn/IVaultV2.sol\",\n        \"file\": \"../external/yearn/IVaultV2.sol\",\n        \"id\": 10482,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10562,\n        \"sourceUnit\": 7295,\n        \"src\": \"510:40:44\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n        \"file\": \"./BasePriceOracle.sol\",\n        \"id\": 10483,\n        \"nodeType\": \"ImportDirective\",\n        \"scope\": 10562,\n        \"sourceUnit\": 7739,\n        \"src\": \"554:31:44\",\n        \"symbolAliases\": [],\n        \"unitAlias\": \"\"\n      },\n      {\n        \"abstract\": false,\n        \"baseContracts\": [\n          {\n            \"arguments\": null,\n            \"baseName\": {\n              \"contractScope\": null,\n              \"id\": 10485,\n              \"name\": \"PriceOracle\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 6023,\n              \"src\": \"862:11:44\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_PriceOracle_$6023\",\n                \"typeString\": \"contract PriceOracle\"\n              }\n            },\n            \"id\": 10486,\n            \"nodeType\": \"InheritanceSpecifier\",\n            \"src\": \"862:11:44\"\n          }\n        ],\n        \"contractDependencies\": [6023],\n        \"contractKind\": \"contract\",\n        \"documentation\": {\n          \"id\": 10484,\n          \"nodeType\": \"StructuredDocumentation\",\n          \"src\": \"589:239:44\",\n          \"text\": \" @title YVaultV2PriceOracle\\n @notice Returns prices for yVaults using the sender as a root oracle.\\n @dev Implements the `PriceOracle` interface.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n        },\n        \"fullyImplemented\": true,\n        \"id\": 10561,\n        \"linearizedBaseContracts\": [10561, 6023],\n        \"name\": \"YVaultV2PriceOracle\",\n        \"nodeType\": \"ContractDefinition\",\n        \"nodes\": [\n          {\n            \"id\": 10489,\n            \"libraryName\": {\n              \"contractScope\": null,\n              \"id\": 10487,\n              \"name\": \"SafeMathUpgradeable\",\n              \"nodeType\": \"UserDefinedTypeName\",\n              \"referencedDeclaration\": 10932,\n              \"src\": \"887:19:44\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_contract$_SafeMathUpgradeable_$10932\",\n                \"typeString\": \"library SafeMathUpgradeable\"\n              }\n            },\n            \"nodeType\": \"UsingForDirective\",\n            \"src\": \"881:38:44\",\n            \"typeName\": {\n              \"id\": 10488,\n              \"name\": \"uint256\",\n              \"nodeType\": \"ElementaryTypeName\",\n              \"src\": \"911:7:44\",\n              \"typeDescriptions\": {\n                \"typeIdentifier\": \"t_uint256\",\n                \"typeString\": \"uint256\"\n              }\n            }\n          },\n          {\n            \"baseFunctions\": [6022],\n            \"body\": {\n              \"id\": 10559,\n              \"nodeType\": \"Block\",\n              \"src\": \"1128:850:44\",\n              \"statements\": [\n                {\n                  \"assignments\": [10499],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10499,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"yVault\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10559,\n                      \"src\": \"1188:15:44\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_contract$_IVaultV2_$7294\",\n                        \"typeString\": \"contract IVaultV2\"\n                      },\n                      \"typeName\": {\n                        \"contractScope\": null,\n                        \"id\": 10498,\n                        \"name\": \"IVaultV2\",\n                        \"nodeType\": \"UserDefinedTypeName\",\n                        \"referencedDeclaration\": 7294,\n                        \"src\": \"1188:8:44\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IVaultV2_$7294\",\n                          \"typeString\": \"contract IVaultV2\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10510,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"arguments\": [],\n                        \"expression\": {\n                          \"argumentTypes\": [],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 10504,\n                                    \"name\": \"cToken\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 10492,\n                                    \"src\": \"1230:6:44\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                      \"typeString\": \"contract CToken\"\n                                    }\n                                  ],\n                                  \"id\": 10503,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"nodeType\": \"ElementaryTypeNameExpression\",\n                                  \"src\": \"1222:7:44\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_type$_t_address_$\",\n                                    \"typeString\": \"type(address)\"\n                                  },\n                                  \"typeName\": {\n                                    \"id\": 10502,\n                                    \"name\": \"address\",\n                                    \"nodeType\": \"ElementaryTypeName\",\n                                    \"src\": \"1222:7:44\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": null,\n                                      \"typeString\": null\n                                    }\n                                  }\n                                },\n                                \"id\": 10505,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"typeConversion\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"1222:15:44\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"id\": 10501,\n                              \"name\": \"CErc20\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 5723,\n                              \"src\": \"1215:6:44\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_type$_t_contract$_CErc20_$5723_$\",\n                                \"typeString\": \"type(contract CErc20)\"\n                              }\n                            },\n                            \"id\": 10506,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"typeConversion\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1215:23:44\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_contract$_CErc20_$5723\",\n                              \"typeString\": \"contract CErc20\"\n                            }\n                          },\n                          \"id\": 10507,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"underlying\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 5711,\n                          \"src\": \"1215:34:44\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                            \"typeString\": \"function () view external returns (address)\"\n                          }\n                        },\n                        \"id\": 10508,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1215:36:44\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      ],\n                      \"id\": 10500,\n                      \"name\": \"IVaultV2\",\n                      \"nodeType\": \"Identifier\",\n                      \"overloadedDeclarations\": [],\n                      \"referencedDeclaration\": 7294,\n                      \"src\": \"1206:8:44\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_type$_t_contract$_IVaultV2_$7294_$\",\n                        \"typeString\": \"type(contract IVaultV2)\"\n                      }\n                    },\n                    \"id\": 10509,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"typeConversion\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1206:46:44\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_IVaultV2_$7294\",\n                      \"typeString\": \"contract IVaultV2\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1188:64:44\"\n                },\n                {\n                  \"assignments\": [10512],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10512,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlyingToken\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10559,\n                      \"src\": \"1263:23:44\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10511,\n                        \"name\": \"address\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1263:7:44\",\n                        \"stateMutability\": \"nonpayable\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10516,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [],\n                    \"expression\": {\n                      \"argumentTypes\": [],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10513,\n                        \"name\": \"yVault\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10499,\n                        \"src\": \"1289:6:44\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_contract$_IVaultV2_$7294\",\n                          \"typeString\": \"contract IVaultV2\"\n                        }\n                      },\n                      \"id\": 10514,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"token\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 7288,\n                      \"src\": \"1289:12:44\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n                        \"typeString\": \"function () view external returns (address)\"\n                      }\n                    },\n                    \"id\": 10515,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1289:14:44\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_address\",\n                      \"typeString\": \"address\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1263:40:44\"\n                },\n                {\n                  \"assignments\": [10518],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10518,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"underlyingPrice\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10559,\n                      \"src\": \"1314:20:44\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10517,\n                        \"name\": \"uint\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1314:4:44\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10531,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"condition\": {\n                      \"argumentTypes\": null,\n                      \"commonType\": {\n                        \"typeIdentifier\": \"t_address\",\n                        \"typeString\": \"address\"\n                      },\n                      \"id\": 10521,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"leftExpression\": {\n                        \"argumentTypes\": null,\n                        \"id\": 10519,\n                        \"name\": \"underlyingToken\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10512,\n                        \"src\": \"1337:15:44\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address\",\n                          \"typeString\": \"address\"\n                        }\n                      },\n                      \"nodeType\": \"BinaryOperation\",\n                      \"operator\": \"==\",\n                      \"rightExpression\": {\n                        \"argumentTypes\": null,\n                        \"hexValue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                        \"id\": 10520,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"kind\": \"number\",\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"Literal\",\n                        \"src\": \"1356:42:44\",\n                        \"subdenomination\": null,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_address_payable\",\n                          \"typeString\": \"address payable\"\n                        },\n                        \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                      },\n                      \"src\": \"1337:61:44\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_bool\",\n                        \"typeString\": \"bool\"\n                      }\n                    },\n                    \"falseExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"id\": 10528,\n                          \"name\": \"underlyingToken\",\n                          \"nodeType\": \"Identifier\",\n                          \"overloadedDeclarations\": [],\n                          \"referencedDeclaration\": 10512,\n                          \"src\": \"1442:15:44\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_address\",\n                            \"typeString\": \"address\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [\n                            {\n                              \"argumentTypes\": null,\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"id\": 10524,\n                                \"name\": \"msg\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": -15,\n                                \"src\": \"1424:3:44\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_magic_message\",\n                                  \"typeString\": \"msg\"\n                                }\n                              },\n                              \"id\": 10525,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"sender\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": null,\n                              \"src\": \"1424:10:44\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              }\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": [\n                              {\n                                \"typeIdentifier\": \"t_address_payable\",\n                                \"typeString\": \"address payable\"\n                              }\n                            ],\n                            \"id\": 10523,\n                            \"name\": \"BasePriceOracle\",\n                            \"nodeType\": \"Identifier\",\n                            \"overloadedDeclarations\": [],\n                            \"referencedDeclaration\": 7738,\n                            \"src\": \"1408:15:44\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_type$_t_contract$_BasePriceOracle_$7738_$\",\n                              \"typeString\": \"type(contract BasePriceOracle)\"\n                            }\n                          },\n                          \"id\": 10526,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"typeConversion\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1408:27:44\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_contract$_BasePriceOracle_$7738\",\n                            \"typeString\": \"contract BasePriceOracle\"\n                          }\n                        },\n                        \"id\": 10527,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"lValueRequested\": false,\n                        \"memberName\": \"price\",\n                        \"nodeType\": \"MemberAccess\",\n                        \"referencedDeclaration\": 7737,\n                        \"src\": \"1408:33:44\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_function_external_view$_t_address_$returns$_t_uint256_$\",\n                          \"typeString\": \"function (address) view external returns (uint256)\"\n                        }\n                      },\n                      \"id\": 10529,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"functionCall\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1408:50:44\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"id\": 10530,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"nodeType\": \"Conditional\",\n                    \"src\": \"1337:121:44\",\n                    \"trueExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"31653138\",\n                      \"id\": 10522,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1401:4:44\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                        \"typeString\": \"int_const 1000000000000000000\"\n                      },\n                      \"value\": \"1e18\"\n                    },\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1314:144:44\"\n                },\n                {\n                  \"assignments\": [10533],\n                  \"declarations\": [\n                    {\n                      \"constant\": false,\n                      \"id\": 10533,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"baseUnit\",\n                      \"nodeType\": \"VariableDeclaration\",\n                      \"overrides\": null,\n                      \"scope\": 10559,\n                      \"src\": \"1820:16:44\",\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      },\n                      \"typeName\": {\n                        \"id\": 10532,\n                        \"name\": \"uint256\",\n                        \"nodeType\": \"ElementaryTypeName\",\n                        \"src\": \"1820:7:44\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    }\n                  ],\n                  \"id\": 10542,\n                  \"initialValue\": {\n                    \"argumentTypes\": null,\n                    \"commonType\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    },\n                    \"id\": 10541,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"lValueRequested\": false,\n                    \"leftExpression\": {\n                      \"argumentTypes\": null,\n                      \"hexValue\": \"3130\",\n                      \"id\": 10534,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": true,\n                      \"kind\": \"number\",\n                      \"lValueRequested\": false,\n                      \"nodeType\": \"Literal\",\n                      \"src\": \"1839:2:44\",\n                      \"subdenomination\": null,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_rational_10_by_1\",\n                        \"typeString\": \"int_const 10\"\n                      },\n                      \"value\": \"10\"\n                    },\n                    \"nodeType\": \"BinaryOperation\",\n                    \"operator\": \"**\",\n                    \"rightExpression\": {\n                      \"argumentTypes\": null,\n                      \"arguments\": [\n                        {\n                          \"argumentTypes\": null,\n                          \"arguments\": [],\n                          \"expression\": {\n                            \"argumentTypes\": [],\n                            \"expression\": {\n                              \"argumentTypes\": null,\n                              \"id\": 10537,\n                              \"name\": \"yVault\",\n                              \"nodeType\": \"Identifier\",\n                              \"overloadedDeclarations\": [],\n                              \"referencedDeclaration\": 10499,\n                              \"src\": \"1853:6:44\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_contract$_IVaultV2_$7294\",\n                                \"typeString\": \"contract IVaultV2\"\n                              }\n                            },\n                            \"id\": 10538,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"lValueRequested\": false,\n                            \"memberName\": \"decimals\",\n                            \"nodeType\": \"MemberAccess\",\n                            \"referencedDeclaration\": 7293,\n                            \"src\": \"1853:15:44\",\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint8_$\",\n                              \"typeString\": \"function () view external returns (uint8)\"\n                            }\n                          },\n                          \"id\": 10539,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"kind\": \"functionCall\",\n                          \"lValueRequested\": false,\n                          \"names\": [],\n                          \"nodeType\": \"FunctionCall\",\n                          \"src\": \"1853:17:44\",\n                          \"tryCall\": false,\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": [\n                          {\n                            \"typeIdentifier\": \"t_uint8\",\n                            \"typeString\": \"uint8\"\n                          }\n                        ],\n                        \"id\": 10536,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": true,\n                        \"lValueRequested\": false,\n                        \"nodeType\": \"ElementaryTypeNameExpression\",\n                        \"src\": \"1845:7:44\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_type$_t_uint256_$\",\n                          \"typeString\": \"type(uint256)\"\n                        },\n                        \"typeName\": {\n                          \"id\": 10535,\n                          \"name\": \"uint256\",\n                          \"nodeType\": \"ElementaryTypeName\",\n                          \"src\": \"1845:7:44\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": null,\n                            \"typeString\": null\n                          }\n                        }\n                      },\n                      \"id\": 10540,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"kind\": \"typeConversion\",\n                      \"lValueRequested\": false,\n                      \"names\": [],\n                      \"nodeType\": \"FunctionCall\",\n                      \"src\": \"1845:26:44\",\n                      \"tryCall\": false,\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_uint256\",\n                        \"typeString\": \"uint256\"\n                      }\n                    },\n                    \"src\": \"1839:32:44\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"nodeType\": \"VariableDeclarationStatement\",\n                  \"src\": \"1820:51:44\"\n                },\n                {\n                  \"expression\": {\n                    \"argumentTypes\": null,\n                    \"arguments\": [\n                      {\n                        \"argumentTypes\": null,\n                        \"id\": 10556,\n                        \"name\": \"baseUnit\",\n                        \"nodeType\": \"Identifier\",\n                        \"overloadedDeclarations\": [],\n                        \"referencedDeclaration\": 10533,\n                        \"src\": \"1961:8:44\",\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      }\n                    ],\n                    \"expression\": {\n                      \"argumentTypes\": [\n                        {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      ],\n                      \"expression\": {\n                        \"argumentTypes\": null,\n                        \"arguments\": [\n                          {\n                            \"argumentTypes\": null,\n                            \"hexValue\": \"31653138\",\n                            \"id\": 10553,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": true,\n                            \"kind\": \"number\",\n                            \"lValueRequested\": false,\n                            \"nodeType\": \"Literal\",\n                            \"src\": \"1951:4:44\",\n                            \"subdenomination\": null,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            },\n                            \"value\": \"1e18\"\n                          }\n                        ],\n                        \"expression\": {\n                          \"argumentTypes\": [\n                            {\n                              \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                              \"typeString\": \"int_const 1000000000000000000\"\n                            }\n                          ],\n                          \"expression\": {\n                            \"argumentTypes\": null,\n                            \"arguments\": [\n                              {\n                                \"argumentTypes\": null,\n                                \"id\": 10550,\n                                \"name\": \"baseUnit\",\n                                \"nodeType\": \"Identifier\",\n                                \"overloadedDeclarations\": [],\n                                \"referencedDeclaration\": 10533,\n                                \"src\": \"1937:8:44\",\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              }\n                            ],\n                            \"expression\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"expression\": {\n                                \"argumentTypes\": null,\n                                \"arguments\": [\n                                  {\n                                    \"argumentTypes\": null,\n                                    \"id\": 10547,\n                                    \"name\": \"underlyingPrice\",\n                                    \"nodeType\": \"Identifier\",\n                                    \"overloadedDeclarations\": [],\n                                    \"referencedDeclaration\": 10518,\n                                    \"src\": \"1916:15:44\",\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  }\n                                ],\n                                \"expression\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  ],\n                                  \"expression\": {\n                                    \"argumentTypes\": null,\n                                    \"arguments\": [],\n                                    \"expression\": {\n                                      \"argumentTypes\": [],\n                                      \"expression\": {\n                                        \"argumentTypes\": null,\n                                        \"id\": 10543,\n                                        \"name\": \"yVault\",\n                                        \"nodeType\": \"Identifier\",\n                                        \"overloadedDeclarations\": [],\n                                        \"referencedDeclaration\": 10499,\n                                        \"src\": \"1889:6:44\",\n                                        \"typeDescriptions\": {\n                                          \"typeIdentifier\": \"t_contract$_IVaultV2_$7294\",\n                                          \"typeString\": \"contract IVaultV2\"\n                                        }\n                                      },\n                                      \"id\": 10544,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"memberName\": \"pricePerShare\",\n                                      \"nodeType\": \"MemberAccess\",\n                                      \"referencedDeclaration\": 7283,\n                                      \"src\": \"1889:20:44\",\n                                      \"typeDescriptions\": {\n                                        \"typeIdentifier\": \"t_function_external_view$__$returns$_t_uint256_$\",\n                                        \"typeString\": \"function () view external returns (uint256)\"\n                                      }\n                                    },\n                                    \"id\": 10545,\n                                    \"isConstant\": false,\n                                    \"isLValue\": false,\n                                    \"isPure\": false,\n                                    \"kind\": \"functionCall\",\n                                    \"lValueRequested\": false,\n                                    \"names\": [],\n                                    \"nodeType\": \"FunctionCall\",\n                                    \"src\": \"1889:22:44\",\n                                    \"tryCall\": false,\n                                    \"typeDescriptions\": {\n                                      \"typeIdentifier\": \"t_uint256\",\n                                      \"typeString\": \"uint256\"\n                                    }\n                                  },\n                                  \"id\": 10546,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"memberName\": \"mul\",\n                                  \"nodeType\": \"MemberAccess\",\n                                  \"referencedDeclaration\": 10845,\n                                  \"src\": \"1889:26:44\",\n                                  \"typeDescriptions\": {\n                                    \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                    \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                                  }\n                                },\n                                \"id\": 10548,\n                                \"isConstant\": false,\n                                \"isLValue\": false,\n                                \"isPure\": false,\n                                \"kind\": \"functionCall\",\n                                \"lValueRequested\": false,\n                                \"names\": [],\n                                \"nodeType\": \"FunctionCall\",\n                                \"src\": \"1889:43:44\",\n                                \"tryCall\": false,\n                                \"typeDescriptions\": {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              },\n                              \"id\": 10549,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"memberName\": \"div\",\n                              \"nodeType\": \"MemberAccess\",\n                              \"referencedDeclaration\": 10862,\n                              \"src\": \"1889:47:44\",\n                              \"typeDescriptions\": {\n                                \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                                \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                              }\n                            },\n                            \"id\": 10551,\n                            \"isConstant\": false,\n                            \"isLValue\": false,\n                            \"isPure\": false,\n                            \"kind\": \"functionCall\",\n                            \"lValueRequested\": false,\n                            \"names\": [],\n                            \"nodeType\": \"FunctionCall\",\n                            \"src\": \"1889:57:44\",\n                            \"tryCall\": false,\n                            \"typeDescriptions\": {\n                              \"typeIdentifier\": \"t_uint256\",\n                              \"typeString\": \"uint256\"\n                            }\n                          },\n                          \"id\": 10552,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"memberName\": \"mul\",\n                          \"nodeType\": \"MemberAccess\",\n                          \"referencedDeclaration\": 10845,\n                          \"src\": \"1889:61:44\",\n                          \"typeDescriptions\": {\n                            \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                            \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                          }\n                        },\n                        \"id\": 10554,\n                        \"isConstant\": false,\n                        \"isLValue\": false,\n                        \"isPure\": false,\n                        \"kind\": \"functionCall\",\n                        \"lValueRequested\": false,\n                        \"names\": [],\n                        \"nodeType\": \"FunctionCall\",\n                        \"src\": \"1889:67:44\",\n                        \"tryCall\": false,\n                        \"typeDescriptions\": {\n                          \"typeIdentifier\": \"t_uint256\",\n                          \"typeString\": \"uint256\"\n                        }\n                      },\n                      \"id\": 10555,\n                      \"isConstant\": false,\n                      \"isLValue\": false,\n                      \"isPure\": false,\n                      \"lValueRequested\": false,\n                      \"memberName\": \"div\",\n                      \"nodeType\": \"MemberAccess\",\n                      \"referencedDeclaration\": 10862,\n                      \"src\": \"1889:71:44\",\n                      \"typeDescriptions\": {\n                        \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$\",\n                        \"typeString\": \"function (uint256,uint256) pure returns (uint256)\"\n                      }\n                    },\n                    \"id\": 10557,\n                    \"isConstant\": false,\n                    \"isLValue\": false,\n                    \"isPure\": false,\n                    \"kind\": \"functionCall\",\n                    \"lValueRequested\": false,\n                    \"names\": [],\n                    \"nodeType\": \"FunctionCall\",\n                    \"src\": \"1889:81:44\",\n                    \"tryCall\": false,\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"functionReturnParameters\": 10497,\n                  \"id\": 10558,\n                  \"nodeType\": \"Return\",\n                  \"src\": \"1882:88:44\"\n                }\n              ]\n            },\n            \"documentation\": {\n              \"id\": 10490,\n              \"nodeType\": \"StructuredDocumentation\",\n              \"src\": \"927:111:44\",\n              \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n            },\n            \"functionSelector\": \"fc57d4df\",\n            \"id\": 10560,\n            \"implemented\": true,\n            \"kind\": \"function\",\n            \"modifiers\": [],\n            \"name\": \"getUnderlyingPrice\",\n            \"nodeType\": \"FunctionDefinition\",\n            \"overrides\": {\n              \"id\": 10494,\n              \"nodeType\": \"OverrideSpecifier\",\n              \"overrides\": [],\n              \"src\": \"1096:8:44\"\n            },\n            \"parameters\": {\n              \"id\": 10493,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10492,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"cToken\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10560,\n                  \"src\": \"1072:13:44\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                    \"typeString\": \"contract CToken\"\n                  },\n                  \"typeName\": {\n                    \"contractScope\": null,\n                    \"id\": 10491,\n                    \"name\": \"CToken\",\n                    \"nodeType\": \"UserDefinedTypeName\",\n                    \"referencedDeclaration\": 5866,\n                    \"src\": \"1072:6:44\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                      \"typeString\": \"contract CToken\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1071:15:44\"\n            },\n            \"returnParameters\": {\n              \"id\": 10497,\n              \"nodeType\": \"ParameterList\",\n              \"parameters\": [\n                {\n                  \"constant\": false,\n                  \"id\": 10496,\n                  \"mutability\": \"mutable\",\n                  \"name\": \"\",\n                  \"nodeType\": \"VariableDeclaration\",\n                  \"overrides\": null,\n                  \"scope\": 10560,\n                  \"src\": \"1119:7:44\",\n                  \"stateVariable\": false,\n                  \"storageLocation\": \"default\",\n                  \"typeDescriptions\": {\n                    \"typeIdentifier\": \"t_uint256\",\n                    \"typeString\": \"uint256\"\n                  },\n                  \"typeName\": {\n                    \"id\": 10495,\n                    \"name\": \"uint256\",\n                    \"nodeType\": \"ElementaryTypeName\",\n                    \"src\": \"1119:7:44\",\n                    \"typeDescriptions\": {\n                      \"typeIdentifier\": \"t_uint256\",\n                      \"typeString\": \"uint256\"\n                    }\n                  },\n                  \"value\": null,\n                  \"visibility\": \"internal\"\n                }\n              ],\n              \"src\": \"1118:9:44\"\n            },\n            \"scope\": 10561,\n            \"src\": \"1044:934:44\",\n            \"stateMutability\": \"view\",\n            \"virtual\": false,\n            \"visibility\": \"external\"\n          }\n        ],\n        \"scope\": 10562,\n        \"src\": \"830:1151:44\"\n      }\n    ],\n    \"src\": \"312:1671:44\"\n  },\n  \"legacyAST\": {\n    \"attributes\": {\n      \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/YVaultV2PriceOracle.sol\",\n      \"exportedSymbols\": {\n        \"YVaultV2PriceOracle\": [10561]\n      },\n      \"license\": null\n    },\n    \"children\": [\n      {\n        \"attributes\": {\n          \"literals\": [\"solidity\", \"0.6\", \".12\"]\n        },\n        \"id\": 10478,\n        \"name\": \"PragmaDirective\",\n        \"src\": \"312:23:44\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 10933,\n          \"absolutePath\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"file\": \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\",\n          \"scope\": 10562,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10479,\n        \"name\": \"ImportDirective\",\n        \"src\": \"339:74:44\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 6024,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/PriceOracle.sol\",\n          \"file\": \"../external/compound/PriceOracle.sol\",\n          \"scope\": 10562,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10480,\n        \"name\": \"ImportDirective\",\n        \"src\": \"417:46:44\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 5724,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/compound/CErc20.sol\",\n          \"file\": \"../external/compound/CErc20.sol\",\n          \"scope\": 10562,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10481,\n        \"name\": \"ImportDirective\",\n        \"src\": \"465:41:44\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 7295,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/external/yearn/IVaultV2.sol\",\n          \"file\": \"../external/yearn/IVaultV2.sol\",\n          \"scope\": 10562,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10482,\n        \"name\": \"ImportDirective\",\n        \"src\": \"510:40:44\"\n      },\n      {\n        \"attributes\": {\n          \"SourceUnit\": 7739,\n          \"absolutePath\": \"/C/Users/david/Dropbox/Rari/v1/fuse-contracts/contracts/oracles/BasePriceOracle.sol\",\n          \"file\": \"./BasePriceOracle.sol\",\n          \"scope\": 10562,\n          \"symbolAliases\": [null],\n          \"unitAlias\": \"\"\n        },\n        \"id\": 10483,\n        \"name\": \"ImportDirective\",\n        \"src\": \"554:31:44\"\n      },\n      {\n        \"attributes\": {\n          \"abstract\": false,\n          \"contractDependencies\": [6023],\n          \"contractKind\": \"contract\",\n          \"fullyImplemented\": true,\n          \"linearizedBaseContracts\": [10561, 6023],\n          \"name\": \"YVaultV2PriceOracle\",\n          \"scope\": 10562\n        },\n        \"children\": [\n          {\n            \"attributes\": {\n              \"text\": \" @title YVaultV2PriceOracle\\n @notice Returns prices for yVaults using the sender as a root oracle.\\n @dev Implements the `PriceOracle` interface.\\n @author David Lucid <david@rari.capital> (https://github.com/davidlucid)\"\n            },\n            \"id\": 10484,\n            \"name\": \"StructuredDocumentation\",\n            \"src\": \"589:239:44\"\n          },\n          {\n            \"attributes\": {\n              \"arguments\": null\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"PriceOracle\",\n                  \"referencedDeclaration\": 6023,\n                  \"type\": \"contract PriceOracle\"\n                },\n                \"id\": 10485,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"862:11:44\"\n              }\n            ],\n            \"id\": 10486,\n            \"name\": \"InheritanceSpecifier\",\n            \"src\": \"862:11:44\"\n          },\n          {\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"contractScope\": null,\n                  \"name\": \"SafeMathUpgradeable\",\n                  \"referencedDeclaration\": 10932,\n                  \"type\": \"library SafeMathUpgradeable\"\n                },\n                \"id\": 10487,\n                \"name\": \"UserDefinedTypeName\",\n                \"src\": \"887:19:44\"\n              },\n              {\n                \"attributes\": {\n                  \"name\": \"uint256\",\n                  \"type\": \"uint256\"\n                },\n                \"id\": 10488,\n                \"name\": \"ElementaryTypeName\",\n                \"src\": \"911:7:44\"\n              }\n            ],\n            \"id\": 10489,\n            \"name\": \"UsingForDirective\",\n            \"src\": \"881:38:44\"\n          },\n          {\n            \"attributes\": {\n              \"baseFunctions\": [6022],\n              \"functionSelector\": \"fc57d4df\",\n              \"implemented\": true,\n              \"isConstructor\": false,\n              \"kind\": \"function\",\n              \"modifiers\": [null],\n              \"name\": \"getUnderlyingPrice\",\n              \"scope\": 10561,\n              \"stateMutability\": \"view\",\n              \"virtual\": false,\n              \"visibility\": \"external\"\n            },\n            \"children\": [\n              {\n                \"attributes\": {\n                  \"text\": \" @dev Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n                },\n                \"id\": 10490,\n                \"name\": \"StructuredDocumentation\",\n                \"src\": \"927:111:44\"\n              },\n              {\n                \"attributes\": {\n                  \"overrides\": [null]\n                },\n                \"id\": 10494,\n                \"name\": \"OverrideSpecifier\",\n                \"src\": \"1096:8:44\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"cToken\",\n                      \"overrides\": null,\n                      \"scope\": 10560,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"contract CToken\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"contractScope\": null,\n                          \"name\": \"CToken\",\n                          \"referencedDeclaration\": 5866,\n                          \"type\": \"contract CToken\"\n                        },\n                        \"id\": 10491,\n                        \"name\": \"UserDefinedTypeName\",\n                        \"src\": \"1072:6:44\"\n                      }\n                    ],\n                    \"id\": 10492,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1072:13:44\"\n                  }\n                ],\n                \"id\": 10493,\n                \"name\": \"ParameterList\",\n                \"src\": \"1071:15:44\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"constant\": false,\n                      \"mutability\": \"mutable\",\n                      \"name\": \"\",\n                      \"overrides\": null,\n                      \"scope\": 10560,\n                      \"stateVariable\": false,\n                      \"storageLocation\": \"default\",\n                      \"type\": \"uint256\",\n                      \"value\": null,\n                      \"visibility\": \"internal\"\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"name\": \"uint256\",\n                          \"type\": \"uint256\"\n                        },\n                        \"id\": 10495,\n                        \"name\": \"ElementaryTypeName\",\n                        \"src\": \"1119:7:44\"\n                      }\n                    ],\n                    \"id\": 10496,\n                    \"name\": \"VariableDeclaration\",\n                    \"src\": \"1119:7:44\"\n                  }\n                ],\n                \"id\": 10497,\n                \"name\": \"ParameterList\",\n                \"src\": \"1118:9:44\"\n              },\n              {\n                \"children\": [\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10499]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"yVault\",\n                          \"overrides\": null,\n                          \"scope\": 10559,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"contract IVaultV2\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"contractScope\": null,\n                              \"name\": \"IVaultV2\",\n                              \"referencedDeclaration\": 7294,\n                              \"type\": \"contract IVaultV2\"\n                            },\n                            \"id\": 10498,\n                            \"name\": \"UserDefinedTypeName\",\n                            \"src\": \"1188:8:44\"\n                          }\n                        ],\n                        \"id\": 10499,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1188:15:44\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"contract IVaultV2\",\n                          \"type_conversion\": true\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_address\",\n                                  \"typeString\": \"address\"\n                                }\n                              ],\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 7294,\n                              \"type\": \"type(contract IVaultV2)\",\n                              \"value\": \"IVaultV2\"\n                            },\n                            \"id\": 10500,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1206:8:44\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"arguments\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"address\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"underlying\",\n                                  \"referencedDeclaration\": 5711,\n                                  \"type\": \"function () view external returns (address)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract CErc20\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address\",\n                                              \"typeString\": \"address\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 5723,\n                                          \"type\": \"type(contract CErc20)\",\n                                          \"value\": \"CErc20\"\n                                        },\n                                        \"id\": 10501,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1215:6:44\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"address\",\n                                          \"type_conversion\": true\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_contract$_CToken_$5866\",\n                                                  \"typeString\": \"contract CToken\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": true,\n                                              \"lValueRequested\": false,\n                                              \"type\": \"type(address)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"name\": \"address\",\n                                                  \"type\": null\n                                                },\n                                                \"id\": 10502,\n                                                \"name\": \"ElementaryTypeName\",\n                                                \"src\": \"1222:7:44\"\n                                              }\n                                            ],\n                                            \"id\": 10503,\n                                            \"name\": \"ElementaryTypeNameExpression\",\n                                            \"src\": \"1222:7:44\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10492,\n                                              \"type\": \"contract CToken\",\n                                              \"value\": \"cToken\"\n                                            },\n                                            \"id\": 10504,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1230:6:44\"\n                                          }\n                                        ],\n                                        \"id\": 10505,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1222:15:44\"\n                                      }\n                                    ],\n                                    \"id\": 10506,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1215:23:44\"\n                                  }\n                                ],\n                                \"id\": 10507,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1215:34:44\"\n                              }\n                            ],\n                            \"id\": 10508,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1215:36:44\"\n                          }\n                        ],\n                        \"id\": 10509,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1206:46:44\"\n                      }\n                    ],\n                    \"id\": 10510,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1188:64:44\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10512]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlyingToken\",\n                          \"overrides\": null,\n                          \"scope\": 10559,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"address\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"address\",\n                              \"stateMutability\": \"nonpayable\",\n                              \"type\": \"address\"\n                            },\n                            \"id\": 10511,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1263:7:44\"\n                          }\n                        ],\n                        \"id\": 10512,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1263:23:44\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"arguments\": [null],\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"address\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [null],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"token\",\n                              \"referencedDeclaration\": 7288,\n                              \"type\": \"function () view external returns (address)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10499,\n                                  \"type\": \"contract IVaultV2\",\n                                  \"value\": \"yVault\"\n                                },\n                                \"id\": 10513,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1289:6:44\"\n                              }\n                            ],\n                            \"id\": 10514,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1289:12:44\"\n                          }\n                        ],\n                        \"id\": 10515,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1289:14:44\"\n                      }\n                    ],\n                    \"id\": 10516,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1263:40:44\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10518]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"underlyingPrice\",\n                          \"overrides\": null,\n                          \"scope\": 10559,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10517,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1314:4:44\"\n                          }\n                        ],\n                        \"id\": 10518,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1314:20:44\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"commonType\": {\n                                \"typeIdentifier\": \"t_address\",\n                                \"typeString\": \"address\"\n                              },\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"operator\": \"==\",\n                              \"type\": \"bool\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10512,\n                                  \"type\": \"address\",\n                                  \"value\": \"underlyingToken\"\n                                },\n                                \"id\": 10519,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1337:15:44\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"hexvalue\": \"307843303261614133396232323346453844304130653543344632376541443930383343373536436332\",\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"subdenomination\": null,\n                                  \"token\": \"number\",\n                                  \"type\": \"address payable\",\n                                  \"value\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\"\n                                },\n                                \"id\": 10520,\n                                \"name\": \"Literal\",\n                                \"src\": \"1356:42:44\"\n                              }\n                            ],\n                            \"id\": 10521,\n                            \"name\": \"BinaryOperation\",\n                            \"src\": \"1337:61:44\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"31653138\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 1000000000000000000\",\n                              \"value\": \"1e18\"\n                            },\n                            \"id\": 10522,\n                            \"name\": \"Literal\",\n                            \"src\": \"1401:4:44\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": false\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_address\",\n                                      \"typeString\": \"address\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"lValueRequested\": false,\n                                  \"member_name\": \"price\",\n                                  \"referencedDeclaration\": 7737,\n                                  \"type\": \"function (address) view external returns (uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"isStructConstructorCall\": false,\n                                      \"lValueRequested\": false,\n                                      \"names\": [null],\n                                      \"tryCall\": false,\n                                      \"type\": \"contract BasePriceOracle\",\n                                      \"type_conversion\": true\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": [\n                                            {\n                                              \"typeIdentifier\": \"t_address_payable\",\n                                              \"typeString\": \"address payable\"\n                                            }\n                                          ],\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 7738,\n                                          \"type\": \"type(contract BasePriceOracle)\",\n                                          \"value\": \"BasePriceOracle\"\n                                        },\n                                        \"id\": 10523,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1408:15:44\"\n                                      },\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"lValueRequested\": false,\n                                          \"member_name\": \"sender\",\n                                          \"referencedDeclaration\": null,\n                                          \"type\": \"address payable\"\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": -15,\n                                              \"type\": \"msg\",\n                                              \"value\": \"msg\"\n                                            },\n                                            \"id\": 10524,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1424:3:44\"\n                                          }\n                                        ],\n                                        \"id\": 10525,\n                                        \"name\": \"MemberAccess\",\n                                        \"src\": \"1424:10:44\"\n                                      }\n                                    ],\n                                    \"id\": 10526,\n                                    \"name\": \"FunctionCall\",\n                                    \"src\": \"1408:27:44\"\n                                  }\n                                ],\n                                \"id\": 10527,\n                                \"name\": \"MemberAccess\",\n                                \"src\": \"1408:33:44\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"overloadedDeclarations\": [null],\n                                  \"referencedDeclaration\": 10512,\n                                  \"type\": \"address\",\n                                  \"value\": \"underlyingToken\"\n                                },\n                                \"id\": 10528,\n                                \"name\": \"Identifier\",\n                                \"src\": \"1442:15:44\"\n                              }\n                            ],\n                            \"id\": 10529,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1408:50:44\"\n                          }\n                        ],\n                        \"id\": 10530,\n                        \"name\": \"Conditional\",\n                        \"src\": \"1337:121:44\"\n                      }\n                    ],\n                    \"id\": 10531,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1314:144:44\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"assignments\": [10533]\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"constant\": false,\n                          \"mutability\": \"mutable\",\n                          \"name\": \"baseUnit\",\n                          \"overrides\": null,\n                          \"scope\": 10559,\n                          \"stateVariable\": false,\n                          \"storageLocation\": \"default\",\n                          \"type\": \"uint256\",\n                          \"value\": null,\n                          \"visibility\": \"internal\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"name\": \"uint256\",\n                              \"type\": \"uint256\"\n                            },\n                            \"id\": 10532,\n                            \"name\": \"ElementaryTypeName\",\n                            \"src\": \"1820:7:44\"\n                          }\n                        ],\n                        \"id\": 10533,\n                        \"name\": \"VariableDeclaration\",\n                        \"src\": \"1820:16:44\"\n                      },\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"commonType\": {\n                            \"typeIdentifier\": \"t_uint256\",\n                            \"typeString\": \"uint256\"\n                          },\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"lValueRequested\": false,\n                          \"operator\": \"**\",\n                          \"type\": \"uint256\"\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"hexvalue\": \"3130\",\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": true,\n                              \"lValueRequested\": false,\n                              \"subdenomination\": null,\n                              \"token\": \"number\",\n                              \"type\": \"int_const 10\",\n                              \"value\": \"10\"\n                            },\n                            \"id\": 10534,\n                            \"name\": \"Literal\",\n                            \"src\": \"1839:2:44\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"isStructConstructorCall\": false,\n                              \"lValueRequested\": false,\n                              \"names\": [null],\n                              \"tryCall\": false,\n                              \"type\": \"uint256\",\n                              \"type_conversion\": true\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": [\n                                    {\n                                      \"typeIdentifier\": \"t_uint8\",\n                                      \"typeString\": \"uint8\"\n                                    }\n                                  ],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": true,\n                                  \"lValueRequested\": false,\n                                  \"type\": \"type(uint256)\"\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"name\": \"uint256\",\n                                      \"type\": null\n                                    },\n                                    \"id\": 10535,\n                                    \"name\": \"ElementaryTypeName\",\n                                    \"src\": \"1845:7:44\"\n                                  }\n                                ],\n                                \"id\": 10536,\n                                \"name\": \"ElementaryTypeNameExpression\",\n                                \"src\": \"1845:7:44\"\n                              },\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"arguments\": [null],\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint8\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [null],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"decimals\",\n                                      \"referencedDeclaration\": 7293,\n                                      \"type\": \"function () view external returns (uint8)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"overloadedDeclarations\": [null],\n                                          \"referencedDeclaration\": 10499,\n                                          \"type\": \"contract IVaultV2\",\n                                          \"value\": \"yVault\"\n                                        },\n                                        \"id\": 10537,\n                                        \"name\": \"Identifier\",\n                                        \"src\": \"1853:6:44\"\n                                      }\n                                    ],\n                                    \"id\": 10538,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1853:15:44\"\n                                  }\n                                ],\n                                \"id\": 10539,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1853:17:44\"\n                              }\n                            ],\n                            \"id\": 10540,\n                            \"name\": \"FunctionCall\",\n                            \"src\": \"1845:26:44\"\n                          }\n                        ],\n                        \"id\": 10541,\n                        \"name\": \"BinaryOperation\",\n                        \"src\": \"1839:32:44\"\n                      }\n                    ],\n                    \"id\": 10542,\n                    \"name\": \"VariableDeclarationStatement\",\n                    \"src\": \"1820:51:44\"\n                  },\n                  {\n                    \"attributes\": {\n                      \"functionReturnParameters\": 10497\n                    },\n                    \"children\": [\n                      {\n                        \"attributes\": {\n                          \"argumentTypes\": null,\n                          \"isConstant\": false,\n                          \"isLValue\": false,\n                          \"isPure\": false,\n                          \"isStructConstructorCall\": false,\n                          \"lValueRequested\": false,\n                          \"names\": [null],\n                          \"tryCall\": false,\n                          \"type\": \"uint256\",\n                          \"type_conversion\": false\n                        },\n                        \"children\": [\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": [\n                                {\n                                  \"typeIdentifier\": \"t_uint256\",\n                                  \"typeString\": \"uint256\"\n                                }\n                              ],\n                              \"isConstant\": false,\n                              \"isLValue\": false,\n                              \"isPure\": false,\n                              \"lValueRequested\": false,\n                              \"member_name\": \"div\",\n                              \"referencedDeclaration\": 10862,\n                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                            },\n                            \"children\": [\n                              {\n                                \"attributes\": {\n                                  \"argumentTypes\": null,\n                                  \"isConstant\": false,\n                                  \"isLValue\": false,\n                                  \"isPure\": false,\n                                  \"isStructConstructorCall\": false,\n                                  \"lValueRequested\": false,\n                                  \"names\": [null],\n                                  \"tryCall\": false,\n                                  \"type\": \"uint256\",\n                                  \"type_conversion\": false\n                                },\n                                \"children\": [\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": [\n                                        {\n                                          \"typeIdentifier\": \"t_rational_1000000000000000000_by_1\",\n                                          \"typeString\": \"int_const 1000000000000000000\"\n                                        }\n                                      ],\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": false,\n                                      \"lValueRequested\": false,\n                                      \"member_name\": \"mul\",\n                                      \"referencedDeclaration\": 10845,\n                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                    },\n                                    \"children\": [\n                                      {\n                                        \"attributes\": {\n                                          \"argumentTypes\": null,\n                                          \"isConstant\": false,\n                                          \"isLValue\": false,\n                                          \"isPure\": false,\n                                          \"isStructConstructorCall\": false,\n                                          \"lValueRequested\": false,\n                                          \"names\": [null],\n                                          \"tryCall\": false,\n                                          \"type\": \"uint256\",\n                                          \"type_conversion\": false\n                                        },\n                                        \"children\": [\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": [\n                                                {\n                                                  \"typeIdentifier\": \"t_uint256\",\n                                                  \"typeString\": \"uint256\"\n                                                }\n                                              ],\n                                              \"isConstant\": false,\n                                              \"isLValue\": false,\n                                              \"isPure\": false,\n                                              \"lValueRequested\": false,\n                                              \"member_name\": \"div\",\n                                              \"referencedDeclaration\": 10862,\n                                              \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                            },\n                                            \"children\": [\n                                              {\n                                                \"attributes\": {\n                                                  \"argumentTypes\": null,\n                                                  \"isConstant\": false,\n                                                  \"isLValue\": false,\n                                                  \"isPure\": false,\n                                                  \"isStructConstructorCall\": false,\n                                                  \"lValueRequested\": false,\n                                                  \"names\": [null],\n                                                  \"tryCall\": false,\n                                                  \"type\": \"uint256\",\n                                                  \"type_conversion\": false\n                                                },\n                                                \"children\": [\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": [\n                                                        {\n                                                          \"typeIdentifier\": \"t_uint256\",\n                                                          \"typeString\": \"uint256\"\n                                                        }\n                                                      ],\n                                                      \"isConstant\": false,\n                                                      \"isLValue\": false,\n                                                      \"isPure\": false,\n                                                      \"lValueRequested\": false,\n                                                      \"member_name\": \"mul\",\n                                                      \"referencedDeclaration\": 10845,\n                                                      \"type\": \"function (uint256,uint256) pure returns (uint256)\"\n                                                    },\n                                                    \"children\": [\n                                                      {\n                                                        \"attributes\": {\n                                                          \"argumentTypes\": null,\n                                                          \"arguments\": [null],\n                                                          \"isConstant\": false,\n                                                          \"isLValue\": false,\n                                                          \"isPure\": false,\n                                                          \"isStructConstructorCall\": false,\n                                                          \"lValueRequested\": false,\n                                                          \"names\": [null],\n                                                          \"tryCall\": false,\n                                                          \"type\": \"uint256\",\n                                                          \"type_conversion\": false\n                                                        },\n                                                        \"children\": [\n                                                          {\n                                                            \"attributes\": {\n                                                              \"argumentTypes\": [\n                                                                null\n                                                              ],\n                                                              \"isConstant\": false,\n                                                              \"isLValue\": false,\n                                                              \"isPure\": false,\n                                                              \"lValueRequested\": false,\n                                                              \"member_name\": \"pricePerShare\",\n                                                              \"referencedDeclaration\": 7283,\n                                                              \"type\": \"function () view external returns (uint256)\"\n                                                            },\n                                                            \"children\": [\n                                                              {\n                                                                \"attributes\": {\n                                                                  \"argumentTypes\": null,\n                                                                  \"overloadedDeclarations\": [\n                                                                    null\n                                                                  ],\n                                                                  \"referencedDeclaration\": 10499,\n                                                                  \"type\": \"contract IVaultV2\",\n                                                                  \"value\": \"yVault\"\n                                                                },\n                                                                \"id\": 10543,\n                                                                \"name\": \"Identifier\",\n                                                                \"src\": \"1889:6:44\"\n                                                              }\n                                                            ],\n                                                            \"id\": 10544,\n                                                            \"name\": \"MemberAccess\",\n                                                            \"src\": \"1889:20:44\"\n                                                          }\n                                                        ],\n                                                        \"id\": 10545,\n                                                        \"name\": \"FunctionCall\",\n                                                        \"src\": \"1889:22:44\"\n                                                      }\n                                                    ],\n                                                    \"id\": 10546,\n                                                    \"name\": \"MemberAccess\",\n                                                    \"src\": \"1889:26:44\"\n                                                  },\n                                                  {\n                                                    \"attributes\": {\n                                                      \"argumentTypes\": null,\n                                                      \"overloadedDeclarations\": [\n                                                        null\n                                                      ],\n                                                      \"referencedDeclaration\": 10518,\n                                                      \"type\": \"uint256\",\n                                                      \"value\": \"underlyingPrice\"\n                                                    },\n                                                    \"id\": 10547,\n                                                    \"name\": \"Identifier\",\n                                                    \"src\": \"1916:15:44\"\n                                                  }\n                                                ],\n                                                \"id\": 10548,\n                                                \"name\": \"FunctionCall\",\n                                                \"src\": \"1889:43:44\"\n                                              }\n                                            ],\n                                            \"id\": 10549,\n                                            \"name\": \"MemberAccess\",\n                                            \"src\": \"1889:47:44\"\n                                          },\n                                          {\n                                            \"attributes\": {\n                                              \"argumentTypes\": null,\n                                              \"overloadedDeclarations\": [null],\n                                              \"referencedDeclaration\": 10533,\n                                              \"type\": \"uint256\",\n                                              \"value\": \"baseUnit\"\n                                            },\n                                            \"id\": 10550,\n                                            \"name\": \"Identifier\",\n                                            \"src\": \"1937:8:44\"\n                                          }\n                                        ],\n                                        \"id\": 10551,\n                                        \"name\": \"FunctionCall\",\n                                        \"src\": \"1889:57:44\"\n                                      }\n                                    ],\n                                    \"id\": 10552,\n                                    \"name\": \"MemberAccess\",\n                                    \"src\": \"1889:61:44\"\n                                  },\n                                  {\n                                    \"attributes\": {\n                                      \"argumentTypes\": null,\n                                      \"hexvalue\": \"31653138\",\n                                      \"isConstant\": false,\n                                      \"isLValue\": false,\n                                      \"isPure\": true,\n                                      \"lValueRequested\": false,\n                                      \"subdenomination\": null,\n                                      \"token\": \"number\",\n                                      \"type\": \"int_const 1000000000000000000\",\n                                      \"value\": \"1e18\"\n                                    },\n                                    \"id\": 10553,\n                                    \"name\": \"Literal\",\n                                    \"src\": \"1951:4:44\"\n                                  }\n                                ],\n                                \"id\": 10554,\n                                \"name\": \"FunctionCall\",\n                                \"src\": \"1889:67:44\"\n                              }\n                            ],\n                            \"id\": 10555,\n                            \"name\": \"MemberAccess\",\n                            \"src\": \"1889:71:44\"\n                          },\n                          {\n                            \"attributes\": {\n                              \"argumentTypes\": null,\n                              \"overloadedDeclarations\": [null],\n                              \"referencedDeclaration\": 10533,\n                              \"type\": \"uint256\",\n                              \"value\": \"baseUnit\"\n                            },\n                            \"id\": 10556,\n                            \"name\": \"Identifier\",\n                            \"src\": \"1961:8:44\"\n                          }\n                        ],\n                        \"id\": 10557,\n                        \"name\": \"FunctionCall\",\n                        \"src\": \"1889:81:44\"\n                      }\n                    ],\n                    \"id\": 10558,\n                    \"name\": \"Return\",\n                    \"src\": \"1882:88:44\"\n                  }\n                ],\n                \"id\": 10559,\n                \"name\": \"Block\",\n                \"src\": \"1128:850:44\"\n              }\n            ],\n            \"id\": 10560,\n            \"name\": \"FunctionDefinition\",\n            \"src\": \"1044:934:44\"\n          }\n        ],\n        \"id\": 10561,\n        \"name\": \"ContractDefinition\",\n        \"src\": \"830:1151:44\"\n      }\n    ],\n    \"id\": 10562,\n    \"name\": \"SourceUnit\",\n    \"src\": \"312:1671:44\"\n  },\n  \"compiler\": {\n    \"name\": \"solc\",\n    \"version\": \"0.6.12+commit.27d51765.Emscripten.clang\"\n  },\n  \"networks\": {},\n  \"schemaVersion\": \"3.3.3\",\n  \"updatedAt\": \"2021-03-09T04:23:29.179Z\",\n  \"devdoc\": {\n    \"author\": \"David Lucid <david@rari.capital> (https://github.com/davidlucid)\",\n    \"details\": \"Implements the `PriceOracle` interface.\",\n    \"kind\": \"dev\",\n    \"methods\": {\n      \"getUnderlyingPrice(address)\": {\n        \"details\": \"Returns the price in ETH of the token underlying `cToken` (implements `PriceOracle`).\"\n      }\n    },\n    \"title\": \"YVaultV2PriceOracle\",\n    \"version\": 1\n  },\n  \"userdoc\": {\n    \"kind\": \"user\",\n    \"methods\": {},\n    \"notice\": \"Returns prices for yVaults using the sender as a root oracle.\",\n    \"version\": 1\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/contracts/oracles.min.json",
    "content": "{\"contracts\":{\"AlphaHomoraV1PriceOracle\":{\"abi\":[{\"inputs\":[],\"name\":\"IBETH\",\"outputs\":[{\"internalType\":\"contract Bank\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"BalancerLpTokenPriceOracle\":{\"abi\":[{\"inputs\":[],\"name\":\"BONE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BPOW_PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EXIT_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INIT_POOL_SUPPLY\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_BOUND_TOKENS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_BPOW_BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_IN_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_OUT_RATIO\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_TOTAL_WEIGHT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_WEIGHT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BALANCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BOUND_TOKENS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_BPOW_BASE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_FEE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_WEIGHT\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"}],\"name\":\"price\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"ChainlinkPriceOracle\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxSecondsBeforePriceIsStale\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BTC_ETH_PRICE_FEED\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_USD_PRICE_FEED\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"btcPriceFeeds\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"ethPriceFeeds\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSecondsBeforePriceIsStale\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"usdPriceFeeds\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"}],\"name\":\"hasPriceFeed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"}],\"name\":\"price\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"CurveLpTokenPriceOracle\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"poolOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract ICurveRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"underlyingTokens\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"}],\"name\":\"price\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"lpToken\",\"type\":\"address\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]},\"Keep3rPriceOracle\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"sushiSwap\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"MAX_TWAP_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_TWAP_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WETH_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootOracle\",\"outputs\":[{\"internalType\":\"contract Keep3rV1Oracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"uniswapV2Factory\",\"outputs\":[{\"internalType\":\"contract IUniswapV2Factory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"}],\"name\":\"price\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"MasterPriceOracle\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"NewAdmin\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldOracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOracle\",\"type\":\"address\"}],\"name\":\"NewDefaultOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldOracle\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOracle\",\"type\":\"address\"}],\"name\":\"NewOracle\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"defaultOracle\",\"outputs\":[{\"internalType\":\"contract PriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"oracles\",\"outputs\":[{\"internalType\":\"contract PriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"canAdminOverwrite\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"underlyings\",\"type\":\"address[]\"},{\"internalType\":\"contract PriceOracle[]\",\"name\":\"_oracles\",\"type\":\"address[]\"},{\"internalType\":\"contract PriceOracle\",\"name\":\"_defaultOracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_admin\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_canAdminOverwrite\",\"type\":\"bool\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"underlyings\",\"type\":\"address[]\"},{\"internalType\":\"contract PriceOracle[]\",\"name\":\"_oracles\",\"type\":\"address[]\"}],\"name\":\"add\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract PriceOracle\",\"name\":\"newOracle\",\"type\":\"address\"}],\"name\":\"setDefaultOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"}],\"name\":\"price\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"PreferredPriceOracle\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ChainlinkPriceOracle\",\"name\":\"_chainlinkOracle\",\"type\":\"address\"},{\"internalType\":\"contract PriceOracle\",\"name\":\"_secondaryOracle\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"chainlinkOracle\",\"outputs\":[{\"internalType\":\"contract ChainlinkPriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"secondaryOracle\",\"outputs\":[{\"internalType\":\"contract PriceOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"RecursivePriceOracle\":{\"abi\":[{\"inputs\":[],\"name\":\"COMPOUND_COMPTROLLER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"CREAM_COMPTROLLER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ETH_USD_PRICE_FEED\",\"outputs\":[{\"internalType\":\"contract AggregatorV3Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"SynthetixPriceOracle\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"UniswapLpTokenPriceOracle\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"underlying\",\"type\":\"address\"}],\"name\":\"price\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"UniswapTwapPriceOracleV2Factory\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_rootOracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[],\"name\":\"logic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"oracles\",\"outputs\":[{\"internalType\":\"contract UniswapTwapPriceOracleV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[],\"name\":\"rootOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"uniswapV2Factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]},\"UniswapV3TwapPriceOracleV2Factory\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[],\"name\":\"logic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"oracles\",\"outputs\":[{\"internalType\":\"contract UniswapV3TwapPriceOracleV2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"constant\":true},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"uniswapV3Factory\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"feeTier\",\"type\":\"uint24\"},{\"internalType\":\"address\",\"name\":\"baseToken\",\"type\":\"address\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]},\"YVaultV1PriceOracle\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]},\"YVaultV2PriceOracle\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract CToken\",\"name\":\"cToken\",\"type\":\"address\"}],\"name\":\"getUnderlyingPrice\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]}}}"
  },
  {
    "path": "src/fuse-sdk/src/index.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\n\nimport JumpRateModel from \"./irm/JumpRateModel.js\";\nimport JumpRateModelV2 from \"./irm/JumpRateModelV2.js\";\nimport DAIInterestRateModelV2 from \"./irm/DAIInterestRateModelV2.js\";\nimport WhitePaperInterestRateModel from \"./irm/WhitePaperInterestRateModel.js\";\n\nimport BigNumber from \"bignumber.js\";\n\nvar fusePoolDirectoryAbi = require(__dirname + \"/abi/FusePoolDirectory.json\");\nvar fusePoolLensAbi = require(__dirname + \"/abi/FusePoolLens.json\");\nvar fusePoolLensSecondaryAbi = require(__dirname +\n  \"/abi/FusePoolLensSecondary.json\");\nvar fuseSafeLiquidatorAbi = require(__dirname + \"/abi/FuseSafeLiquidator.json\");\nvar fuseFeeDistributorAbi = require(__dirname + \"/abi/FuseFeeDistributor.json\");\nvar initializableClonesAbi = require(__dirname +\n  \"/abi/InitializableClones.json\");\nvar uniswapV3PoolAbiSlim = require(__dirname + \"/abi/UniswapV3Pool.slim.json\");\nvar contracts = require(__dirname +\n  \"/contracts/compound-protocol.min.json\").contracts;\n/* var openOracleContracts = require(__dirname + \"/contracts/open-oracle.min.json\")\n  .contracts; */\nvar oracleContracts = require(__dirname +\n  \"/contracts/oracles.min.json\").contracts;\n\nconst axios = require(\"axios\");\n\nexport default class Fuse {\n  static FUSE_POOL_DIRECTORY_CONTRACT_ADDRESS =\n    \"0x835482FE0532f169024d5E9410199369aAD5C77E\";\n  static FUSE_SAFE_LIQUIDATOR_CONTRACT_ADDRESS =\n    \"0xf0f3a1494ae00b5350535b7777abb2f499fc13d4\";\n  static FUSE_FEE_DISTRIBUTOR_CONTRACT_ADDRESS =\n    \"0xa731585ab05fC9f83555cf9Bff8F58ee94e18F85\";\n  static FUSE_POOL_LENS_CONTRACT_ADDRESS =\n    \"0x6Dc585Ad66A10214Ef0502492B0CC02F0e836eec\";\n  static FUSE_POOL_LENS_SECONDARY_CONTRACT_ADDRESS =\n    \"0xc76190E04012f26A364228Cfc41690429C44165d\";\n\n  static COMPTROLLER_IMPLEMENTATION_CONTRACT_ADDRESS =\n    \"checkForCErc20PriceFeed\"; // v1.0.0: 0x94b2200d28932679def4a7d08596a229553a994e; v1.0.1 (with _unsupportMarket): 0x8A78A9D35c9C61F9E0Ff526C5d88eC28354543fE\n  static CERC20_DELEGATE_CONTRACT_ADDRESS =\n    \"0x67db14e73c2dce786b5bbbfa4d010deab4bbfcf9\"; // v1.0.0: 0x67e70eeb9dd170f7b4a9ef620720c9069d5e706c; v1.0.2 (for V2 yVaults): 0x2b3dd0ae288c13a730f6c422e2262a9d3da79ed1\n  static CETHER_DELEGATE_CONTRACT_ADDRESS =\n    \"0xd77e28a1b9a9cfe1fc2eee70e391c05d25853cbf\"; // v1.0.0: 0x60884c8faad1b30b1c76100da92b76ed3af849ba\n  static REWARDS_DISTRIBUTOR_DELEGATE_CONTRACT_ADDRESS =\n    \"0x220f93183a69d1598e8405310cb361cff504146f\";\n\n  static MASTER_PRICE_ORACLE_IMPLEMENTATION_CONTRACT_ADDRESS =\n    \"0xb3c8ee7309be658c186f986388c2377da436d8fb\";\n  static INITIALIZABLE_CLONES_CONTRACT_ADDRESS =\n    \"0x91ce5566dc3170898c5aee4ae4dd314654b47415\";\n\n  static OPEN_ORACLE_PRICE_DATA_CONTRACT_ADDRESS =\n    \"0xc629c26dced4277419cde234012f8160a0278a79\"; // UniswapAnchoredView NOT IN USE\n  static COINBASE_PRO_REPORTER_ADDRESS =\n    \"0xfCEAdAFab14d46e20144F48824d0C09B1a03F2BC\"; // UniswapAnchoredView NOT IN USE\n    \n  static COMPTROLLER_IMPLEMENTATION_TEMP_TOKEN_MIGRATION = \"0x1a1e7b69348b22b304428a07a7ffa1c6347f8ef6\";\n  static CERC20_DELEGATE_TEMP_TOKEN_MIGRATION = \"0x49a4af90cfc103a71e893a0302dd25940a8baf18\";\n\n  static PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES = {\n    ChainlinkPriceOracle: \"0xe102421A85D9C0e71C0Ef1870DaC658EB43E1493\",\n    ChainlinkPriceOracleV2: \"0xb0602af43Ca042550ca9DA3c33bA3aC375d20Df4\",\n    ChainlinkPriceOracleV3: \"0x058c345D3240001088b6280e008F9e78b3B2112d\",\n    // PreferredPriceOracle: \"\", // TODO: Set correct mainnet address after deployment\n    // UniswapAnchoredView: \"\", // NOT IN USE\n    // UniswapView: \"\", // NOT IN USE\n    // Keep3rPriceOracle_Uniswap: \"0xb90de476d438b37a4a143bf729a9b2237e544af6\", // NO LONGER IN USE\n    // Keep3rPriceOracle_SushiSwap: \"0x08d415f90ccfb971dfbfdd6266f9a7cb1c166fc0\", // NO LONGER IN USE\n    // Keep3rV2PriceOracle_Uniswap: \"0xd6a8cac634e59c00a3d4163f839d068458e39869\", // NO LONGER IN USE\n    UniswapTwapPriceOracle_Uniswap:\n      \"0xCd8f1c72Ff98bFE3B307869dDf66f5124D57D3a9\",\n    UniswapTwapPriceOracle_SushiSwap:\n      \"0xfD4B4552c26CeBC54cD80B1BDABEE2AC3E7eB324\",\n    UniswapLpTokenPriceOracle: \"0x50f42c004bd9b0e5acc65c33da133fbfbe86c7c0\",\n    UniswapV3TwapPriceOracle_Uniswap_3000:\n      \"0x80829b8A344741E28ae70374Be02Ec9d4b51CD89\",\n    UniswapV3TwapPriceOracle_Uniswap_10000:\n      \"0xF8731EB567c4C7693cF497849247668c91C9Ed36\",\n    UniswapV3TwapPriceOracleV2_Uniswap_500_USDC:\n      \"0x29490a6F5B4A999601378547Fe681d04d877D29b\",\n    UniswapV3TwapPriceOracleV2_Uniswap_3000_USDC:\n      \"0xf3a36BB3B627A5C8c36BA0714Fe035A401E86B78\",\n    UniswapV3TwapPriceOracleV2_Uniswap_10000_USDC:\n      \"0x3288a2d5f11FcBefbf77754e073cAD2C10325dE2\",\n    // RecursivePriceOracle: \"\", // TODO: Set correct mainnet address after deployment\n    YVaultV1PriceOracle: \"0xb5e8e42639e20285c9e58a317c28d9a4d7cb7000\", // v1.2.1; v1.0.0 = 0xb04be6165cf1879310e48f8900ad8c647b9b5c5d\n    YVaultV2PriceOracle: \"0xb669d0319fb9de553e5c206e6fbebd58512b668b\",\n    // AlphaHomoraV1PriceOracle: \"\", // TODO: Set correct mainnet address after deployment\n    // AlphaHomoraV2PriceOracle: \"\", // TODO: Set correct mainnet address after deployment\n    // SynthetixPriceOracle: \"\", // TODO: Set correct mainnet address after deployment\n    // BalancerLpTokenPriceOracle: \"\", // TODO: Set correct mainnet address after deployment\n    MasterPriceOracle: \"0x1887118E49e0F4A78Bd71B792a49dE03504A764D\",\n    CurveLpTokenPriceOracle: \"0x43c534203339bbf15f62b8dde91e7d14195e7a60\",\n    CurveLiquidityGaugeV2PriceOracle:\n      \"0xd9eefdb09d75ca848433079ea72ef609a1c1ea21\",\n    FixedEthPriceOracle: \"0xffc9ec4adbf75a537e4d233720f06f0df01fb7f5\",\n    FixedEurPriceOracle: \"0x817158553F4391B0d53d242fC332f2eF82463e2a\", // v1.1.0\n    WSTEthPriceOracle: \"0xb11de4c003c80dc36a810254b433d727ac71c517\",\n    FixedTokenPriceOracle_OHM: \"0x71FE48562B816D03Ce9e2bbD5aB28674A8807CC5\",\n    UniswapTwapPriceOracleV2_SushiSwap_DAI:\n      \"0x72fd4c801f5845ab672a12bce1b05bdba1fd851a\", // v1.1.2\n    UniswapTwapPriceOracleV2_SushiSwap_CRV:\n      \"0x552163f2a63f82bb47b686ffc665ddb3ceaca0ea\", // v1.1.3\n    UniswapTwapPriceOracleV2_SushiSwap_USDC:\n      \"0x9ee412a83a52f033d23a0b7e2e030382b3e53208\", // v1.1.3\n    UniswapTwapPriceOracleV2_Uniswap_FRAX:\n      \"0x6127e381756796fb978bc872556bf790f14cde98\", // v1.1.3\n    UniswapTwapPriceOracleV2_SushiSwap_ETH:\n      \"0xf411CD7c9bC70D37f194828ce71be00d9aEC9edF\", // v1.1.3\n    UniswapTwapPriceOracleV2_SushiSwap_WBTC:\n      \"0xC9Ad18928B1D9F61105d43Ecc33c670838D1C853\", // v1.1.3\n    UniswapTwapPriceOracleV2_Uniswap_ETH:\n      \"0xd4219c15b9cfc40090181ab934a08bed14017372\", // v1.1.3\n    SushiBarPriceOracle: \"0x290E0f31e96e13f9c0DB14fD328a3C2A94557245\",\n    BadgerPriceOracle: \"0xd0C86943e594640c4598086a2359A0e70b80eF8D\",\n    HarvestPriceOracle: \"0x6141d9353bb1fb8131d07d358c112b372aa92514\", // v1.2.1; v1.1.4 = 0x8D364609cd2716172016838fF9FBC7fBcAC91792\n    StakedSdtPriceOracle: \"0x5447c825ee330015418c1a0d840c4a1b5a7176cc\",\n    TokemakPoolTAssetPriceOracle: \"0xd806782b31EC52FcB7f2a009d7D045bB732431Fb\",\n    MStablePriceOracle: \"0xeb988f5492C86584f8D8f1B8662188D5A9BfE357\",\n    GelatoGUniPriceOracle: \"0xea3633b38c747cea231adb74b511dc2ed3992b43\",\n    StakedSpellPriceOracle: \"0xb544f62045b96a60b398abb5a5c23bf04cb4ed9c\",\n    CurveTriCryptoLpTokenPriceOracle: \"0xb2d16916d520d585ee49f08db1436b961b48fe60\",\n    GOhmPriceOracle: \"0x057eCDA7f61C73c3Adcc36899d2626C7b79C3249\",\n    WSSquidPriceOracle: \"0xAE7C2169f3B5179bA56E471623BC47bEE06E4aA7\",\n    WXBtrflyPriceOracle: \"0x66159b1250f7ec2e335176643c25a0a3deae7b1f\",\n    StakedFodlPriceOracle: \"0x92cf2299680c063ccaf18f62a60c500a625e08e2\",\n    RgtTempPriceOracle: \"0x0b43d7372e49ad2b04c7ab04bddd7f724480aaed\",\n  };\n\n  static UNISWAP_TWAP_PRICE_ORACLE_ROOT_CONTRACT_ADDRESS =\n    \"0xa170dba2cd1f68cdd7567cf70184d5492d2e8138\";\n  static UNISWAP_TWAP_PRICE_ORACLE_V2_ROOT_CONTRACT_ADDRESS =\n    \"0xf1860b3714f0163838cf9ee3adc287507824ebdb\";\n  static UNISWAP_TWAP_PRICE_ORACLE_V2_FACTORY_CONTRACT_ADDRESS =\n    \"0x3472f7e0179Fe15cd7450C9c5269C876fAc64B73\";\n  static UNISWAP_V3_TWAP_PRICE_ORACLE_V2_FACTORY_CONTRACT_ADDRESS =\n    \"0x8Eed20f31E7d434648fF51114446b3CfFD1FF9F1\";\n\n  static DAI_POT = \"0x197e90f9fad81970ba7976f33cbd77088e5d7cf7\"; // DAIInterestRateModelV2 NOT IN USE\n  static DAI_JUG = \"0x19c0976f590d67707e62397c87829d896dc0f1f1\"; // DAIInterestRateModelV2 NOT IN USE\n\n  static UNISWAP_V2_FACTORY_ADDRESS =\n    \"0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f\";\n  static UNISWAP_V2_PAIR_INIT_CODE_HASH =\n    \"0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f\";\n  static SUSHISWAP_FACTORY_ADDRESS =\n    \"0xc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac\";\n  static UNISWAP_V3_FACTORY_ADDRESS =\n    \"0x1f98431c8ad98523631ae4a59f267346ea31f984\";\n  static WETH_ADDRESS = \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\";\n\n  static PRICE_ORACLE_RUNTIME_BYTECODE_HASHES = {\n    ChainlinkPriceOracle:\n      \"0x7a2a5633a99e8abb759f0b52e87875181704b8e29f6567d4a92f12c3f956d313\",\n    ChainlinkPriceOracleV2:\n      \"0x8d2bcaa1429031ae2b19a4516e5fdc68fb9346f158efb642fcf9590c09de2175\",\n    ChainlinkPriceOracleV3:\n      \"0x4b3bef9f57e381dc6b6e32bff270ce8a72d8aae541cb7c686b09555de3526d39\",\n    UniswapTwapPriceOracle_Uniswap:\n      \"0xa2537dcbd2b55b1a690db3b83fa1042f86b21ec3e1557f918bc3930b6bbb9244\",\n    UniswapTwapPriceOracle_SushiSwap:\n      \"0x9b11abfe7bfc1dcef0b1bc513959f1172cfe2cb595c5131b9cabc3b6448d89ac\",\n    UniswapLpTokenPriceOracle:\n      \"0xbcddb66e4e9c038b4ee1cf4caf1e8c8119225d72a8407fc32caa1988e4a7fe31\",\n    UniswapV3TwapPriceOracle_Uniswap_3000:\n      \"0xb300f7f64110b952340e896d33f133482de6715f1b8b7e0acbd2416e0e6593c1\",\n    UniswapV3TwapPriceOracle_Uniswap_10000:\n      \"0xef237fadaffff8a1b5daa4d448c7935cf0f71e2ee01a53856bb0d7884b0ad78c\",\n    UniswapV3TwapPriceOracleV2_Uniswap_500_USDC:\n      \"0xaaba60b3af593a8ecde61d8516ad0353db8cc2777018e0dde07f654c22a3171d\",\n    UniswapV3TwapPriceOracleV2_Uniswap_3000_USDC:\n      \"0x204541bdea985113b68dad86bf67fbbd52829f8984b6f17f6271bcec203161d1\",\n    UniswapV3TwapPriceOracleV2_Uniswap_10000_USDC:\n      \"0xc301f891f1f905e68d1c5df5202cf0eec2ee8abcf3a510d5bd00d46f7dea01b4\",\n    UniswapV3TwapPriceOracleV2:\n      \"0xc844372c8856a5f9569721d3aca38c7804bae2ae4e296605e683aa8d1601e538\", // v1.2.0\n    // fuse-contracts@v1.0.0\n    YVaultV1PriceOracleV1:\n      \"0xd0dda181a4eb699a966b23edb883cff43377297439822b1b0f99b06af2002cc3\",\n    // fuse-contracts@v1.2.1\n    YVaultV1PriceOracleV2:\n      \"0x78ac4b231a4ce3ac5259847cd1cb227bf45882d736722290bee6b6c99a722f22\",\n    YVaultV2PriceOracle:\n      \"0x177c22cc7d05280cea84a36782303d17246783be7b8c0b6f9731bb9002ffcc68\",\n    // fuse-contracts@v1.0.0\n    MasterPriceOracleV1:\n      \"0xfa1349af05af40ffb5e66605a209dbbdc8355ba7dda76b2be10bafdf5ffd1dc6\",\n    // fuse-contracts@80c79b45bda4151e22358d22cc0bf1489f34900c (before final release of v1.2.0)\n    MasterPriceOracleV2:\n      \"0xdfa5aa37efea3b16d143a12c4ae7006f3e29768b3e375b59842c7ecd3809f1d1\",\n    // fuse-contracts@v1.2.0\n    MasterPriceOracleV3:\n      \"0xe4199a03b164ca492d19d655b85fdf8cc14cf2da6ddedd236712552b7676b03d\",\n    CurveLpTokenPriceOracle:\n      \"0x6742ae836b1f7df0cfd9b858c89d89da3ee814c28c5ee9709a371bcf9dfd2145\",\n    CurveLiquidityGaugeV2PriceOracle:\n      \"0xfcf0d93de474152898668c4ebd963e0237bfc46c3d5f0ce51b7045b60c831734\",\n    FixedEthPriceOracle:\n      \"0xcb669c93632a1c991adced5f4d97202aa219fab3d5d86ebd28f4f62ad7aa6cb3\",\n    FixedEurPriceOracle:\n      \"0x678dbe9f2399a44e89edc934dc17f6d4ee7004d9cbcee83c0fa0ef43de924b84\",\n    WSTEthPriceOracle:\n      \"0x11daa8dfb8957304aa7d926ce6876c523c7567b4052962e65e7d6a324ddcb4cc\",\n    FixedTokenPriceOracle_OHM:\n      \"0x136d369f53594c2f10e3ff3f14eaaf0bada4a63964f3cfeda3923e3531e407dc\",\n    UniswapTwapPriceOracleV2_SushiSwap_DAI:\n      \"0xb4d279232ab52a2fcaee6dc47db486a733c24a499ade9d7de1b0d417d4730817\",\n    UniswapTwapPriceOracleV2_SushiSwap_CRV:\n      \"0x9df749314d6494a785bb5ff7a5fab25adadb772e10d58b7f692028cc23e2cbb3\",\n    UniswapTwapPriceOracleV2_SushiSwap_USDC:\n      \"0x2219b54a3e2c36b8b1eca8d511392eacace73a3e1cb55c97dd495f5e47024ba6\",\n    UniswapTwapPriceOracleV2_Uniswap_FRAX:\n      \"0xc884332403a6234bbb5e860fa27bcf69389b7e372b20045af687d23426e654e3\",\n    UniswapTwapPriceOracleV2_SushiSwap_ETH:\n      \"0xea501eef0ca55dc6a8360a5a1274895d6dc245dd0ae8cffbff3a14c6624711f0\",\n    SushiBarPriceOracle:\n      \"0x3736e8b6c11fcd413c0b60c3291a3a2e2ebe496a2780f3c45790a123f5ee9705\",\n    BadgerPriceOracle:\n      \"0x310210400b2d3992dc8fb9ace5001b1b55d3a468fba18ae0bc82a375fd150638\",\n    // fuse-contracts@v1.1.4\n    HarvestPriceOracleV1:\n      \"0x6e23380d1d640118cf80cf2bfa9ca7a89068659dfcb50abc0a7f8b9e5f9daab7\",\n    // fuse-contracts@v1.2.1\n    HarvestPriceOracleV2:\n      \"0x5eff948725404a38311ebe4b3bafc312f63dd8ae611e3ddcdfebb9cfa231988c\",\n    StakedSdtPriceOracle:\n      \"0x1b489bd00e5cbe4998e985f147297c1a39bd9da659e78544c94c1f3415edf7b7\",\n    TokemakPoolTAssetPriceOracle:\n      \"0xc820466d7af2319646d25e2203187254a37cb9b9ae6c8a263d40fb5c01a54c51\",\n    MStablePriceOracle:\n      \"0x39fc7b2cdac3d401ea91becf897346b2156dbe261162de14082e856103456eb4\",\n    GelatoGUniPriceOracle:\n      \"0xbed0eddba7009021dd774a530b53a784fc80217c7bf27c15c9b2487b13fb2863\",\n    StakedSpellPriceOracle:\n      \"0x9fcea6d23c7e2e330e35e303a49f39e0c2c783e6b770ccc2de41fbbfbfc539e7\",\n    CurveTriCryptoLpTokenPriceOracle:\n      \"0x92014d914370d8c59082044786d9b056ea188a95891778c555209c210850d5ae\",\n  };\n\n  static ORACLES = [\n    \"SimplePriceOracle\",\n    \"PreferredPriceOracle\",\n    \"ChainlinkPriceOracle\",\n    // \"Keep3rPriceOracle\",\n    \"MasterPriceOracle\",\n    // \"UniswapAnchoredView\",\n    // \"UniswapView\",\n    \"UniswapLpTokenPriceOracle\",\n    \"RecursivePriceOracle\",\n    \"YVaultV1PriceOracle\",\n    \"YVaultV2PriceOracle\",\n    \"AlphaHomoraV1PriceOracle\",\n    \"SynthetixPriceOracle\",\n    \"ChainlinkPriceOracleV2\",\n    \"CurveLpTokenPriceOracle\",\n    \"CurveLiquidityGaugeV2PriceOracle\",\n    \"FixedEthPriceOracle\",\n    \"FixedEurPriceOracle\",\n    \"FixedTokenPriceOracle\",\n    \"WSTEthPriceOracle\",\n    \"UniswapTwapPriceOracle\",\n    \"UniswapTwapPriceOracleV2\",\n    \"UniswapV3TwapPriceOracle\",\n    \"UniswapV3TwapPriceOracleV2\",\n    \"SushiBarPriceOracle\",\n  ];\n\n  static PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES = {\n    JumpRateModel_Compound_Stables:\n      \"0x640dce7c7c6349e254b20eccfa2bb902b354c317\",\n    JumpRateModel_Compound_UNI: \"0xc35DB333EF7ce4F246DE9DE11Cc1929d6AA11672\",\n    JumpRateModel_Cream_Stables_Majors:\n      \"0xb579d2761470bba14018959d6dffcc681c09c04b\",\n    JumpRateModel_Cream_Gov_Seeds: \"0xcdC0a449E011249482824efFcfA05c883d36CfC7\",\n\n    WhitePaperInterestRateModel_Compound_ETH:\n      \"0x14ee0270C80bEd60bDC117d4F218DeE0A4909F28\",\n    WhitePaperInterestRateModel_Compound_WBTC:\n      \"0x7ecAf96C79c2B263AFe4f486eC9a74F8e563E0a6\",\n\n    JumpRateModel_Fei_FEI: \"0x8f47be5692180079931e2f983db6996647aba0a5\",\n    JumpRateModel_Fei_TRIBE: \"0x075538650a9c69ac8019507a7dd1bd879b12c1d7\",\n    JumpRateModel_Fei_ETH: \"0xbab47e4b692195bf064923178a90ef999a15f819\",\n    JumpRateModel_Fei_DAI: \"0xede47399e2aa8f076d40dc52896331cba8bd40f7\",\n    JumpRateModel_Olympus_Majors: \"0xe1d35fae219e4d74fe11cb4246990784a4fe6680\",\n    JumpRateModel_Olympus_Majors_New: \"0x4EF29407a8dbcA2F37B7107eAb54d6f2a3f2ad60\",\n    \n    JumpRateModel_Flat_3_Percent_Borrow_APY: \"0xc8acad405ff67eaee2aca374764883cecbd490ad\",\n\n    Custom_JumpRateModel: \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\",\n    Custom_JumpRateModel: \"0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF\",\n  };\n\n  static COMPTROLLER_ERROR_CODES = [\n    \"NO_ERROR\",\n    \"UNAUTHORIZED\",\n    \"COMPTROLLER_MISMATCH\",\n    \"INSUFFICIENT_SHORTFALL\",\n    \"INSUFFICIENT_LIQUIDITY\",\n    \"INVALID_CLOSE_FACTOR\",\n    \"INVALID_COLLATERAL_FACTOR\",\n    \"INVALID_LIQUIDATION_INCENTIVE\",\n    \"MARKET_NOT_ENTERED\", // no longer possible\n    \"MARKET_NOT_LISTED\",\n    \"MARKET_ALREADY_LISTED\",\n    \"MATH_ERROR\",\n    \"NONZERO_BORROW_BALANCE\",\n    \"PRICE_ERROR\",\n    \"REJECTION\",\n    \"SNAPSHOT_ERROR\",\n    \"TOO_MANY_ASSETS\",\n    \"TOO_MUCH_REPAY\",\n    \"SUPPLIER_NOT_WHITELISTED\",\n    \"BORROW_BELOW_MIN\",\n    \"SUPPLY_ABOVE_MAX\",\n    \"NONZERO_TOTAL_SUPPLY\",\n  ];\n\n  static CTOKEN_ERROR_CODES = [\n    \"NO_ERROR\",\n    \"UNAUTHORIZED\",\n    \"BAD_INPUT\",\n    \"COMPTROLLER_REJECTION\",\n    \"COMPTROLLER_CALCULATION_ERROR\",\n    \"INTEREST_RATE_MODEL_ERROR\",\n    \"INVALID_ACCOUNT_PAIR\",\n    \"INVALID_CLOSE_AMOUNT_REQUESTED\",\n    \"INVALID_COLLATERAL_FACTOR\",\n    \"MATH_ERROR\",\n    \"MARKET_NOT_FRESH\",\n    \"MARKET_NOT_LISTED\",\n    \"TOKEN_INSUFFICIENT_ALLOWANCE\",\n    \"TOKEN_INSUFFICIENT_BALANCE\",\n    \"TOKEN_INSUFFICIENT_CASH\",\n    \"TOKEN_TRANSFER_IN_FAILED\",\n    \"TOKEN_TRANSFER_OUT_FAILED\",\n    \"UTILIZATION_ABOVE_MAX\",\n  ];\n  \n  static COLLATERAL_REDEMPTION_STRATEGIES = {\n    CurveLpToken: \"0xb5eEaeB4E7e0a9feD003ED402016342A09FC2784\",\n    CurveLiquidityGaugeV2: \"0x97e6E953C9a9250c8e889D888158F27752e0aFe0\",\n    YearnYVaultV2: \"0x50293EB96E90616faD66CEF227EDA2b344F592c0\",\n    PoolTogether: \"0xDDB0d86fDBF33210Ba6EFc97757fFcdBF26B5530\", \n    UniswapV2: \"0x8db1884def49b001c0b9b2fd5ba8e8b71f69b958\",\n    UniswapV1: \"0x9fa9ffa397be8e33930571dcd9f5f92b629b0fad\",\n    CurveSwap: \"0xebea141052d759b75c4c9eeaad28f07f329d0163\",\n    WSTEth: \"0xca844845a3578296b3fcfe50fc3a1064a2922fbc\",\n    SOhm: \"0xeBC0752232697F17EbfAA1f26aB8543EcEC35AE3\",\n    UniswapV3: \"0x5E829D997294F7f1d40a45C0f6431aF13a381E63\",\n    SushiBar: \"0x5F2dF200636e203863819CbEaA02017CFabEc4D6\",\n    UniswapLpToken: \"0x3659a0a9128ee84f143bdc83c4f3932cd8f552e7\",\n    Harvest: \"0xbb77A6a11A5998A6C7B9337f97Fd82f0D90f873b\",\n    StakedSdt: \"0x015e435df0bfb249990be78ce050bf8b3b88f757\",\n    GOhm: \"0x2bA5f816FB2c219Ae1C621c69A263899C1914Da4\",\n    BadgerSett: \"0xc743c9d1801ad9169be176761e8bb95c1298d817\",\n  };\n\n  constructor(web3Provider) {\n    this.web3 = new Web3(web3Provider);\n\n    this.getEthUsdPriceBN = async function () {\n      return Web3.utils.toBN(\n        new BigNumber(\n          (\n            await axios.get(\n              \"https://api.coingecko.com/api/v3/simple/price?vs_currencies=usd&ids=ethereum\"\n            )\n          ).data.ethereum.usd\n        )\n          .multipliedBy(1e18)\n          .toFixed(0)\n      );\n    };\n\n    this.contracts = {\n      FusePoolDirectory: new this.web3.eth.Contract(\n        fusePoolDirectoryAbi,\n        Fuse.FUSE_POOL_DIRECTORY_CONTRACT_ADDRESS\n      ),\n      FusePoolLens: new this.web3.eth.Contract(\n        fusePoolLensAbi,\n        Fuse.FUSE_POOL_LENS_CONTRACT_ADDRESS\n      ),\n      FusePoolLensSecondary: new this.web3.eth.Contract(\n        fusePoolLensSecondaryAbi,\n        Fuse.FUSE_POOL_LENS_SECONDARY_CONTRACT_ADDRESS\n      ),\n      FuseSafeLiquidator: new this.web3.eth.Contract(\n        fuseSafeLiquidatorAbi,\n        Fuse.FUSE_SAFE_LIQUIDATOR_CONTRACT_ADDRESS\n      ),\n      FuseFeeDistributor: new this.web3.eth.Contract(\n        fuseFeeDistributorAbi,\n        Fuse.FUSE_FEE_DISTRIBUTOR_CONTRACT_ADDRESS\n      ),\n    };\n\n    this.compoundContracts = contracts;\n    // this.openOracleContracts = openOracleContracts;\n    this.oracleContracts = oracleContracts;\n\n    this.getCreate2Address = function (creatorAddress, salts, byteCodeHash) {\n      return `0x${this.web3.utils\n        .sha3(\n          `0x${[\n            \"ff\",\n            creatorAddress,\n            this.web3.utils.soliditySha3(...salts),\n            byteCodeHash,\n          ]\n            .map((x) => x.replace(/0x/, \"\"))\n            .join(\"\")}`\n        )\n        .slice(-40)}`.toLowerCase();\n    };\n\n    this.deployPool = async function (\n      poolName,\n      enforceWhitelist,\n      closeFactor,\n      liquidationIncentive,\n      priceOracle,\n      priceOracleConf,\n      options,\n      whitelist\n    ) {\n      // Here, if you pass in a STRING for `priceOracle` it will search for it in Fuse.ORACLES and deploy that oracle from scratch using the priceOracleConf you pass in.\n      // Most likely though, you will pass in an ADDRESS for `priceOracle` because the UI already deploys a priceOracle before you deploy a pool.\n      // In the case that `priceOracle` is an ADDRESS, it will skip the below step and go straight into pool deployment using the priceOracle address.\n      if (Fuse.ORACLES.indexOf(priceOracle) >= 0) {\n        try {\n          priceOracle = await this.deployPriceOracle(\n            priceOracle,\n            priceOracleConf,\n            options\n          ); // TODO: anchorMantissa / anchorPeriod\n        } catch (error) {\n          throw (\n            \"Deployment of price oracle failed: \" +\n            (error.message ? error.message : error)\n          );\n        }\n      }\n\n      // Deploy Comptroller implementation if necessary\n      var implementationAddress =\n        Fuse.COMPTROLLER_IMPLEMENTATION_CONTRACT_ADDRESS;\n\n      if (!implementationAddress) {\n        var comptroller = new this.web3.eth.Contract(\n          JSON.parse(contracts[\"contracts/Comptroller.sol:Comptroller\"].abi)\n        );\n        comptroller = await comptroller\n          .deploy({\n            data: \"0x\" + contracts[\"contracts/Comptroller.sol:Comptroller\"].bin,\n          })\n          .send(options);\n        implementationAddress = comptroller.options.address;\n      }\n\n      // Register new pool with FusePoolDirectory\n      try {\n        var receipt = await this.contracts.FusePoolDirectory.methods\n          .deployPool(\n            poolName,\n            implementationAddress,\n            enforceWhitelist,\n            closeFactor,\n            liquidationIncentive,\n            priceOracle\n          )\n          .send(options);\n      } catch (error) {\n        throw (\n          \"Deployment and registration of new Fuse pool failed: \" +\n          (error.message ? error.message : error)\n        );\n      }\n\n      // Compute Unitroller address\n      var poolAddress = this.getCreate2Address(\n        Fuse.FUSE_POOL_DIRECTORY_CONTRACT_ADDRESS,\n        [options.from, poolName, receipt.blockNumber],\n        this.web3.utils.sha3(\n          \"0x\" + contracts[\"contracts/Unitroller.sol:Unitroller\"].bin\n        )\n      );\n      var unitroller = new this.web3.eth.Contract(\n        JSON.parse(contracts[\"contracts/Unitroller.sol:Unitroller\"].abi),\n        poolAddress\n      );\n\n      // Accept admin status via Unitroller\n      try {\n        await unitroller.methods._acceptAdmin().send(options);\n      } catch (error) {\n        throw (\n          \"Accepting admin status failed: \" +\n          (error.message ? error.message : error)\n        );\n      }\n\n      // Whitelist\n      if (enforceWhitelist) {\n        var comptroller = new this.web3.eth.Contract(\n          JSON.parse(contracts[\"contracts/Comptroller.sol:Comptroller\"].abi),\n          poolAddress\n        );\n\n        // Already enforced so now we just need to add the addresses\n        await comptroller.methods\n          ._setWhitelistStatuses(whitelist, Array(whitelist.length).fill(true))\n          .send(options);\n      }\n\n      return [poolAddress, implementationAddress, priceOracle];\n    };\n\n    this.deployPriceOracle = async function (model, conf, options) {\n      console.log(model, conf, options, \"inside DeployPrice\");\n      if (!model) model = \"ChainlinkPriceOracle\";\n      if (!conf) conf = {};\n\n      switch (model) {\n        /* case \"PreferredPriceOracle\":\n          // Deploy ChainlinkPriceOracle\n          if (!conf.chainlinkPriceOracle)\n            conf.chainlinkPriceOracle = await this.deployPriceOracle(\n              \"ChainlinkPriceOracle\",\n              {\n                maxSecondsBeforePriceIsStale: conf.maxSecondsBeforePriceIsStale,\n              },\n              options\n            );\n\n          // Deploy Uniswap price oracle\n          if (!conf.secondaryPriceOracle)\n            conf.secondaryPriceOracle = await this.deployPriceOracle(\n              \"UniswapView\",\n              {\n                anchorPeriod: conf.anchorPeriod,\n                tokenConfigs: conf.tokenConfigs,\n                canAdminOverwrite: conf.canAdminOverwrite,\n                isPublic: conf.isPublic,\n                maxSecondsBeforePriceIsStale: conf.maxSecondsBeforePriceIsStale,\n              },\n              options\n            );\n\n          // Deploy PreferredPriceOracle\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"PreferredPriceOracle\"].abi\n          );\n          priceOracle = await priceOracle\n            .deploy({\n              data: oracleContracts[\"PreferredPriceOracle\"].bin,\n              arguments: [conf.chainlinkPriceOracle, conf.secondaryPriceOracle],\n            })\n            .send(options);\n\n          break; */\n        case \"ChainlinkPriceOracle\":\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"ChainlinkPriceOracle\"].abi\n          );\n          priceOracle = await priceOracle\n            .deploy({\n              data: oracleContracts[\"ChainlinkPriceOracle\"].bin,\n              arguments: [\n                conf.maxSecondsBeforePriceIsStale\n                  ? conf.maxSecondsBeforePriceIsStale\n                  : 0,\n              ],\n            })\n            .send(options);\n          break;\n        /* case \"UniswapAnchoredView\":\n          // Input validation/default config\n          if (\n            conf.reporter === undefined ||\n            conf.reporter === null ||\n            conf.reporter === \"\"\n          )\n            conf.reporter = Fuse.COINBASE_PRO_REPORTER_ADDRESS;\n          if (conf.anchorMantissa === undefined || conf.anchorMantissa === null)\n            conf.anchorMantissa = Web3.utils.toBN(1e17); // 1e17 equates to 10% tolerance for source price to be above or below anchor\n          if (conf.anchorPeriod === undefined || conf.anchorPeriod === null)\n            conf.anchorPeriod = 30 * 60;\n\n          // Deploy UniswapAnchoredView with ETH token config\n          var priceOracle = new this.web3.eth.Contract(\n            JSON.parse(\n              openOracleContracts[\n                \"contracts/Uniswap/UniswapAnchoredView.sol:UniswapAnchoredView\"\n              ].abi\n            )\n          );\n          var PriceSource = {\n            FIXED_ETH: 0,\n            FIXED_USD: 1,\n            REPORTER: 2,\n            TWAP: 3,\n          };\n          var tokenConfigs = [\n            {\n              underlying: \"0x0000000000000000000000000000000000000000\",\n              symbolHash: Web3.utils.soliditySha3(\"ETH\"),\n              baseUnit: Web3.utils.toBN(1e18).toString(),\n              priceSource: PriceSource.REPORTER,\n              fixedPrice: 0,\n              uniswapMarket: \"0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc\",\n              isUniswapReversed: true,\n            },\n          ];\n          var deployArgs = [\n            Fuse.OPEN_ORACLE_PRICE_DATA_CONTRACT_ADDRESS,\n            conf.reporter,\n            conf.anchorMantissa,\n            conf.anchorPeriod,\n            tokenConfigs,\n            conf.canAdminOverwrite ? true : false,\n            conf.isSecure ? true : false,\n            conf.maxSecondsBeforePriceIsStale\n              ? conf.maxSecondsBeforePriceIsStale\n              : 0,\n          ];\n          priceOracle = await priceOracle\n            .deploy({\n              data:\n                \"0x\" +\n                openOracleContracts[\n                  \"contracts/Uniswap/UniswapAnchoredView.sol:UniswapAnchoredView\"\n                ].bin,\n              arguments: deployArgs,\n            })\n            .send(options);\n\n          // Post reported ETH/USD price or (if price has never been reported) have user report and post price\n          var priceData = new this.web3.eth.Contract(\n            JSON.parse(\n              openOracleContracts[\n                \"contracts/OpenOraclePriceData.sol:OpenOraclePriceData\"\n              ].abi\n            ),\n            Fuse.OPEN_ORACLE_PRICE_DATA_CONTRACT_ADDRESS\n          );\n          if (\n            Web3.utils\n              .toBN(\n                await priceData.methods.getPrice(conf.reporter, \"ETH\").call()\n              )\n              .gt(Web3.utils.toBN(0))\n          )\n            await priceOracle.methods\n              .postPrices([], [], [\"ETH\"])\n              .send({ ...options });\n          else\n            prompt(\n              \"It looks like prices have never been reported for ETH. ETH prices are necessary to convert posted USD prices into outputted ETH prices. Please click OK once you have reported and posted prices for ETH.\"\n            );\n\n          break;\n        case \"UniswapView\":\n          if (conf.anchorPeriod === undefined || conf.anchorPeriod === null)\n            conf.anchorPeriod = 30 * 60;\n          var priceOracle = new this.web3.eth.Contract(\n            JSON.parse(\n              openOracleContracts[\n                \"contracts/Uniswap/UniswapView.sol:UniswapView\"\n              ].abi\n            )\n          );\n          var deployArgs = [\n            conf.anchorPeriod,\n            conf.tokenConfigs !== undefined ? conf.tokenConfigs : [],\n            conf.canAdminOverwrite && !conf.isPublic ? true : false,\n            conf.isPublic ? true : false,\n            conf.maxSecondsBeforePriceIsStale\n              ? conf.maxSecondsBeforePriceIsStale\n              : 0,\n          ];\n          priceOracle = await priceOracle\n            .deploy({\n              data:\n                \"0x\" +\n                openOracleContracts[\n                  \"contracts/Uniswap/UniswapView.sol:UniswapView\"\n                ].bin,\n              arguments: deployArgs,\n            })\n            .send(options);\n          break; */\n        case \"UniswapLpTokenPriceOracle\":\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"UniswapLpTokenPriceOracle\"].abi\n          );\n          var deployArgs = [conf.useRootOracle ? true : false];\n          priceOracle = await priceOracle\n            .deploy({\n              data: oracleContracts[\"UniswapLpTokenPriceOracle\"].bin,\n              arguments: deployArgs,\n            })\n            .send(options);\n          break;\n        /* case \"Keep3rPriceOracle\":\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"Keep3rPriceOracle\"].abi\n          );\n          var deployArgs = [conf.sushiswap ? true : false];\n          priceOracle = await priceOracle\n            .deploy({\n              data: oracleContracts[\"Keep3rPriceOracle\"].bin,\n              arguments: deployArgs,\n            })\n            .send(options);\n          break; */\n        case \"UniswapTwapPriceOracle\": // Uniswap V2 TWAPs\n          // Input validation\n          if (!conf.uniswapV2Factory)\n            conf.uniswapV2Factory = Fuse.UNISWAP_V2_FACTORY_ADDRESS;\n\n          // Deploy oracle\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"UniswapTwapPriceOracle\"].abi\n          );\n          var deployArgs = [\n            Fuse.UNISWAP_TWAP_PRICE_ORACLE_ROOT_CONTRACT_ADDRESS,\n            conf.uniswapV2Factory,\n          ]; // Default to official Uniswap V2 factory\n          priceOracle = await priceOracle\n            .deploy({\n              data: oracleContracts[\"UniswapTwapPriceOracle\"].bin,\n              arguments: deployArgs,\n            })\n            .send(options);\n          break;\n        case \"UniswapTwapPriceOracleV2\": // Uniswap V2 TWAPs\n          // Input validation\n          if (!conf.uniswapV2Factory)\n            conf.uniswapV2Factory = Fuse.UNISWAP_V2_FACTORY_ADDRESS;\n\n          // Check for existing oracle\n          var oracleFactory = new this.web3.eth.Contract(\n            this.oracleContracts.UniswapTwapPriceOracleV2Factory.abi,\n            Fuse.UNISWAP_TWAP_PRICE_ORACLE_V2_FACTORY_CONTRACT_ADDRESS\n          );\n          var oracle = await oracleFactory.methods\n            .oracles(conf.uniswapV2Factory, conf.baseToken)\n            .call();\n\n          // Deploy if oracle does not exist\n          if (oracle == \"0x0000000000000000000000000000000000000000\") {\n            await oracleFactory.methods\n              .deploy(conf.uniswapV2Factory, conf.baseToken)\n              .send(options);\n            oracle = await oracleFactory.methods\n              .oracles(conf.uniswapV2Factory, conf.baseToken)\n              .call();\n          }\n\n          // Instantiate contract\n          var priceOracle = new this.web3.eth.Contract([], oracle);\n\n          break;\n        case \"ChainlinkPriceOracleV2\":\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"ChainlinkPriceOracleV2\"].abi\n          );\n          var deployArgs = [\n            conf.admin ? conf.admin : options.from,\n            conf.canAdminOverwrite ? true : false,\n          ];\n          priceOracle = await priceOracle\n            .deploy({\n              data: oracleContracts[\"ChainlinkPriceOracleV2\"].bin,\n              arguments: deployArgs,\n            })\n            .send(options);\n          break;\n        case \"UniswapV3TwapPriceOracle\": // Uniswap V3 TWAPs\n          // Input validation\n          if (!conf.uniswapV3Factory)\n            conf.uniswapV3Factory = Fuse.UNISWAP_V3_FACTORY_ADDRESS;\n          if ([500, 3000, 10000].indexOf(parseInt(conf.feeTier)) < 0)\n            throw \"Invalid fee tier passed to UniswapV3TwapPriceOracle deployment.\";\n\n          // Deploy oracle\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"UniswapV3TwapPriceOracle\"].abi\n          );\n          var deployArgs = [conf.uniswapV3Factory, conf.feeTier]; // Default to official Uniswap V3 factory\n          priceOracle = await priceOracle\n            .deploy({\n              data: oracleContracts[\"UniswapV3TwapPriceOracle\"].bin,\n              arguments: deployArgs,\n            })\n            .send(options);\n          break;\n        case \"UniswapV3TwapPriceOracleV2\": // Uniswap V3 TWAPs\n          // Input validation\n          if (!conf.uniswapV3Factory)\n            conf.uniswapV3Factory = Fuse.UNISWAP_V3_FACTORY_ADDRESS;\n          if ([500, 3000, 10000].indexOf(parseInt(conf.feeTier)) < 0)\n            throw \"Invalid fee tier passed to UniswapV3TwapPriceOracleV2 deployment.\";\n\n          // Check for existing oracle\n          var oracleFactory = new this.web3.eth.Contract(\n            this.oracleContracts.UniswapV3TwapPriceOracleV2Factory.abi,\n            Fuse.UNISWAP_V3_TWAP_PRICE_ORACLE_V2_FACTORY_CONTRACT_ADDRESS\n          );\n          var oracle = await oracleFactory.methods\n            .oracles(conf.uniswapV3Factory, conf.feeTier, conf.baseToken)\n            .call();\n\n          // Deploy if oracle does not exist\n          if (oracle == \"0x0000000000000000000000000000000000000000\") {\n            await oracleFactory.methods\n              .deploy(conf.uniswapV3Factory, conf.feeTier, conf.baseToken)\n              .send(options);\n            oracle = await oracleFactory.methods\n              .oracles(conf.uniswapV3Factory, conf.feeTier, conf.baseToken)\n              .call();\n          }\n\n          // Instantiate contract\n          var priceOracle = new this.web3.eth.Contract([], oracle);\n\n          break;\n        case \"FixedTokenPriceOracle\":\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"FixedTokenPriceOracle\"].abi\n          );\n          var deployArgs = [conf.baseToken];\n          priceOracle = await priceOracle\n            .deploy({\n              data: oracleContracts[\"FixedTokenPriceOracle\"].bin,\n              arguments: deployArgs,\n            })\n            .send(options);\n          break;\n        case \"MasterPriceOracle\":\n          var initializableClones = new this.web3.eth.Contract(\n            initializableClonesAbi,\n            Fuse.INITIALIZABLE_CLONES_CONTRACT_ADDRESS\n          );\n          var masterPriceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"MasterPriceOracle\"].abi\n          );\n          var deployArgs = [\n            conf.underlyings ? conf.underlyings : [],\n            conf.oracles ? conf.oracles : [],\n            conf.defaultOracle\n              ? conf.defaultOracle\n              : \"0x0000000000000000000000000000000000000000\",\n            conf.admin ? conf.admin : options.from,\n            conf.canAdminOverwrite ? true : false,\n          ];\n          var initializerData = masterPriceOracle.methods\n            .initialize(...deployArgs)\n            .encodeABI();\n          var receipt = await initializableClones.methods\n            .clone(\n              Fuse.MASTER_PRICE_ORACLE_IMPLEMENTATION_CONTRACT_ADDRESS,\n              initializerData\n            )\n            .send(options);\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"MasterPriceOracle\"].abi,\n            receipt.events[\"Deployed\"].returnValues.instance\n          );\n          break;\n        case \"SimplePriceOracle\":\n          var priceOracle = new this.web3.eth.Contract(\n            JSON.parse(\n              contracts[\"contracts/SimplePriceOracle.sol:SimplePriceOracle\"].abi\n            )\n          );\n          priceOracle = await priceOracle\n            .deploy({\n              data:\n                \"0x\" +\n                contracts[\"contracts/SimplePriceOracle.sol:SimplePriceOracle\"]\n                  .bin,\n            })\n            .send(options);\n          break;\n        default:\n          var priceOracle = new this.web3.eth.Contract(\n            oracleContracts[model].abi\n          );\n          priceOracle = await priceOracle\n            .deploy({\n              data: oracleContracts[model].bin,\n            })\n            .send(options);\n          break;\n      }\n\n      return priceOracle.options.address;\n    };\n\n    this.deployComptroller = async function (\n      closeFactor,\n      maxAssets,\n      liquidationIncentive,\n      priceOracle,\n      implementationAddress,\n      options\n    ) {\n      if (!implementationAddress) {\n        var comptroller = new this.web3.eth.Contract(\n          JSON.parse(contracts[\"contracts/Comptroller.sol:Comptroller\"].abi)\n        );\n        comptroller = await comptroller\n          .deploy({\n            data: \"0x\" + contracts[\"contracts/Comptroller.sol:Comptroller\"].bin,\n          })\n          .send(options);\n        implementationAddress = comptroller.options.address;\n      }\n\n      var unitroller = new this.web3.eth.Contract(\n        JSON.parse(contracts[\"contracts/Unitroller.sol:Unitroller\"].abi)\n      );\n      unitroller = await unitroller\n        .deploy({\n          data: \"0x\" + contracts[\"contracts/Unitroller.sol:Unitroller\"].bin,\n        })\n        .send(options);\n      await unitroller.methods\n        ._setPendingImplementation(comptroller.options.address)\n        .send(options);\n      await comptroller.methods\n        ._become(unitroller.options.address)\n        .send(options);\n\n      comptroller.options.address = unitroller.options.address;\n      if (closeFactor)\n        await comptroller.methods._setCloseFactor(closeFactor).send(options);\n      if (maxAssets)\n        await comptroller.methods._setMaxAssets(maxAssets).send(options);\n      if (liquidationIncentive)\n        await comptroller.methods\n          ._setLiquidationIncentive(liquidationIncentive)\n          .send(options);\n      if (priceOracle)\n        await comptroller.methods._setPriceOracle(priceOracle).send(options);\n\n      return [unitroller.options.address, implementationAddress];\n    };\n\n    this.deployAsset = async function (\n      conf,\n      collateralFactor,\n      reserveFactor,\n      adminFee,\n      options,\n      bypassPriceFeedCheck\n    ) {\n      // Deploy new interest rate model via SDK if requested\n      if (\n        [\n          \"WhitePaperInterestRateModel\",\n          \"JumpRateModel\",\n          \"JumpRateModelV2\",\n          \"ReactiveJumpRateModelV2\",\n          \"DAIInterestRateModelV2\", // NOT IN USE\n        ].indexOf(conf.interestRateModel) >= 0\n      ) {\n        try {\n          conf.interestRateModel = await this.deployInterestRateModel(\n            conf.interestRateModel,\n            conf.interestRateModelConf,\n            options\n          ); // TODO: anchorMantissa\n        } catch (error) {\n          throw (\n            \"Deployment of interest rate model failed: \" +\n            (error.message ? error.message : error)\n          );\n        }\n      }\n\n      // Deploy new asset to existing pool via SDK\n      try {\n        var [assetAddress, implementationAddress, receipt] =\n          await this.deployCToken(\n            conf,\n            collateralFactor,\n            reserveFactor,\n            adminFee,\n            options,\n            bypassPriceFeedCheck\n          );\n      } catch (error) {\n        throw (\n          \"Deployment of asset to Fuse pool failed: \" +\n          (error.message ? error.message : error)\n        );\n      }\n\n      return [\n        assetAddress,\n        implementationAddress,\n        conf.interestRateModel,\n        receipt,\n      ];\n    };\n\n    this.deployInterestRateModel = async function (model, conf, options) {\n      // Default model = JumpRateModel\n      if (!model) {\n        model = \"JumpRateModel\";\n      }\n\n      // Get deployArgs\n      var deployArgs = [];\n\n      switch (model) {\n        case \"JumpRateModel\":\n          if (!conf)\n            conf = {\n              baseRatePerYear: \"20000000000000000\",\n              multiplierPerYear: \"200000000000000000\",\n              jumpMultiplierPerYear: \"2000000000000000000\",\n              kink: \"900000000000000000\",\n            };\n          deployArgs = [\n            conf.baseRatePerYear,\n            conf.multiplierPerYear,\n            conf.jumpMultiplierPerYear,\n            conf.kink,\n          ];\n          break;\n        case \"JumpRateModelV2\":\n          if (!conf)\n            conf = {\n              baseRatePerYear: \"20000000000000000\",\n              multiplierPerYear: \"200000000000000000\",\n              jumpMultiplierPerYear: \"2000000000000000000\",\n              kink: \"900000000000000000\",\n              owner: options.from,\n            };\n          deployArgs = [\n            conf.baseRatePerYear,\n            conf.multiplierPerYear,\n            conf.jumpMultiplierPerYear,\n            conf.kink,\n            conf.owner,\n          ];\n          break;\n        case \"ReactiveJumpRateModelV2\":\n          if (!conf)\n            throw \"No configuration passed to deployInterestRateModel.\";\n          deployArgs = [\n            conf.baseRatePerYear,\n            conf.multiplierPerYear,\n            conf.jumpMultiplierPerYear,\n            conf.kink,\n            conf.owner,\n            conf.cToken,\n          ];\n          break;\n        case \"DAIInterestRateModelV2\": // NOT IN USE\n          if (!conf)\n            conf = {\n              jumpMultiplierPerYear: \"2000000000000000000\",\n              kink: \"900000000000000000\",\n            };\n          deployArgs = [\n            conf.jumpMultiplierPerYear,\n            conf.kink,\n            Fuse.DAI_POT,\n            Fuse.DAI_JUG,\n          ];\n          break;\n        case \"WhitePaperInterestRateModel\":\n          if (!conf)\n            conf = {\n              baseRatePerYear: \"20000000000000000\",\n              multiplierPerYear: \"200000000000000000\",\n            };\n          deployArgs = [conf.baseRatePerYear, conf.multiplierPerYear];\n          break;\n      }\n\n      // Deploy InterestRateModel\n      var interestRateModel = new this.web3.eth.Contract(\n        JSON.parse(contracts[\"contracts/\" + model + \".sol:\" + model].abi)\n      );\n      interestRateModel = await interestRateModel\n        .deploy({\n          data: \"0x\" + contracts[\"contracts/\" + model + \".sol:\" + model].bin,\n          arguments: deployArgs,\n        })\n        .send(options);\n      return interestRateModel.options.address;\n    };\n\n    this.deployCToken = async function (\n      conf,\n      collateralFactor,\n      reserveFactor,\n      adminFee,\n      options,\n      bypassPriceFeedCheck\n    ) {\n      // Check collateral factor\n      if (\n        Web3.utils.toBN(collateralFactor).isNeg() ||\n        Web3.utils.toBN(collateralFactor).gt(Web3.utils.toBN(0.9e18))\n      )\n        throw \"Collateral factor must range from 0 to 0.9.\";\n\n      // Check reserve factor + admin fee + Fuse fee\n      if (Web3.utils.toBN(reserveFactor).isNeg())\n        throw \"Reserve factor cannot be negative.\";\n      if (Web3.utils.toBN(adminFee).isNeg())\n        throw \"Admin fee cannot be negative.\";\n      if (\n        !Web3.utils.toBN(reserveFactor).isZero() ||\n        !Web3.utils.toBN(adminFee).isZero()\n      ) {\n        var fuseFee = await this.contracts.FuseFeeDistributor.methods\n          .interestFeeRate()\n          .call();\n        if (\n          Web3.utils\n            .toBN(reserveFactor)\n            .add(Web3.utils.toBN(adminFee))\n            .add(Web3.utils.toBN(fuseFee))\n            .gt(Web3.utils.toBN(1e18))\n        )\n          throw (\n            \"Sum of reserve factor and admin fee should range from 0 to \" +\n            (1 - parseInt(fuseFee) / 1e18) +\n            \".\"\n          );\n      }\n\n      return conf.underlying !== undefined &&\n        conf.underlying !== null &&\n        conf.underlying.length > 0 &&\n        !Web3.utils.toBN(conf.underlying).isZero()\n        ? await this.deployCErc20(\n            conf,\n            collateralFactor,\n            reserveFactor,\n            adminFee,\n            Fuse.CERC20_DELEGATE_CONTRACT_ADDRESS\n              ? Fuse.CERC20_DELEGATE_CONTRACT_ADDRESS\n              : null,\n            options,\n            bypassPriceFeedCheck\n          )\n        : await this.deployCEther(\n            conf,\n            collateralFactor,\n            reserveFactor,\n            adminFee,\n            Fuse.CETHER_DELEGATE_CONTRACT_ADDRESS\n              ? Fuse.CETHER_DELEGATE_CONTRACT_ADDRESS\n              : null,\n            options\n          );\n    };\n\n    this.deployCEther = async function (\n      conf,\n      collateralFactor,\n      reserveFactor,\n      adminFee,\n      implementationAddress,\n      options\n    ) {\n      // Deploy CEtherDelegate implementation contract if necessary\n      if (!implementationAddress) {\n        var cEtherDelegate = new this.web3.eth.Contract(\n          JSON.parse(\n            contracts[\"contracts/CEtherDelegate.sol:CEtherDelegate\"].abi\n          )\n        );\n        cEtherDelegate = await cEtherDelegate\n          .deploy({\n            data:\n              \"0x\" +\n              contracts[\"contracts/CEtherDelegate.sol:CEtherDelegate\"].bin,\n          })\n          .send(options);\n        implementationAddress = cEtherDelegate.options.address;\n      }\n\n      // Deploy CEtherDelegator proxy contract\n      let deployArgs = [\n        conf.comptroller,\n        conf.interestRateModel,\n        conf.name,\n        conf.symbol,\n        implementationAddress,\n        \"0x00\",\n        reserveFactor ? reserveFactor.toString() : 0,\n        adminFee ? adminFee.toString() : 0,\n      ];\n      var constructorData = this.web3.eth.abi.encodeParameters(\n        [\n          \"address\",\n          \"address\",\n          \"string\",\n          \"string\",\n          \"address\",\n          \"bytes\",\n          \"uint256\",\n          \"uint256\",\n        ],\n        deployArgs\n      );\n      var comptroller = new this.web3.eth.Contract(\n        JSON.parse(contracts[\"contracts/Comptroller.sol:Comptroller\"].abi),\n        conf.comptroller\n      );\n      var errorCode = await comptroller.methods\n        ._deployMarket(\n          \"0x0000000000000000000000000000000000000000\",\n          constructorData,\n          collateralFactor\n        )\n        .call(options);\n      if (errorCode != 0)\n        throw (\n          \"Failed to deploy market with error code: \" +\n          Fuse.COMPTROLLER_ERROR_CODES[errorCode]\n        );\n      var receipt = await comptroller.methods\n        ._deployMarket(\n          \"0x0000000000000000000000000000000000000000\",\n          constructorData,\n          collateralFactor\n        )\n        .send(options);\n      var cEtherDelegatorAddress = this.getCreate2Address(\n        Fuse.FUSE_FEE_DISTRIBUTOR_CONTRACT_ADDRESS,\n        [\n          conf.comptroller,\n          \"0x0000000000000000000000000000000000000000\",\n          receipt.blockNumber,\n        ],\n        this.web3.utils.sha3(\n          \"0x\" +\n            contracts[\"contracts/CEtherDelegator.sol:CEtherDelegator\"].bin +\n            constructorData.substring(2)\n        )\n      );\n\n      // Return cToken proxy and implementation contract addresses\n      return [cEtherDelegatorAddress, implementationAddress, receipt];\n    };\n\n    this.deployCErc20 = async function (\n      conf,\n      collateralFactor,\n      reserveFactor,\n      adminFee,\n      implementationAddress,\n      options,\n      bypassPriceFeedCheck\n    ) {\n      // Get Comptroller\n      var comptroller = new this.web3.eth.Contract(\n        JSON.parse(contracts[\"contracts/Comptroller.sol:Comptroller\"].abi),\n        conf.comptroller\n      );\n\n      // Check for price feed assuming !bypassPriceFeedCheck\n      if (!bypassPriceFeedCheck)\n        await this.checkForCErc20PriceFeed(comptroller, conf);\n\n      // Deploy CErc20Delegate implementation contract if necessary\n      if (!implementationAddress) {\n        if (!conf.delegateContractName)\n          conf.delegateContractName = \"CErc20Delegate\";\n        var cErc20Delegate = new this.web3.eth.Contract(\n          JSON.parse(\n            contracts[\n              \"contracts/\" +\n                conf.delegateContractName +\n                \".sol:\" +\n                conf.delegateContractName\n            ].abi\n          )\n        );\n        cErc20Delegate = await cErc20Delegate\n          .deploy({\n            data:\n              \"0x\" +\n              contracts[\n                \"contracts/\" +\n                  conf.delegateContractName +\n                  \".sol:\" +\n                  conf.delegateContractName\n              ].bin,\n          })\n          .send(options);\n        implementationAddress = cErc20Delegate.options.address;\n      }\n\n      let deployArgs = [\n        conf.underlying,\n        conf.comptroller,\n        conf.interestRateModel,\n        conf.name,\n        conf.symbol,\n        implementationAddress,\n        \"0x00\",\n        reserveFactor ? reserveFactor.toString() : 0,\n        adminFee ? adminFee.toString() : 0,\n      ];\n      var constructorData = this.web3.eth.abi.encodeParameters(\n        [\n          \"address\",\n          \"address\",\n          \"address\",\n          \"string\",\n          \"string\",\n          \"address\",\n          \"bytes\",\n          \"uint256\",\n          \"uint256\",\n        ],\n        deployArgs\n      );\n      var errorCode = await comptroller.methods\n        ._deployMarket(false, constructorData, collateralFactor)\n        .call(options);\n      if (errorCode != 0)\n        throw (\n          \"Failed to deploy market with error code: \" +\n          Fuse.COMPTROLLER_ERROR_CODES[errorCode]\n        );\n      var receipt = await comptroller.methods\n        ._deployMarket(false, constructorData, collateralFactor)\n        .send(options);\n      var cErc20DelegatorAddress = this.getCreate2Address(\n        Fuse.FUSE_FEE_DISTRIBUTOR_CONTRACT_ADDRESS,\n        [conf.comptroller, conf.underlying, receipt.blockNumber],\n        this.web3.utils.sha3(\n          \"0x\" +\n            contracts[\"contracts/CErc20Delegator.sol:CErc20Delegator\"].bin +\n            constructorData.substring(2)\n        )\n      );\n\n      // Return cToken proxy and implementation contract addresses\n      return [cErc20DelegatorAddress, implementationAddress, receipt];\n    };\n\n    this.identifyPriceOracle = async function (priceOracleAddress) {\n      // Get PriceOracle type from runtime bytecode hash\n      var runtimeBytecodeHash = Web3.utils.sha3(\n        await this.web3.eth.getCode(priceOracleAddress)\n      );\n      if (!runtimeBytecodeHash || !(typeof runtimeBytecodeHash === 'string' || runtimeBytecodeHash instanceof String)) return null;\n      runtimeBytecodeHash = runtimeBytecodeHash.toLowerCase();\n\n      for (const oracleContractName of Object.keys(\n        Fuse.PRICE_ORACLE_RUNTIME_BYTECODE_HASHES\n      )) {\n        const valueOrArr =\n          Fuse.PRICE_ORACLE_RUNTIME_BYTECODE_HASHES[oracleContractName];\n\n        if (Array.isArray(valueOrArr)) {\n          for (const potentialHash of valueOrArr) {\n            if (runtimeBytecodeHash == potentialHash.toLowerCase()) return oracleContractName;\n          }\n        } else {\n          if (runtimeBytecodeHash == valueOrArr.toLowerCase()) return oracleContractName;\n        }\n      }\n\n      return \"\";\n    };\n\n    this.identifyInterestRateModel = async function (interestRateModelAddress) {\n      // Get interest rate model type from runtime bytecode hash and init class\n      var interestRateModels = {\n        JumpRateModel: JumpRateModel,\n        JumpRateModelV2: JumpRateModelV2,\n        DAIInterestRateModelV2: DAIInterestRateModelV2,\n        WhitePaperInterestRateModel: WhitePaperInterestRateModel,\n      };\n\n      var runtimeBytecodeHash = Web3.utils.sha3(\n        await this.web3.eth.getCode(interestRateModelAddress)\n      );\n      if (!runtimeBytecodeHash || !(typeof runtimeBytecodeHash === 'string' || runtimeBytecodeHash instanceof String)) return null;\n      runtimeBytecodeHash = runtimeBytecodeHash.toLowerCase();\n      var interestRateModel = null;\n\n      outerLoop: for (const model of [\n        \"JumpRateModel\",\n        \"JumpRateModelV2\",\n        \"DAIInterestRateModelV2\",\n        \"WhitePaperInterestRateModel\",\n      ]) {\n        if (interestRateModels[model].RUNTIME_BYTECODE_HASHES !== undefined) {\n          for (const hash of interestRateModels[model]\n            .RUNTIME_BYTECODE_HASHES) {\n            if (runtimeBytecodeHash == hash.toLowerCase()) {\n              interestRateModel = new interestRateModels[model]();\n              break outerLoop;\n            }\n          }\n        } else if (\n          runtimeBytecodeHash == interestRateModels[model].RUNTIME_BYTECODE_HASH.toLowerCase()\n        ) {\n          interestRateModel = new interestRateModels[model]();\n          break;\n        }\n      }\n\n      return interestRateModel;\n    };\n\n    this.getInterestRateModel = async function (assetAddress) {\n      // Get interest rate model address from asset address\n      var assetContract = new this.web3.eth.Contract(\n        JSON.parse(\n          contracts[\"contracts/CTokenInterfaces.sol:CTokenInterface\"].abi\n        ),\n        assetAddress\n      );\n      var interestRateModelAddress = await assetContract.methods\n        .interestRateModel()\n        .call();\n\n      var interestRateModel = await this.identifyInterestRateModel(\n        interestRateModelAddress\n      );\n\n      await interestRateModel.init(\n        this.web3,\n        interestRateModelAddress,\n        assetAddress\n      );\n      return interestRateModel;\n    };\n\n    this.checkForCErc20PriceFeed = async function (comptroller, conf) {\n      // Check for ChainlinkPriceOracle with a corresponding feed\n      var priceOracle = await comptroller.methods.oracle().call();\n      var chainlinkPriceOracle = new this.web3.eth.Contract(\n        oracleContracts[\"ChainlinkPriceOracle\"].abi,\n        priceOracle\n      );\n\n      if (conf.underlying.toLowerCase() == Fuse.WETH_ADDRESS.toLowerCase())\n        var chainlinkPriceFeed = true;\n      else\n        try {\n          var chainlinkPriceFeed = await chainlinkPriceOracle.methods\n            .hasPriceFeed(conf.underlying)\n            .call();\n        } catch {}\n\n      if (chainlinkPriceFeed === undefined || !chainlinkPriceFeed) {\n        // Check for PreferredPriceOracle with underlying ChainlinkPriceOracle with a corresponding feed\n        var preferredPriceOracle = new this.web3.eth.Contract(\n          oracleContracts[\"PreferredPriceOracle\"].abi,\n          priceOracle\n        );\n\n        try {\n          var chainlinkPriceOracle = await preferredPriceOracle.methods\n            .chainlinkOracle()\n            .call();\n          chainlinkPriceOracle = new this.web3.eth.Contract(\n            oracleContracts[\"ChainlinkPriceOracle\"].abi,\n            chainlinkPriceOracle\n          );\n          var chainlinkPriceFeed = await chainlinkPriceOracle.methods\n            .hasPriceFeed(conf.underlying)\n            .call();\n        } catch {}\n      }\n\n      if (chainlinkPriceFeed === undefined || !chainlinkPriceFeed) {\n        // Check if we can get a UniswapAnchoredView\n        var isUniswapAnchoredView = false;\n\n        try {\n          var uniswapOrUniswapAnchoredView = new this.web3.eth.Contract(\n            JSON.parse(\n              openOracleContracts[\n                \"contracts/Uniswap/UniswapAnchoredView.sol:UniswapAnchoredView\"\n              ].abi\n            ),\n            priceOracle\n          );\n          await uniswapOrUniswapAnchoredView.methods\n            .IS_UNISWAP_ANCHORED_VIEW()\n            .call();\n          isUniswapAnchoredView = true;\n        } catch {\n          try {\n            var uniswapOrUniswapAnchoredView = new this.web3.eth.Contract(\n              JSON.parse(\n                openOracleContracts[\n                  \"contracts/Uniswap/UniswapView.sol:UniswapView\"\n                ].abi\n              ),\n              priceOracle\n            );\n            await uniswapOrUniswapAnchoredView.methods.IS_UNISWAP_VIEW().call();\n          } catch {\n            // Check for PreferredPriceOracle with underlying UniswapAnchoredView\n            var preferredPriceOracle = new this.web3.eth.Contract(\n              oracleContracts[\"PreferredPriceOracle\"].abi,\n              priceOracle\n            );\n\n            try {\n              var uniswapOrUniswapAnchoredView =\n                await preferredPriceOracle.methods.secondaryOracle().call();\n            } catch {\n              throw \"Underlying token price for this asset is not available via this oracle.\";\n            }\n\n            try {\n              uniswapOrUniswapAnchoredView = new this.web3.eth.Contract(\n                JSON.parse(\n                  openOracleContracts[\n                    \"contracts/Uniswap/UniswapAnchoredView.sol:UniswapAnchoredView\"\n                  ].abi\n                ),\n                uniswapOrUniswapAnchoredView\n              );\n              await uniswapOrUniswapAnchoredView.methods\n                .IS_UNISWAP_ANCHORED_VIEW()\n                .call();\n              isUniswapAnchoredView = true;\n            } catch {\n              try {\n                uniswapOrUniswapAnchoredView = new this.web3.eth.Contract(\n                  JSON.parse(\n                    openOracleContracts[\n                      \"contracts/Uniswap/UniswapView.sol:UniswapView\"\n                    ].abi\n                  ),\n                  uniswapOrUniswapAnchoredView\n                );\n                await uniswapOrUniswapAnchoredView.methods\n                  .IS_UNISWAP_VIEW()\n                  .call();\n              } catch {\n                throw \"Underlying token price not available via ChainlinkPriceOracle, and no UniswapAnchoredView or UniswapView was found.\";\n              }\n            }\n          }\n        }\n\n        // Check if the token already exists\n        try {\n          await uniswapOrUniswapAnchoredView.methods\n            .getTokenConfigByUnderlying(conf.underlying)\n            .call();\n        } catch {\n          // If not, add it!\n          var underlyingToken = new this.web3.eth.Contract(\n            JSON.parse(\n              contracts[\"contracts/EIP20Interface.sol:EIP20Interface\"].abi\n            ),\n            conf.underlying\n          );\n          var underlyingSymbol = await underlyingToken.methods.symbol().call();\n          var underlyingDecimals = await underlyingToken.methods\n            .decimals()\n            .call();\n\n          const PriceSource = {\n            FIXED_ETH: 0,\n            FIXED_USD: 1,\n            REPORTER: 2,\n            TWAP: 3,\n          };\n\n          if (\n            conf.underlying.toLowerCase() == Fuse.WETH_ADDRESS.toLowerCase()\n          ) {\n            // WETH\n            await uniswapOrUniswapAnchoredView.methods\n              .add([\n                {\n                  underlying: conf.underlying,\n                  symbolHash: Web3.utils.soliditySha3(underlyingSymbol),\n                  baseUnit: Web3.utils\n                    .toBN(10)\n                    .pow(Web3.utils.toBN(underlyingDecimals))\n                    .toString(),\n                  priceSource: PriceSource.FIXED_ETH,\n                  fixedPrice: Web3.utils.toBN(1e18).toString(),\n                  uniswapMarket: \"0x0000000000000000000000000000000000000000\",\n                  isUniswapReversed: false,\n                },\n              ])\n              .send({ ...options });\n          } else if (\n            conf.underlying === \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"\n          ) {\n            // USDC\n            if (isUniswapAnchoredView) {\n              await uniswapOrUniswapAnchoredView.methods\n                .add([\n                  {\n                    underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n                    symbolHash: Web3.utils.soliditySha3(\"USDC\"),\n                    baseUnit: Web3.utils.toBN(1e6).toString(),\n                    priceSource: PriceSource.FIXED_USD,\n                    fixedPrice: 1e6,\n                    uniswapMarket: \"0x0000000000000000000000000000000000000000\",\n                    isUniswapReversed: false,\n                  },\n                ])\n                .send({ ...options });\n            } else {\n              await uniswapOrUniswapAnchoredView.methods\n                .add([\n                  {\n                    underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n                    symbolHash: Web3.utils.soliditySha3(\"USDC\"),\n                    baseUnit: Web3.utils.toBN(1e6).toString(),\n                    priceSource: PriceSource.TWAP,\n                    fixedPrice: 0,\n                    uniswapMarket: \"0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc\",\n                    isUniswapReversed: false,\n                  },\n                ])\n                .send({ ...options });\n              await uniswapOrUniswapAnchoredView.methods\n                .postPrices([\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"])\n                .send({ ...options });\n            }\n          } else {\n            // Ask about fixed prices if UniswapAnchoredView or if UniswapView is not public; otherwise, prompt for Uniswap V2 pair\n            if (\n              isUniswapAnchoredView ||\n              !(await uniswapOrUniswapAnchoredView.methods.isPublic().call())\n            ) {\n              // Check for fixed ETH\n              var fixedEth = confirm(\n                \"Should the price of this token be fixed to 1 ETH?\"\n              );\n\n              if (fixedEth) {\n                await uniswapOrUniswapAnchoredView.methods\n                  .add([\n                    {\n                      underlying: conf.underlying,\n                      symbolHash: Web3.utils.soliditySha3(underlyingSymbol),\n                      baseUnit: Web3.utils\n                        .toBN(10)\n                        .pow(Web3.utils.toBN(underlyingDecimals))\n                        .toString(),\n                      priceSource: PriceSource.FIXED_ETH,\n                      fixedPrice: Web3.utils.toBN(1e18).toString(),\n                      uniswapMarket:\n                        \"0x0000000000000000000000000000000000000000\",\n                      isUniswapReversed: false,\n                    },\n                  ])\n                  .send({ ...options });\n              } else {\n                // Check for fixed USD\n                var msg = \"Should the price of this token be fixed to 1 USD?\";\n                if (!isUniswapAnchoredView)\n                  msg +=\n                    \" If so, please note that you will need to run postPrices on your UniswapView for USDC instead of \" +\n                    underlyingSymbol +\n                    \" (as technically, the \" +\n                    underlyingSymbol +\n                    \" price would be fixed to 1 USDC).\";\n                var fixedUsd = confirm(msg);\n\n                if (fixedUsd) {\n                  var tokenConfigs = [\n                    {\n                      underlying: conf.underlying,\n                      symbolHash: Web3.utils.soliditySha3(underlyingSymbol),\n                      baseUnit: Web3.utils\n                        .toBN(10)\n                        .pow(Web3.utils.toBN(underlyingDecimals))\n                        .toString(),\n                      priceSource: PriceSource.FIXED_USD,\n                      fixedPrice: Web3.utils.toBN(1e6).toString(),\n                      uniswapMarket:\n                        \"0x0000000000000000000000000000000000000000\",\n                      isUniswapReversed: false,\n                    },\n                  ];\n\n                  // UniswapView only: add USDC token config if not present so price oracle can convert from USD to ETH\n                  if (!isUniswapAnchoredView) {\n                    try {\n                      await uniswapOrUniswapAnchoredView.methods\n                        .getTokenConfigByUnderlying(\n                          \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"\n                        )\n                        .call();\n                    } catch (error) {\n                      tokenConfigs.push({\n                        underlying:\n                          \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n                        symbolHash: Web3.utils.soliditySha3(\"USDC\"),\n                        baseUnit: Web3.utils.toBN(1e6).toString(),\n                        priceSource: PriceSource.TWAP,\n                        fixedPrice: 0,\n                        uniswapMarket:\n                          \"0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc\",\n                        isUniswapReversed: false,\n                      });\n                    }\n                  }\n\n                  // Add token config(s)\n                  await uniswapOrUniswapAnchoredView.methods\n                    .add(tokenConfigs)\n                    .send({ ...options });\n\n                  // UniswapView only: post USDC price\n                  if (!isUniswapAnchoredView)\n                    await uniswapOrUniswapAnchoredView.methods\n                      .postPrices([\n                        \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n                      ])\n                      .send({ ...options });\n                } else await promptForUniswapV2Pair(this); // Prompt for Uniswap V2 pair\n              }\n            } else await promptForUniswapV2Pair(this); // Prompt for Uniswap V2 pair\n\n            async function promptForUniswapV2Pair(self) {\n              // Predict correct Uniswap V2 pair\n              var isNotReversed =\n                conf.underlying.toLowerCase() < Fuse.WETH_ADDRESS.toLowerCase();\n              var tokens = isNotReversed\n                ? [conf.underlying, Fuse.WETH_ADDRESS]\n                : [Fuse.WETH_ADDRESS, conf.underlying];\n              var uniswapV2Pair = self.getCreate2Address(\n                Fuse.UNISWAP_V2_FACTORY_ADDRESS,\n                tokens,\n                Fuse.UNISWAP_V2_PAIR_INIT_CODE_HASH\n              );\n\n              // Double-check with user that pair is correct\n              var correctUniswapV2Pair = confirm(\n                \"We have determined that the correct Uniswap V2 pair for \" +\n                  (isNotReversed\n                    ? underlyingSymbol + \"/ETH\"\n                    : \"ETH/\" + underlyingSymbol) +\n                  \" is \" +\n                  uniswapV2Pair +\n                  \". Is this correct?\"\n              );\n\n              if (!correctUniswapV2Pair) {\n                uniswapV2Pair = prompt(\n                  \"Please enter the underlying token's ETH-based Uniswap V2 pair address:\"\n                );\n                if (uniswapV2Pair.length == 0)\n                  throw isUniswapAnchoredView\n                    ? \"Reported prices must have a Uniswap V2 pair as an anchor!\"\n                    : \"Non-fixed prices must have a Uniswap V2 pair from which to source prices!\";\n                isNotReversed = confirm(\n                  \"Press OK if the Uniswap V2 pair is \" +\n                    underlyingSymbol +\n                    \"/ETH. If it is reversed (ETH/\" +\n                    underlyingSymbol +\n                    \"), press Cancel.\"\n                );\n              }\n\n              // Add asset to oracle\n              await uniswapOrUniswapAnchoredView.methods\n                .add([\n                  {\n                    underlying: conf.underlying,\n                    symbolHash: Web3.utils.soliditySha3(underlyingSymbol),\n                    baseUnit: Web3.utils\n                      .toBN(10)\n                      .pow(Web3.utils.toBN(underlyingDecimals))\n                      .toString(),\n                    priceSource: isUniswapAnchoredView\n                      ? PriceSource.REPORTER\n                      : PriceSource.TWAP,\n                    fixedPrice: 0,\n                    uniswapMarket: uniswapV2Pair,\n                    isUniswapReversed: !isNotReversed,\n                  },\n                ])\n                .send({ ...options });\n\n              // Post first price\n              if (isUniswapAnchoredView) {\n                // Post reported price or (if price has never been reported) have user report and post price\n                var priceData = new self.web3.eth.Contract(\n                  JSON.parse(\n                    openOracleContracts[\n                      \"contracts/OpenOraclePriceData.sol:OpenOraclePriceData\"\n                    ].abi\n                  ),\n                  await uniswapOrUniswapAnchoredView.methods.priceData().call()\n                );\n                var reporter = await uniswapOrUniswapAnchoredView.methods\n                  .reporter()\n                  .call();\n                if (\n                  Web3.utils\n                    .toBN(\n                      await priceData.methods\n                        .getPrice(reporter, underlyingSymbol)\n                        .call()\n                    )\n                    .gt(Web3.utils.toBN(0))\n                )\n                  await uniswapOrUniswapAnchoredView.methods\n                    .postPrices([], [], [underlyingSymbol])\n                    .send({ ...options });\n                else\n                  prompt(\n                    \"It looks like prices have never been reported for \" +\n                      underlyingSymbol +\n                      \". Please click OK once you have reported and posted prices for\" +\n                      underlyingSymbol +\n                      \".\"\n                  );\n              } else {\n                await uniswapOrUniswapAnchoredView.methods\n                  .postPrices([conf.underlying])\n                  .send({ ...options });\n              }\n            }\n          }\n        }\n      }\n    };\n\n    this.getPriceOracle = async function (oracleAddress) {\n      // Get PriceOracle type from runtime bytecode hash\n      var runtimeBytecodeHash = Web3.utils.sha3(\n        await this.web3.eth.getCode(oracleAddress)\n      );\n      if (!runtimeBytecodeHash || !(typeof runtimeBytecodeHash === 'string' || runtimeBytecodeHash instanceof String)) return \"\";\n      runtimeBytecodeHash = runtimeBytecodeHash.toLowerCase();\n      \n      for (const model of Object.keys(\n        Fuse.PRICE_ORACLE_RUNTIME_BYTECODE_HASHES\n      ))\n        if (\n          runtimeBytecodeHash ==\n          Fuse.PRICE_ORACLE_RUNTIME_BYTECODE_HASHES[model].toLowerCase()\n        )\n          return model;\n      return \"\";\n    };\n\n    this.deployRewardsDistributor = async function (rewardToken, options) {\n      const distributor = new this.web3.eth.Contract(\n        JSON.parse(\n          contracts[\n            \"contracts/RewardsDistributorDelegator.sol:RewardsDistributorDelegator\"\n          ].abi\n        )\n      );\n      console.log({ options, rewardToken });\n\n      const deployedDistributor = await distributor\n        .deploy({\n          data:\n            \"0x\" +\n            contracts[\n              \"contracts/RewardsDistributorDelegator.sol:RewardsDistributorDelegator\"\n            ].bin,\n          arguments: [\n            options.from,\n            rewardToken,\n            Fuse.REWARDS_DISTRIBUTOR_DELEGATE_CONTRACT_ADDRESS,\n          ],\n        })\n        .send(options);\n      // const rdAddress = distributor.options.address;\n      return deployedDistributor;\n    };\n\n    this.checkCardinality = async function (uniswapV3Pool) {\n      var uniswapV3PoolContract = new this.web3.eth.Contract(\n        uniswapV3PoolAbiSlim,\n        uniswapV3Pool\n      );\n      const shouldPrime =\n        (await uniswapV3PoolContract.methods.slot0().call())\n          .observationCardinalityNext < 64;\n      return shouldPrime;\n    };\n\n    this.primeUniswapV3Oracle = async function (uniswapV3Pool, options) {\n      var uniswapV3PoolContract = new this.web3.eth.Contract(\n        uniswapV3PoolAbiSlim,\n        uniswapV3Pool\n      );\n      await uniswapV3PoolContract.methods\n        .increaseObservationCardinalityNext(64)\n        .send(options);\n    };\n\n    this.identifyInterestRateModelName = (irmAddress) => {\n      if (!irmAddress || !(typeof irmAddress === 'string' || irmAddress instanceof String)) return \"\";\n      irmAddress = irmAddress.toLowerCase();\n      let name = \"\";\n\n      Object.entries(\n        Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n      ).forEach(([key, value]) => {\n        if (value.toLowerCase() === irmAddress) {\n          name = key;\n        }\n      });\n      return name;\n    };\n  }\n\n  static Web3 = Web3;\n  static BN = Web3.utils.BN;\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/irm/DAIInterestRateModelV2.js",
    "content": "import Web3 from \"web3\";\n\nimport JumpRateModel from \"./JumpRateModel.js\";\n\nvar contracts = require(__dirname + \"/../contracts/compound-protocol.min.json\")\n  .contracts;\n\nexport default class DAIInterestRateModelV2 extends JumpRateModel {\n  static RUNTIME_BYTECODE_HASH =\n    \"0x4b4c4f6386fd72d3f041a03e9eee3945189457fcf4299e99098d360a9f619539\";\n\n  initialized;\n\n  dsrPerBlock;\n\n  cash;\n  borrows;\n  reserves;\n\n  async init(web3, interestRateModelAddress, assetAddress) {\n    await super.init(web3, interestRateModelAddress, assetAddress);\n\n    var contract = new web3.eth.Contract(\n      JSON.parse(\n        contracts[\"contracts/DAIInterestRateModelV2.sol:DAIInterestRateModelV2\"]\n          .abi\n      ),\n      interestRateModelAddress\n    );\n    this.dsrPerBlock = Web3.utils.toBN(\n      await contract.methods.dsrPerBlock().call()\n    );\n\n    contract = new web3.eth.Contract(\n      JSON.parse(\n        contracts[\"contracts/CTokenInterfaces.sol:CTokenInterface\"].abi\n      ),\n      assetAddress\n    );\n    this.cash = Web3.utils.toBN(await contract.methods.getCash().call());\n    this.borrows = Web3.utils.toBN(\n      await contract.methods.totalBorrowsCurrent().call()\n    );\n    this.reserves = Web3.utils.toBN(\n      await contract.methods.totalReserves().call()\n    );\n  }\n\n  async _init(\n    web3,\n    interestRateModelAddress,\n    reserveFactorMantissa,\n    adminFeeMantissa,\n    fuseFeeMantissa\n  ) {\n    await super._init(\n      web3,\n      interestRateModelAddress,\n      reserveFactorMantissa,\n      adminFeeMantissa,\n      fuseFeeMantissa\n    );\n\n    var contract = new web3.eth.Contract(\n      JSON.parse(\n        contracts[\"contracts/DAIInterestRateModelV2.sol:DAIInterestRateModelV2\"]\n          .abi\n      ),\n      interestRateModelAddress\n    );\n    this.dsrPerBlock = Web3.utils.toBN(\n      await contract.methods.dsrPerBlock().call()\n    );\n\n    this.cash = Web3.utils.toBN(0);\n    this.borrows = Web3.utils.toBN(0);\n    this.reserves = Web3.utils.toBN(0);\n  }\n\n  async __init(\n    baseRatePerBlock,\n    multiplierPerBlock,\n    jumpMultiplierPerBlock,\n    kink,\n    reserveFactorMantissa,\n    adminFeeMantissa,\n    fuseFeeMantissa\n  ) {\n    await super.__init(\n      baseRatePerBlock,\n      multiplierPerBlock,\n      jumpMultiplierPerBlock,\n      kink,\n      reserveFactorMantissa,\n      adminFeeMantissa,\n      fuseFeeMantissa\n    );\n    this.dsrPerBlock = Web3.utils.toBN(0); // TODO: Make this work if DSR ever goes positive again\n    this.cash = Web3.utils.toBN(0);\n    this.borrows = Web3.utils.toBN(0);\n    this.reserves = Web3.utils.toBN(0);\n  }\n\n  getSupplyRate(utilizationRate) {\n    if (!this.initialized)\n      throw new Error(\"Interest rate model class not initialized.\");\n\n    const protocolRate = super.getSupplyRate(\n      utilizationRate,\n      this.reserveFactorMantissa\n    );\n    const underlying = this.cash.add(this.borrows).sub(this.reserves);\n\n    if (underlying.isZero()) {\n      return protocolRate;\n    } else {\n      const cashRate = this.cash.mul(this.dsrPerBlock).div(underlying);\n      return cashRate.add(protocolRate);\n    }\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/irm/JumpRateModel.js",
    "content": "import Web3 from \"web3\";\n\nvar contracts = require(__dirname + \"/../contracts/compound-protocol.min.json\")\n  .contracts;\n\nexport default class JumpRateModel {\n  static RUNTIME_BYTECODE_HASHES = [\n    \"0x00f083d6c0022358b6b3565c026e815cfd6fc9dcd6c3ad1125e72cbb81f41b2a\",\n    \"0x47d7a0e70c9e049792bb96abf3c7527c7543154450c6267f31b52e2c379badc7\"\n  ];\n\n  initialized;\n\n  baseRatePerBlock;\n  multiplierPerBlock;\n  jumpMultiplierPerBlock;\n  kink;\n\n  reserveFactorMantissa;\n\n  async init(web3, interestRateModelAddress, assetAddress) {\n    var contract = new web3.eth.Contract(\n      JSON.parse(contracts[\"contracts/JumpRateModel.sol:JumpRateModel\"].abi),\n      interestRateModelAddress\n    );\n    this.baseRatePerBlock = Web3.utils.toBN(\n      await contract.methods.baseRatePerBlock().call()\n    );\n    this.multiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.multiplierPerBlock().call()\n    );\n    this.jumpMultiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.jumpMultiplierPerBlock().call()\n    );\n    this.kink = Web3.utils.toBN(await contract.methods.kink().call());\n\n    contract = new web3.eth.Contract(\n      JSON.parse(\n        contracts[\"contracts/CTokenInterfaces.sol:CTokenInterface\"].abi\n      ),\n      assetAddress\n    );\n    this.reserveFactorMantissa = Web3.utils.toBN(\n      await contract.methods.reserveFactorMantissa().call()\n    );\n    this.reserveFactorMantissa.iadd(\n      Web3.utils.toBN(await contract.methods.adminFeeMantissa().call())\n    );\n    this.reserveFactorMantissa.iadd(\n      Web3.utils.toBN(await contract.methods.fuseFeeMantissa().call())\n    );\n\n    this.initialized = true;\n  }\n\n  async _init(\n    web3,\n    interestRateModelAddress,\n    reserveFactorMantissa,\n    adminFeeMantissa,\n    fuseFeeMantissa\n  ) {\n    var contract = new web3.eth.Contract(\n      JSON.parse(contracts[\"contracts/JumpRateModel.sol:JumpRateModel\"].abi),\n      interestRateModelAddress\n    );\n    this.baseRatePerBlock = Web3.utils.toBN(\n      await contract.methods.baseRatePerBlock().call()\n    );\n    this.multiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.multiplierPerBlock().call()\n    );\n    this.jumpMultiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.jumpMultiplierPerBlock().call()\n    );\n    this.kink = Web3.utils.toBN(await contract.methods.kink().call());\n\n    this.reserveFactorMantissa = Web3.utils.toBN(reserveFactorMantissa);\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(adminFeeMantissa));\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(fuseFeeMantissa));\n\n    this.initialized = true;\n  }\n\n  async __init(\n    baseRatePerBlock,\n    multiplierPerBlock,\n    jumpMultiplierPerBlock,\n    kink,\n    reserveFactorMantissa,\n    adminFeeMantissa,\n    fuseFeeMantissa\n  ) {\n    this.baseRatePerBlock = Web3.utils.toBN(baseRatePerBlock);\n    this.multiplierPerBlock = Web3.utils.toBN(multiplierPerBlock);\n    this.jumpMultiplierPerBlock = Web3.utils.toBN(jumpMultiplierPerBlock);\n    this.kink = Web3.utils.toBN(kink);\n\n    this.reserveFactorMantissa = Web3.utils.toBN(reserveFactorMantissa);\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(adminFeeMantissa));\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(fuseFeeMantissa));\n\n    this.initialized = true;\n  }\n\n  getBorrowRate(utilizationRate) {\n    if (!this.initialized)\n      throw new Error(\"Interest rate model class not initialized.\");\n\n    if (utilizationRate.lte(this.kink)) {\n      return utilizationRate\n        .mul(this.multiplierPerBlock)\n        .div(Web3.utils.toBN(1e18))\n        .add(this.baseRatePerBlock);\n    } else {\n      const normalRate = this.kink\n        .mul(this.multiplierPerBlock)\n        .div(Web3.utils.toBN(1e18))\n        .add(this.baseRatePerBlock);\n      const excessUtil = utilizationRate.sub(this.kink);\n      return excessUtil\n        .mul(this.jumpMultiplierPerBlock)\n        .div(Web3.utils.toBN(1e18))\n        .add(normalRate);\n    }\n  }\n\n  getSupplyRate(utilizationRate) {\n    if (!this.initialized)\n      throw new Error(\"Interest rate model class not initialized.\");\n\n    const oneMinusReserveFactor = Web3.utils\n      .toBN(1e18)\n      .sub(this.reserveFactorMantissa);\n    const borrowRate = this.getBorrowRate(utilizationRate);\n    const rateToPool = borrowRate\n      .mul(oneMinusReserveFactor)\n      .div(Web3.utils.toBN(1e18));\n    return utilizationRate.mul(rateToPool).div(Web3.utils.toBN(1e18));\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/irm/JumpRateModelV2.js",
    "content": "import Web3 from \"web3\";\n\nvar contracts = require(__dirname + \"/../contracts/compound-protocol.min.json\")\n  .contracts;\n\nexport default class JumpRateModelV2 {\n  static RUNTIME_BYTECODE_HASH =\n    \"0xc6df64d77d18236fa0e3a1bb939e979d14453af5c8287891decfb67710972c3c\";\n\n  initialized;\n\n  baseRatePerBlock;\n  multiplierPerBlock;\n  jumpMultiplierPerBlock;\n  kink;\n\n  reserveFactorMantissa;\n\n  async init(web3, interestRateModelAddress, assetAddress) {\n    var contract = new web3.eth.Contract(\n      JSON.parse(contracts[\"contracts/JumpRateModel.sol:JumpRateModel\"].abi),\n      interestRateModelAddress\n    );\n    this.baseRatePerBlock = Web3.utils.toBN(\n      await contract.methods.baseRatePerBlock().call()\n    );\n    this.multiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.multiplierPerBlock().call()\n    );\n    this.jumpMultiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.jumpMultiplierPerBlock().call()\n    );\n    this.kink = Web3.utils.toBN(await contract.methods.kink().call());\n\n    contract = new web3.eth.Contract(\n      JSON.parse(\n        contracts[\"contracts/CTokenInterfaces.sol:CTokenInterface\"].abi\n      ),\n      assetAddress\n    );\n    this.reserveFactorMantissa = Web3.utils.toBN(\n      await contract.methods.reserveFactorMantissa().call()\n    );\n    this.reserveFactorMantissa.iadd(\n      Web3.utils.toBN(await contract.methods.adminFeeMantissa().call())\n    );\n    this.reserveFactorMantissa.iadd(\n      Web3.utils.toBN(await contract.methods.fuseFeeMantissa().call())\n    );\n\n    this.initialized = true;\n  }\n\n  async _init(\n    web3,\n    interestRateModelAddress,\n    reserveFactorMantissa,\n    adminFeeMantissa,\n    fuseFeeMantissa\n  ) {\n    var contract = new web3.eth.Contract(\n      JSON.parse(contracts[\"contracts/JumpRateModel.sol:JumpRateModel\"].abi),\n      interestRateModelAddress\n    );\n    this.baseRatePerBlock = Web3.utils.toBN(\n      await contract.methods.baseRatePerBlock().call()\n    );\n    this.multiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.multiplierPerBlock().call()\n    );\n    this.jumpMultiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.jumpMultiplierPerBlock().call()\n    );\n    this.kink = Web3.utils.toBN(await contract.methods.kink().call());\n\n    this.reserveFactorMantissa = Web3.utils.toBN(reserveFactorMantissa);\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(adminFeeMantissa));\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(fuseFeeMantissa));\n\n    this.initialized = true;\n  }\n\n  async __init(\n    baseRatePerBlock,\n    multiplierPerBlock,\n    jumpMultiplierPerBlock,\n    kink,\n    reserveFactorMantissa,\n    adminFeeMantissa,\n    fuseFeeMantissa\n  ) {\n    this.baseRatePerBlock = Web3.utils.toBN(baseRatePerBlock);\n    this.multiplierPerBlock = Web3.utils.toBN(multiplierPerBlock);\n    this.jumpMultiplierPerBlock = Web3.utils.toBN(jumpMultiplierPerBlock);\n    this.kink = Web3.utils.toBN(kink);\n\n    this.reserveFactorMantissa = Web3.utils.toBN(reserveFactorMantissa);\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(adminFeeMantissa));\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(fuseFeeMantissa));\n\n    this.initialized = true;\n  }\n\n  getBorrowRate(utilizationRate) {\n    if (!this.initialized)\n      throw new Error(\"Interest rate model class not initialized.\");\n\n    if (utilizationRate.lte(this.kink)) {\n      return utilizationRate\n        .mul(this.multiplierPerBlock)\n        .div(Web3.utils.toBN(1e18))\n        .add(this.baseRatePerBlock);\n    } else {\n      const normalRate = this.kink\n        .mul(this.multiplierPerBlock)\n        .div(Web3.utils.toBN(1e18))\n        .add(this.baseRatePerBlock);\n      const excessUtil = utilizationRate.sub(this.kink);\n      return excessUtil\n        .mul(this.jumpMultiplierPerBlock)\n        .div(Web3.utils.toBN(1e18))\n        .add(normalRate);\n    }\n  }\n\n  getSupplyRate(utilizationRate) {\n    if (!this.initialized)\n      throw new Error(\"Interest rate model class not initialized.\");\n\n    const oneMinusReserveFactor = Web3.utils\n      .toBN(1e18)\n      .sub(this.reserveFactorMantissa);\n    const borrowRate = this.getBorrowRate(utilizationRate);\n    const rateToPool = borrowRate\n      .mul(oneMinusReserveFactor)\n      .div(Web3.utils.toBN(1e18));\n    return utilizationRate.mul(rateToPool).div(Web3.utils.toBN(1e18));\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/src/irm/WhitePaperInterestRateModel.js",
    "content": "import Web3 from \"web3\";\n\nvar contracts = require(__dirname + \"/../contracts/compound-protocol.min.json\")\n  .contracts;\n\nexport default class WhitePaperInterestRateModel {\n  static RUNTIME_BYTECODE_HASH =\n    \"0xe3164248fb86cce0eb8037c9a5c8d05aac2b2ebdb46741939be466a7b17d0b83\";\n\n  initialized;\n\n  baseRatePerBlock;\n  multiplierPerBlock;\n\n  reserveFactorMantissa;\n\n  async init(web3, interestRateModelAddress, assetAddress) {\n    var contract = new web3.eth.Contract(\n      JSON.parse(\n        contracts[\n          \"contracts/WhitePaperInterestRateModel.sol:WhitePaperInterestRateModel\"\n        ].abi\n      ),\n      interestRateModelAddress\n    );\n    this.baseRatePerBlock = Web3.utils.toBN(\n      await contract.methods.baseRatePerBlock().call()\n    );\n    this.multiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.multiplierPerBlock().call()\n    );\n\n    contract = new web3.eth.Contract(\n      JSON.parse(\n        contracts[\"contracts/CTokenInterfaces.sol:CTokenInterface\"].abi\n      ),\n      assetAddress\n    );\n    this.reserveFactorMantissa = Web3.utils.toBN(\n      await contract.methods.reserveFactorMantissa().call()\n    );\n    this.reserveFactorMantissa.iadd(\n      Web3.utils.toBN(await contract.methods.adminFeeMantissa().call())\n    );\n    this.reserveFactorMantissa.iadd(\n      Web3.utils.toBN(await contract.methods.fuseFeeMantissa().call())\n    );\n\n    this.initialized = true;\n  }\n\n  async _init(\n    web3,\n    interestRateModelAddress,\n    reserveFactorMantissa,\n    adminFeeMantissa,\n    fuseFeeMantissa\n  ) {\n    var contract = new web3.eth.Contract(\n      JSON.parse(\n        contracts[\n          \"contracts/WhitePaperInterestRateModel.sol:WhitePaperInterestRateModel\"\n        ].abi\n      ),\n      interestRateModelAddress\n    );\n    this.baseRatePerBlock = Web3.utils.toBN(\n      await contract.methods.baseRatePerBlock().call()\n    );\n    this.multiplierPerBlock = Web3.utils.toBN(\n      await contract.methods.multiplierPerBlock().call()\n    );\n\n    this.reserveFactorMantissa = Web3.utils.toBN(reserveFactorMantissa);\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(adminFeeMantissa));\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(fuseFeeMantissa));\n\n    this.initialized = true;\n  }\n\n  async __init(\n    baseRatePerBlock,\n    multiplierPerBlock,\n    reserveFactorMantissa,\n    adminFeeMantissa,\n    fuseFeeMantissa\n  ) {\n    this.baseRatePerBlock = Web3.utils.toBN(baseRatePerBlock);\n    this.multiplierPerBlock = Web3.utils.toBN(multiplierPerBlock);\n\n    this.reserveFactorMantissa = Web3.utils.toBN(reserveFactorMantissa);\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(adminFeeMantissa));\n    this.reserveFactorMantissa.iadd(Web3.utils.toBN(fuseFeeMantissa));\n\n    this.initialized = true;\n  }\n\n  getBorrowRate(utilizationRate) {\n    if (!this.initialized)\n      throw new Error(\"Interest rate model class not initialized.\");\n    return utilizationRate\n      .mul(this.multiplierPerBlock)\n      .div(Web3.utils.toBN(1e18))\n      .add(this.baseRatePerBlock);\n  }\n\n  getSupplyRate(utilizationRate) {\n    if (!this.initialized)\n      throw new Error(\"Interest rate model class not initialized.\");\n\n    const oneMinusReserveFactor = Web3.utils\n      .toBN(1e18)\n      .sub(this.reserveFactorMantissa);\n    const borrowRate = this.getBorrowRate(utilizationRate);\n    const rateToPool = borrowRate\n      .mul(oneMinusReserveFactor)\n      .div(Web3.utils.toBN(1e18));\n    return utilizationRate.mul(rateToPool).div(Web3.utils.toBN(1e18));\n  }\n}\n"
  },
  {
    "path": "src/fuse-sdk/test/launch-pools.js",
    "content": "var axios = require(\"axios\");\nvar Big = require(\"big.js\");\n\nconst Fuse = require(\"../dist/fuse.node.commonjs2.js\");\n\nvar fuse = new Fuse(process.env.TESTING_WEB3_PROVIDER_URL);\n\nconst erc20Abi = JSON.parse(\n  fuse.compoundContracts[\"contracts/EIP20Interface.sol:EIP20Interface\"].abi\n);\n\n// Launch pools\nvar pools = {\n  R1: {\n    shortName: \"Fuse R1\",\n    longName: \"Rari DAO Fuse Pool R1 (Base)\",\n    assetSymbolPrefix: \"fr1\",\n    assets: [\n      [\n        \"0x0000000000000000000000000000000000000000\",\n        0.75,\n        0.2,\n        Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n          .WhitePaperInterestRateModel_ETH,\n      ], // ETH\n      [\n        \"0x6B175474E89094C44Da98b954EedeAC495271d0F\",\n        0.75,\n        0.15,\n        Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_DAI,\n      ], // DAI\n      [\n        \"0xD291E7a03283640FDc51b121aC401383A46cC623\",\n        0.45,\n        0.3,\n        Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n      ], // RGT\n    ],\n  },\n};\n\npools[\"R2\"] = {\n  shortName: \"Fuse R2\",\n  longName: \"Rari DAO Fuse Pool R2 (Core)\",\n  assetSymbolPrefix: \"fr2\",\n  assets: pools[\"R1\"].assets.concat([\n    [\n      \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n      0.75,\n      0.15,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_DAI,\n    ], // USDC\n    [\n      \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\",\n      0.5,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .WhitePaperInterestRateModel_WBTC,\n    ], // WBTC\n    [\n      \"0x514910771af9ca656af840dff83e8264ecf986ca\",\n      0.5,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // LINK\n  ]),\n};\n\npools[\"R3\"] = {\n  shortName: \"Fuse R3\",\n  longName: \"Rari DAO Fuse Pool R3 (VC)\",\n  assetSymbolPrefix: \"fr3\",\n  assets: pools[\"R2\"].assets.concat([\n    [\n      \"0x111111111117dc0aa78b770fa6a738034120c302\",\n      0.45,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // 1INCH\n    [\n      \"0xbbbbca6a901c926f240b89eacb641d8aec7aeafd\",\n      0.4,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // LRC\n    [\n      \"0xc944e90c64b2c07662a292be6244bdf05cda44a7\",\n      0.4,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // GRT\n    [\n      \"0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2\",\n      0.45,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // MTA\n    [\n      \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n      0.45,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_DAI,\n    ], // mUSD\n    [\n      \"0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828\",\n      0.45,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // UMA\n    [\n      \"0x0d438f3b5175bebc262bf23753c1e53d03432bde\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // wNXM\n    [\n      \"0xD533a949740bb3306d119CC777fa900bA034cd52\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // CRV\n    [\n      \"0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .WhitePaperInterestRateModel_WBTC,\n    ], // SNX\n    [\n      \"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .WhitePaperInterestRateModel_WBTC,\n    ], // MKR\n    [\n      \"0xc00e94cb662c3520282e6f5717214004a7f26888\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // COMP\n    [\n      \"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // UNI\n    [\n      \"0xe41d2489571d322189246dafa5ebde1f4699f498\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .WhitePaperInterestRateModel_WBTC,\n    ], // ZRX\n    [\n      \"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // AAVE\n    [\n      \"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // YFI\n  ]),\n};\n\npools[\"R4\"] = {\n  shortName: \"Fuse R4\",\n  longName: \"Rari DAO Fuse Pool R4 (Community)\",\n  assetSymbolPrefix: \"fr4\",\n  assets: pools[\"R2\"].assets.concat([\n    // [\"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\", 0.30, 0.30, Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.WhitePaperInterestRateModel_WBTC], // bDIGG\n    [\n      \"0x4688a8b1f292fdab17e9a90c8bc379dc1dbd8713\",\n      0.4,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // COVER\n    [\n      \"0x0AaCfbeC6a24756c20D41914F2caba817C0d8521\",\n      0.45,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // YAM\n    [\n      \"0x3472A5A71965499acd81997a54BBA8D852C6E53d\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // BADGER\n    [\n      \"0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // KP3R\n    [\n      \"0x4e15361fd6b4bb609fa63c81a2be19d873717870\",\n      0.3,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // FTM\n    [\n      \"0x584bC13c7D411c00c01A62e8019472dE68768430\",\n      0.25,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // HEGIC\n    [\n      \"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2\",\n      0.5,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // SUSHI\n    [\n      \"0xb753428af26e81097e7fd17f40c88aaa3e04902c\",\n      0.4,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // SFI\n    [\n      \"0x8888801af4d980682e47f1a9036e589479e835c5\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // MPH\n    [\n      \"0xdbdb4d16eda451d0503b854cf79d55697f90c8df\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // ALCX\n  ]),\n};\n\npools[\"R5\"] = {\n  shortName: \"Fuse R5\",\n  longName: \"Rari DAO Fuse Pool R5 (CEX)\",\n  assetSymbolPrefix: \"fr5\",\n  assets: pools[\"R2\"].assets.concat([\n    [\n      \"0x476c5E26a75bd202a9683ffD34359C0CC15be0fF\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // SRM\n    [\n      \"0x408e41876cccdc0f92210600ef50372656052a38\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // REN\n    [\n      \"0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // FTT\n    // [\"0xB8c77482e45F1F44dE1745F52C74426C631bDD52\", 0.35, 0.30, Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.WhitePaperInterestRateModel_WBTC], // BNB\n    [\n      \"0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // CEL\n    [\n      \"0x4fabb145d64652a948d72533023f6e7a623c7c53\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_DAI,\n    ], // BUSD\n  ]),\n};\n\npools[\"R7\"] = {\n  shortName: \"Fuse R7\",\n  longName: \"Rari DAO Fuse Pool R7 (SOCKS)\",\n  assetSymbolPrefix: \"fr7\",\n  assets: [\n    [\n      \"0x0000000000000000000000000000000000000000\",\n      0.65,\n      0.2,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .WhitePaperInterestRateModel_ETH,\n    ], // ETH\n    [\n      \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\",\n      0.5,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_UNI,\n    ], // SOCKS\n    [\n      \"0x6B175474E89094C44Da98b954EedeAC495271d0F\",\n      0.65,\n      0.15,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_DAI,\n    ], // DAI\n  ],\n};\n\n// Deploy pool + assets\nasync function deployPool(conf, options) {\n  if (conf.poolName === undefined)\n    throw \"No pool name specified for deployment.\";\n  if (conf.closeFactor === undefined)\n    conf.closeFactor = Fuse.Web3.utils.toBN(0.5e18);\n  else\n    conf.closeFactor = Fuse.Web3.utils.toBN(\n      new Big(conf.closeFactor).mul(new Big(10).pow(18)).toFixed(0)\n    );\n  if (conf.maxAssets === undefined) conf.maxAssets = 20;\n  if (conf.liquidationIncentive === undefined)\n    conf.liquidationIncentive = Fuse.Web3.utils.toBN(1.08e18);\n  else\n    conf.liquidationIncentive = Fuse.Web3.utils.toBN(\n      new Big(conf.liquidationIncentive).mul(new Big(10).pow(18)).toFixed(0)\n    );\n\n  var [\n    poolAddress,\n    implementationAddress,\n    priceOracleAddress,\n  ] = await fuse.deployPool(\n    conf.poolName,\n    conf.isPrivate,\n    conf.closeFactor,\n    conf.maxAssets,\n    conf.liquidationIncentive,\n    conf.priceOracle,\n    conf.priceOracleConf,\n    options\n  );\n  return [poolAddress, priceOracleAddress];\n}\n\nasync function deployAsset(conf, options, bypassPriceFeedCheck) {\n  if (conf.interestRateModel === undefined)\n    conf.interestRateModel =\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES[\"JumpRateModel\"];\n  if (conf.decimals === undefined) conf.decimals = 8;\n  if (conf.admin === undefined) conf.admin = options.from;\n  if (conf.collateralFactor === undefined)\n    conf.collateralFactor = Fuse.Web3.utils.toBN(0.75e18);\n  else\n    conf.collateralFactor = Fuse.Web3.utils.toBN(\n      new Big(conf.collateralFactor).mul(new Big(10).pow(18)).toFixed(0)\n    );\n  if (conf.reserveFactor === undefined)\n    conf.reserveFactor = Fuse.Web3.utils.toBN(0.2e18);\n  else\n    conf.reserveFactor = Fuse.Web3.utils.toBN(\n      new Big(conf.reserveFactor).mul(new Big(10).pow(18)).toFixed(0)\n    );\n  if (conf.adminFee === undefined) conf.adminFee = Fuse.Web3.utils.toBN(0);\n  else\n    conf.adminFee = Fuse.Web3.utils.toBN(\n      new Big(conf.adminFee).mul(new Big(10).pow(18)).toFixed(0)\n    );\n\n  var [\n    assetAddress,\n    implementationAddress,\n    interestRateModel,\n  ] = await fuse.deployAsset(\n    conf,\n    conf.collateralFactor,\n    conf.reserveFactor,\n    conf.adminFee,\n    options,\n    bypassPriceFeedCheck\n  );\n  return assetAddress;\n}\n\n// Get token/ETH price via CoinGecko\nasync function getTokenPrice(tokenAddress) {\n  tokenAddress = tokenAddress.toLowerCase();\n  if (tokenAddress === \"0xb8c77482e45f1f44de1745f52c74426c631bdd52\")\n    return 0.147702407;\n  var decoded = (\n    await axios.get(\n      \"https://api.coingecko.com/api/v3/simple/token_price/ethereum\",\n      {\n        params: {\n          vs_currencies: \"eth\",\n          contract_addresses: tokenAddress,\n        },\n      }\n    )\n  ).data;\n  if (!decoded || !decoded[tokenAddress])\n    throw \"Failed to decode price of \" + tokenAddress + \" from CoinGecko\";\n  return decoded[tokenAddress].eth;\n}\n\n// ChainlinkPriceOracle supported ERC20 token contract addresses\nconst CHAINLINK_TOKENS = [\n  \"0x111111111117dC0aa78b770fA6A738034120C302\",\n  \"0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9\",\n  \"0xD46bA6D942050d489DBd938a2C909A5d5039A161\",\n  \"0xa117000000f279D81A1D3cc75430fAA017FA5A2e\",\n  \"0x3472A5A71965499acd81997a54BBA8D852C6E53d\",\n  \"0xba100000625a3754423978a60c9317c58a424e3D\",\n  \"0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55\",\n  \"0x0D8775F648430679A709E98d2b0Cb6250d2887EF\",\n  \"0xB8c77482e45F1F44dE1745F52C74426C631bDD52\",\n  \"0x617aeCB6137B5108D1E7D4918e3725C8cEbdB848\",\n  \"0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C\",\n  \"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599\",\n  \"0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D\",\n  \"0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6\",\n  \"0x4Fabb145d64652a948d72533023f6E7A623C7C53\",\n  \"0x56d811088235F11C8920698a204A5010a788f4b3\",\n  \"0xaaAEBE6Fe48E54f431b0C390CfaF0b017d09D42d\",\n  \"0xc00e94Cb662C3520282E6f5717214004A7f26888\",\n  \"0x4688a8b1F292FDaB17E9a90c8Bc379dC1DBd8713\",\n  \"0x2ba592F78dB6436527729929AAf6c908497cB200\",\n  \"0xA0b73E1Ff0B80914AB6fe0444E65848C4C34450b\",\n  \"0xD533a949740bb3306d119CC777fa900bA034cd52\",\n  \"0x6B175474E89094C44Da98b954EedeAC495271d0F\",\n  \"0xEd91879919B71bB6905f23af0A68d231EcF87b14\",\n  \"0x1494CA1F11D487c2bBe4543E90080AeBa4BA3C2b\",\n  \"0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c\",\n  \"0x4E15361FD6b4BB609Fa63C81A2be19d873717870\",\n  \"0x50D1c9771902476076eCFc8B2A83Ad6b9355a4c9\",\n  \"0xc944E90C64B2c07662A292be6244BDf05Cda44a7\",\n  \"0x584bC13c7D411c00c01A62e8019472dE68768430\",\n  \"0xdd974D5C2e2928deA5F71b9825b8b646686BD200\",\n  \"0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44\",\n  \"0x514910771AF9Ca656af840dff83E8264EcF986CA\",\n  \"0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD\",\n  \"0x0F5D2fB29fb7d3CFeE444a200298f468908cC942\",\n  \"0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2\",\n  \"0xec67005c4E498Ec7f55E092bd1d35cbC47C91892\",\n  \"0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2\",\n  \"0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671\",\n  \"0xd26114cd6EE289AccF82350c8d8487fedB8A0C07\",\n  \"0x0258F474786DdFd37ABCE6df6BBb1Dd5dfC4434a\",\n  \"0x8E870D67F660D95d5be530380D0eC0bd388289E1\",\n  \"0x45804880De22913dAFE09f4980848ECE6EcbAf78\",\n  \"0x408e41876cCCDC0F92210600ef50372656052a38\",\n  \"0x221657776846890989a759BA2973e427DfF5C9bB\",\n  \"0x607F4C5BB672230e8672085532f7e901544a7375\",\n  \"0x3155BA85D5F96b2d030a4966AF206230e46849cb\",\n  \"0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F\",\n  \"0x476c5E26a75bd202a9683ffD34359C0CC15be0fF\",\n  \"0x57Ab1ec28D129707052df4dF418D58a2D46d5f51\",\n  \"0x6B3595068778DD592e39A122f4f5a5cF09C90fE2\",\n  \"0x0000000000085d4780B73119b644AE5ecd22b376\",\n  \"0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828\",\n  \"0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984\",\n  \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n  \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n  \"0xa47c8bf37f92aBed4A126BDA807A7b7498661acD\",\n  \"0x0d438F3b5175Bebc262bF23753C1E53d03432bDE\",\n  \"0xBd356a39BFf2cAda8E9248532DD879147221Cf76\",\n  \"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e\",\n  \"0xa1d0E215a23d7030842FC67cE582a6aFa3CCaB83\",\n  \"0xE41d2489571d322189246DaFA5ebDe1F4699F498\",\n  \"0xe36E2D3c7c34281FA3bC737950a68571736880A1\",\n  \"0xADE00C28244d5CE17D72E40330B1c318cD12B7c3\",\n  \"0xF48e200EAF9906362BB1442fca31e0835773b8B4\",\n  \"0x0F83287FF768D1c1e17a42F44d644D7F22e8ee1d\",\n  \"0xfE33ae95A9f0DA8A845aF33516EDc240DCD711d6\",\n  \"0x1715AC0743102BF5Cd58EfBB6Cf2dC2685d967b6\",\n  \"0x88C8Cf3A212c0369698D13FE98Fcb76620389841\",\n  \"0x22602469d704BfFb0936c7A7cfcD18f7aA269375\",\n  \"0xD71eCFF9342A5Ced620049e616c5035F1dB98620\",\n  \"0xeF9Cd7882c067686691B6fF49e650b43AFBBCC6B\",\n  \"0x97fe22E7341a0Cd8Db6F6C021A24Dc8f4DAD855F\",\n  \"0xFA1a856Cfa3409CFa145Fa4e20Eb270dF3EB21ab\",\n  \"0xC14103C2141E842e228FBaC594579e798616ce7A\",\n  \"0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0\",\n  \"0x4575f41308EC1483f3d399aa9a2826d74Da13Deb\",\n  \"0x8CE9137d39326AD0cD6491fb5CC0CbA0e089b6A9\",\n  \"0x4C19596f5aAfF459fA38B0f7eD92F11AE6543784\",\n  \"0xf2E08356588EC5cd9E437552Da87C0076b4970B0\",\n  \"0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D\",\n  \"0x1c48f86ae57291F7686349F12601910BD8D470bb\",\n  \"0x6A22e5e94388464181578Aa7A6B869e00fE27846\",\n  \"0x261EfCdD24CeA98652B9700800a13DfBca4103fF\",\n  \"0x5299d6F7472DCc137D7f3C4BcfBBB514BaBF341A\",\n  \"0xa2B0fDe6D710e201d0d608e924A484d1A5fEd57c\",\n  \"0x2e59005c5c0f0a4D77CcA82653d48b46322EE5Cd\",\n  \"0xeABACD844A196D7Faf3CE596edeBF9900341B420\",\n  \"0xe1aFe1Fd76Fd88f78cBf599ea1846231B8bA3B6B\",\n  \"0x798D1bE841a82a273720CE31c822C61a67a601C3\",\n  \"0xF970b8E36e23F7fC3FD752EeA86f8Be8D83375A6\",\n];\n\n(async function () {\n  var accounts = await fuse.web3.eth.getAccounts();\n\n  // Keep3r Uniswap + SushiSwap\n  var keep3rUniswapTokens = [];\n  var keep3rSushiSwapTokens = [];\n  var keep3rRootOracleAbi = [\n    {\n      inputs: [],\n      name: \"pairs\",\n      outputs: [\n        {\n          internalType: \"address[]\",\n          name: \"\",\n          type: \"address[]\",\n        },\n      ],\n      stateMutability: \"view\",\n      type: \"function\",\n    },\n  ];\n  var keep3rUniswapRootOracle = new fuse.web3.eth.Contract(\n    keep3rRootOracleAbi,\n    \"0x73353801921417F465377c8d898c6f4C0270282C\"\n  );\n  var keep3rSushiSwapRootOracle = new fuse.web3.eth.Contract(\n    keep3rRootOracleAbi,\n    \"0xf67Ab1c914deE06Ba0F264031885Ea7B276a7cDa\"\n  );\n  var uniswapV2PairAbi = [\n    {\n      constant: true,\n      inputs: [],\n      name: \"token0\",\n      outputs: [\n        {\n          internalType: \"address\",\n          name: \"\",\n          type: \"address\",\n        },\n      ],\n      payable: false,\n      stateMutability: \"view\",\n      type: \"function\",\n    },\n    {\n      constant: true,\n      inputs: [],\n      name: \"token1\",\n      outputs: [\n        {\n          internalType: \"address\",\n          name: \"\",\n          type: \"address\",\n        },\n      ],\n      payable: false,\n      stateMutability: \"view\",\n      type: \"function\",\n    },\n  ];\n  for (const pair of await keep3rUniswapRootOracle.methods.pairs().call()) {\n    var uniswapV2Pair = new fuse.web3.eth.Contract(uniswapV2PairAbi, pair);\n    var token0 = await uniswapV2Pair.methods.token0().call();\n    var token1 = await uniswapV2Pair.methods.token1().call();\n    if (\n      token0.toLowerCase() !== Fuse.WETH_ADDRESS.toLowerCase() &&\n      token1.toLowerCase() !== Fuse.WETH_ADDRESS.toLowerCase()\n    )\n      continue;\n    var nonWethToken =\n      token0.toLowerCase() !== Fuse.WETH_ADDRESS.toLowerCase()\n        ? token0\n        : token1;\n    keep3rUniswapTokens.push(nonWethToken);\n  }\n  for (const pair of await keep3rSushiSwapRootOracle.methods.pairs().call()) {\n    var uniswapV2Pair = new fuse.web3.eth.Contract(uniswapV2PairAbi, pair);\n    var token0 = await uniswapV2Pair.methods.token0().call();\n    var token1 = await uniswapV2Pair.methods.token1().call();\n    if (\n      token0.toLowerCase() !== Fuse.WETH_ADDRESS.toLowerCase() &&\n      token1.toLowerCase() !== Fuse.WETH_ADDRESS.toLowerCase()\n    )\n      continue;\n    var nonWethToken =\n      token0.toLowerCase() !== Fuse.WETH_ADDRESS.toLowerCase()\n        ? token0\n        : token1;\n    keep3rSushiSwapTokens.push(nonWethToken);\n  }\n\n  // Deploy ChainlinkPriceOracle\n  var chainlinkPriceOracle =\n    Fuse.PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES[\"ChainlinkPriceOracle\"];\n\n  // Deploy Keep3rPriceOracle (Uniswap)\n  var keep3rPriceOracleUniswap =\n    Fuse.PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES[\"Keep3rPriceOracle\"];\n\n  // Deploy Keep3rPriceOracle (SushiSwap)\n  var keep3rPriceOracleSushiSwap =\n    Fuse.PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES[\"Keep3rSushiSwapPriceOracle\"];\n\n  // Case insensitive version of Array.indexOf\n  var caseInsensitiveIndexOf = (arr, q) =>\n    arr.findIndex((item) => q.toLowerCase() === item.toLowerCase());\n\n  // Build underlying and oracle arrays for MasterPriceOracle\n  var underlyings = [];\n  var oracles = [];\n\n  // For each pool:\n  for (const poolId of Object.keys(pools)) {\n    // For each asset:\n    for (const [asset, cf, rf, irm] of pools[poolId].assets) {\n      if (asset === \"0x0000000000000000000000000000000000000000\") continue;\n      if (asset.toLowerCase() === Fuse.WETH_ADDRESS.toLowerCase()) continue;\n      if (underlyings.indexOf(asset) >= 0) continue;\n\n      underlyings.push(asset);\n\n      if (caseInsensitiveIndexOf(CHAINLINK_TOKENS, asset) >= 0) {\n        oracles.push(chainlinkPriceOracle);\n      } else if (caseInsensitiveIndexOf(keep3rUniswapTokens, asset) >= 0) {\n        oracles.push(keep3rPriceOracleUniswap);\n      } else if (caseInsensitiveIndexOf(keep3rSushiSwapTokens, asset) >= 0) {\n        oracles.push(keep3rPriceOracleSushiSwap);\n      } else throw \"Oracle not found for \" + asset;\n    }\n  }\n\n  // Deploy MasterPriceOracle\n  var masterPriceOracle = await fuse.deployPriceOracle(\n    \"MasterPriceOracle\",\n    { underlyings, oracles },\n    { from: accounts[0], gasPrice: \"0\" }\n  );\n  console.log(\"Successfully deployed MasterPriceOracle at:\", masterPriceOracle);\n\n  // For each pool:\n  for (const poolId of Object.keys(pools)) {\n    var pool = pools[poolId];\n\n    // Deploy pool\n    console.log(\"Deploying\", pool.longName);\n    var [poolAddress] = await deployPool(\n      { poolName: pool.longName, priceOracle: masterPriceOracle },\n      { from: accounts[0], gasPrice: \"0\" }\n    );\n    console.log(\"Successfully deployed\", pool.longName, \"at:\", poolAddress);\n\n    // Create asset config array\n    var confs = [];\n\n    for (const [\n      underlying,\n      collateralFactor,\n      reserveFactor,\n      interestRateModel,\n    ] of pools[poolId].assets) {\n      if (underlying === \"0x0000000000000000000000000000000000000000\") {\n        var underlyingName = \"Ethereum\";\n        var underlyingSymbol = \"ETH\";\n      } else if (\n        underlying.toLowerCase() ===\n        \"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\".toLowerCase()\n      ) {\n        var underlyingName = \"Maker\";\n        var underlyingSymbol = \"MKR\";\n      } else {\n        var erc20 = new fuse.web3.eth.Contract(erc20Abi, underlying);\n        var underlyingName = await erc20.methods.name().call();\n        var underlyingSymbol = await erc20.methods.symbol().call();\n      }\n\n      confs.push({\n        name: pool.shortName + \": \" + underlyingName,\n        symbol: pool.assetSymbolPrefix + underlyingSymbol,\n        underlying,\n        collateralFactor,\n        reserveFactor,\n        interestRateModel,\n      });\n    }\n\n    // Deploy all assets to pool\n    var assetAddresses = {};\n\n    for (const conf of confs) {\n      // Deploy asset\n      console.log(\"Deploying\", conf.underlying, \"to\", pool.shortName);\n\n      try {\n        assetAddresses[conf.underlying] = await deployAsset(\n          { comptroller: poolAddress, ...conf },\n          { from: accounts[0], gasPrice: \"0\" },\n          true\n        );\n      } catch (error) {\n        console.error(\"Failed to deploy\", conf.underlying, error);\n      }\n\n      console.log(\n        \"Successfully deployed\",\n        conf.underlying,\n        \"to\",\n        pool.shortName\n      );\n\n      // Try getPoolAssetsWithData\n      try {\n        await fuse.contracts.FusePoolLens.methods\n          .getPoolAssetsWithData(poolAddress)\n          .call({ gas: 1e18 });\n      } catch (error) {\n        console.error(\n          \"getPoolAssetsWithData failed on\",\n          conf.underlying,\n          error\n        );\n      }\n    }\n\n    console.log(\"Successfully deployed all assets for:\", pool.longName);\n\n    // Check asset prices\n    var masterPriceOracleContract = new fuse.web3.eth.Contract(\n      fuse.oracleContracts[\"MasterPriceOracle\"].abi,\n      masterPriceOracle\n    );\n\n    for (var underlying of Object.keys(assetAddresses)) {\n      var underlyingDecimals =\n        underlying === \"0x0000000000000000000000000000000000000000\"\n          ? 18\n          : await new fuse.web3.eth.Contract(erc20Abi, underlying).methods\n              .decimals()\n              .call();\n      var oraclePrice =\n        (await masterPriceOracleContract.methods\n          .getUnderlyingPrice(assetAddresses[underlying])\n          .call()) /\n        10 ** (36 - underlyingDecimals);\n      var expectedPrice =\n        underlying === \"0x0000000000000000000000000000000000000000\"\n          ? 1\n          : await getTokenPrice(underlying);\n      var underlyingSymbol =\n        underlying === \"0x0000000000000000000000000000000000000000\"\n          ? \"ETH\"\n          : underlying.toLowerCase() ===\n            \"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\".toLowerCase()\n          ? \"MKR\"\n          : await new fuse.web3.eth.Contract(erc20Abi, underlying).methods\n              .symbol()\n              .call();\n      console.log(\n        underlyingSymbol +\n          \": \" +\n          oraclePrice +\n          \" ETH (expected \" +\n          expectedPrice +\n          \" ETH)\"\n      );\n      if (\n        !(\n          oraclePrice >= expectedPrice * 0.95 &&\n          oraclePrice <= expectedPrice * 1.05\n        )\n      )\n        console.log(\"PRICE MISMATCH FOR\", underlyingSymbol);\n    }\n  }\n})();\n"
  },
  {
    "path": "src/fuse-sdk/test/live-price-oracle.js",
    "content": "var axios = require('axios');\n\nconst Fuse = require(\"../dist/fuse.node.commonjs2.js\");\n\nvar fuse = new Fuse(process.env.LIVE_RPC_URL);\nconst erc20Abi = JSON.parse(fuse.compoundContracts[\"contracts/EIP20Interface.sol:EIP20Interface\"].abi);\n\n// Get token/ETH price via CoinGecko\nasync function getTokenPrice(tokenAddress) {\n  tokenAddress = tokenAddress.toLowerCase();\n  if (tokenAddress === \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\") tokenAddress = \"0x514910771af9ca656af840dff83e8264ecf986ca\"; // linkCRV\n  if (tokenAddress === \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\") tokenAddress = \"0x514910771af9ca656af840dff83e8264ecf986ca\"; // linkCRV-gauge\n  if (tokenAddress === \"0xb8c77482e45f1f44de1745f52c74426c631bdd52\") return 0.147702407; // BNB\n  var decoded = (await axios.get('https://api.coingecko.com/api/v3/simple/token_price/ethereum', {\n    params: {\n      vs_currencies: \"eth\",\n      contract_addresses: tokenAddress\n    }\n  })).data;\n  if (!decoded || !decoded[tokenAddress]) throw \"Failed to decode price of \" + tokenAddress + \" from CoinGecko\";\n  return decoded[tokenAddress].eth;\n}\n\n(async function() {\n  const tokensChecked = [];\n\n  for (const [, , comptrollerAddress] of (await fuse.contracts.FusePoolDirectory.methods.getPublicPools().call())[\"1\"]) {\n    // Deploy all assets to pool\n    var comptroller = new fuse.web3.eth.Contract(JSON.parse(fuse.compoundContracts[\"contracts/Comptroller.sol:Comptroller\"].abi), comptrollerAddress);\n    var assetAddresses = await comptroller.methods.getAllMarkets().call();\n    \n    // Check asset prices\n    var masterPriceOracleContract = new fuse.web3.eth.Contract(fuse.oracleContracts[\"MasterPriceOracle\"].abi, await comptroller.methods.oracle().call());\n\n    for (var cToken of assetAddresses) {\n      var underlying = await (new fuse.web3.eth.Contract(JSON.parse(fuse.compoundContracts[\"contracts/CErc20Delegate.sol:CErc20Delegate\"].abi), cToken)).methods.underlying().call();\n      if (tokensChecked.indexOf(underlying) >= 0) continue; else tokensChecked.push(underlying);\n      var underlyingDecimals = underlying === \"0x0000000000000000000000000000000000000000\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call());\n      var oraclePrice = (await masterPriceOracleContract.methods.getUnderlyingPrice(cToken).call()) / (10 ** (36 - underlyingDecimals));\n      var expectedPrice = underlying === \"0x0000000000000000000000000000000000000000\" ? 1 : (await getTokenPrice(underlying));\n      var underlyingSymbol = underlying === \"0x0000000000000000000000000000000000000000\" ? \"ETH\" : (underlying.toLowerCase() === \"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\".toLowerCase() ? \"MKR\" : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.symbol().call()));\n      console.log(underlyingSymbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n      if (!(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05)) console.warn(\"PRICE MISMATCH FOR\", underlyingSymbol);\n    }\n  }\n})();\n"
  },
  {
    "path": "src/fuse-sdk/test/oracles.js",
    "content": "var assert = require('assert');\nvar Big = require('big.js');\nvar axios = require('axios');\n\nconst Fuse = require(\"../dist/fuse.node.commonjs2.js\");\n\nassert(process.env.TESTING_WEB3_PROVIDER_URL, \"Web3 provider URL required\");\nvar fuse = new Fuse(process.env.TESTING_WEB3_PROVIDER_URL);\n\nvar erc20Abi = JSON.parse(fuse.compoundContracts[\"contracts/EIP20Interface.sol:EIP20Interface\"].abi);\nvar cErc20Abi = JSON.parse(fuse.compoundContracts[\"contracts/CErc20Delegate.sol:CErc20Delegate\"].abi);\nvar comptrollerAbi = JSON.parse(fuse.compoundContracts[\"contracts/Comptroller.sol:Comptroller\"].abi);\n\n// Pass time\nfunction increaseTime(seconds) {\n  return new Promise(function(resolve, reject) {\n    assert(seconds !== null);\n    fuse.web3.currentProvider.send({\n      jsonrpc: \"2.0\",\n      method: \"evm_increaseTime\",\n      params: [seconds],\n      id: new Date().getTime()\n    }, function(err, result) {\n      if (err) return reject(err);\n      assert(result.result);\n      resolve();\n    });\n  });\n}\n\n// hardhat_impersonateAccount\nfunction impersonateAccount(account) {\n  return new Promise(function(resolve, reject) {\n    fuse.web3.currentProvider.send({\n      jsonrpc: \"2.0\",\n      method: \"hardhat_impersonateAccount\",\n      params: [account],\n      id: new Date().getTime()\n    }, function(err, result) {\n      if (err) return reject(err);\n      assert(result.result);\n      resolve();\n    });\n  });\n}\n\n// Deploy pool + assets\nasync function deployPool(conf, options) {\n  if (conf.closeFactor === undefined) conf.poolName = \"Example Fuse Pool \" + (new Date()).getTime();\n  if (conf.closeFactor === undefined) conf.closeFactor = Fuse.Web3.utils.toBN(0.5e18);\n  else conf.closeFactor = Fuse.Web3.utils.toBN((new Big(conf.closeFactor)).mul((new Big(10)).pow(18)).toFixed(0));\n  if (conf.maxAssets === undefined) conf.maxAssets = 20;\n  if (conf.liquidationIncentive === undefined) conf.liquidationIncentive = Fuse.Web3.utils.toBN(1.08e18);\n  else conf.liquidationIncentive = Fuse.Web3.utils.toBN((new Big(conf.liquidationIncentive)).mul((new Big(10)).pow(18)).toFixed(0));\n\n  var [poolAddress, implementationAddress, priceOracleAddress] = await fuse.deployPool(conf.poolName, conf.isPrivate, conf.closeFactor, conf.maxAssets, conf.liquidationIncentive, conf.priceOracle, conf.priceOracleConf, options);\n  return [poolAddress, priceOracleAddress];\n}\n\nasync function deployAsset(conf, collateralFactor, reserveFactor, adminFee, options, bypassPriceFeedCheck) {\n  if (conf.interestRateModel === undefined) conf.interestRateModel = \"0x6bc8fe27d0c7207733656595e73c0d5cf7afae36\";\n  if (conf.decimals === undefined) conf.decimals = 8;\n  if (conf.admin === undefined) conf.admin = options.from;\n  if (collateralFactor === undefined) collateralFactor = Fuse.Web3.utils.toBN(0.75e18);\n  if (reserveFactor === undefined) reserveFactor = Fuse.Web3.utils.toBN(0.2e18);\n  if (adminFee === undefined) adminFee = Fuse.Web3.utils.toBN(0.05e18);\n\n  var [assetAddress, implementationAddress, interestRateModel] = await fuse.deployAsset(conf, collateralFactor, reserveFactor, adminFee, options, bypassPriceFeedCheck);\n  return assetAddress;\n}\n\n// Get token/ETH price via CoinGecko\nasync function getTokenPrice(tokenAddress) {\n  tokenAddress = tokenAddress.toLowerCase();\n  var decoded = (await axios.get('https://api.coingecko.com/api/v3/simple/token_price/ethereum', {\n    params: {\n      vs_currencies: \"eth\",\n      contract_addresses: tokenAddress\n    }\n  })).data;\n  if (!decoded || !decoded[tokenAddress]) throw \"Failed to decode price of \" + tokenAddress + \" from CoinGecko\";\n  return decoded[tokenAddress].eth;\n}\n\n/* describe('UniswapView', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, uniswapView;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Price oracle token configs\n    var PriceSource = {\n      FIXED_ETH: 0,\n      FIXED_USD: 1,\n      REPORTER: 2,\n      TWAP: 3\n    };\n\n    var tokenConfigs = [\n      { underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\", symbolHash: Fuse.Web3.utils.soliditySha3(\"WETH\"), baseUnit: Fuse.Web3.utils.toBN(1e18).toString(), priceSource: PriceSource.FIXED_ETH, fixedPrice: Fuse.Web3.utils.toBN(1e18).toString(), uniswapMarket: \"0x0000000000000000000000000000000000000000\", isUniswapReversed: false },\n      { underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\", symbolHash: Fuse.Web3.utils.soliditySha3(\"USDC\"), baseUnit: Fuse.Web3.utils.toBN(1e6).toString(), priceSource: PriceSource.TWAP, fixedPrice: 0, uniswapMarket: \"0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc\", isUniswapReversed: false },\n      { underlying: \"0xdac17f958d2ee523a2206206994597c13d831ec7\", symbolHash: Fuse.Web3.utils.soliditySha3(\"USDT\"), baseUnit: Fuse.Web3.utils.toBN(1e6).toString(), priceSource: PriceSource.FIXED_USD, fixedPrice: Fuse.Web3.utils.toBN(1e6).toString(), uniswapMarket: \"0x0000000000000000000000000000000000000000\", isUniswapReversed: false },\n      { underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\", symbolHash: Fuse.Web3.utils.soliditySha3(\"DAI\"), baseUnit: Fuse.Web3.utils.toBN(1e18).toString(), priceSource: PriceSource.TWAP, fixedPrice: 0, uniswapMarket: \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", isUniswapReversed: false },\n      { underlying: \"0xD291E7a03283640FDc51b121aC401383A46cC623\", symbolHash: Fuse.Web3.utils.soliditySha3(\"RGT\"), baseUnit: Fuse.Web3.utils.toBN(1e18).toString(), priceSource: PriceSource.TWAP, fixedPrice: 0, uniswapMarket: \"0xdc2b82bc1106c9c5286e59344896fb0ceb932f53\", isUniswapReversed: true }\n    ];\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"UniswapView\", priceOracleConf: { tokenConfigs } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    uniswapView = new fuse.web3.eth.Contract(JSON.parse(fuse.openOracleContracts[\"contracts/Uniswap/UniswapView.sol:UniswapView\"].abi), priceOracleAddress);\n\n    // Post prices for TWAP assets\n    await uniswapView.methods.postPrices([\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\", \"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xD291E7a03283640FDc51b121aC401383A46cC623\"]).send({ from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" },\n      { name: \"Fuse USDT\", symbol: \"fUSDT\", underlying: \"0xdac17f958d2ee523a2206206994597c13d831ec7\" },\n      { name: \"Fuse DAI\", symbol: \"fDAI\", underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\" },\n      { name: \"Fuse RGT\", symbol: \"fRGT\", underlying: \"0xD291E7a03283640FDc51b121aC401383A46cC623\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await uniswapView.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * (symbol == \"fRGT\" ? 0.9 : 0.95) && oraclePrice <= expectedPrice * (symbol == \"fRGT\" ? 1.1 : 1.05));\n      }\n    });\n  });\n});\n\ndescribe('UniswapView (public)', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, uniswapView;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Price oracle token configs\n    var PriceSource = {\n      FIXED_ETH: 0,\n      FIXED_USD: 1,\n      REPORTER: 2,\n      TWAP: 3\n    };\n\n    var tokenConfigs = [\n      { underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\", symbolHash: Fuse.Web3.utils.soliditySha3(\"WETH\"), baseUnit: Fuse.Web3.utils.toBN(1e18).toString(), priceSource: PriceSource.FIXED_ETH, fixedPrice: Fuse.Web3.utils.toBN(1e18).toString(), uniswapMarket: \"0x0000000000000000000000000000000000000000\", isUniswapReversed: false },\n      { underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\", symbolHash: Fuse.Web3.utils.soliditySha3(\"USDC\"), baseUnit: Fuse.Web3.utils.toBN(1e6).toString(), priceSource: PriceSource.TWAP, fixedPrice: 0, uniswapMarket: \"0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc\", isUniswapReversed: false },\n      { underlying: \"0xdac17f958d2ee523a2206206994597c13d831ec7\", symbolHash: Fuse.Web3.utils.soliditySha3(\"USDT\"), baseUnit: Fuse.Web3.utils.toBN(1e6).toString(), priceSource: PriceSource.FIXED_USD, fixedPrice: Fuse.Web3.utils.toBN(1e6).toString(), uniswapMarket: \"0x0000000000000000000000000000000000000000\", isUniswapReversed: false },\n      { underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\", symbolHash: Fuse.Web3.utils.soliditySha3(\"DAI\"), baseUnit: Fuse.Web3.utils.toBN(1e18).toString(), priceSource: PriceSource.TWAP, fixedPrice: 0, uniswapMarket: \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", isUniswapReversed: false },\n      { underlying: \"0xD291E7a03283640FDc51b121aC401383A46cC623\", symbolHash: Fuse.Web3.utils.soliditySha3(\"RGT\"), baseUnit: Fuse.Web3.utils.toBN(1e18).toString(), priceSource: PriceSource.TWAP, fixedPrice: 0, uniswapMarket: \"0xdc2b82bc1106c9c5286e59344896fb0ceb932f53\", isUniswapReversed: true }\n    ];\n\n    // Try and fail to deploy pool (because USDT is PriceSource.FIXED_USD)\n    await assert.rejects(deployPool({ priceOracle: \"UniswapView\", priceOracleConf: { tokenConfigs, isPublic: true } }, { from: accounts[0], gasPrice: \"0\" }), (err) => {\n      assert(/Invalid token config price source: must be TWAP/.test(err));\n      return true;\n    });\n\n    // Change USDT token config to PriceSource.TWAP\n    tokenConfigs[2].priceSource = PriceSource.TWAP;\n    tokenConfigs[2].fixedPrice = 0;\n    tokenConfigs[2].uniswapMarket = \"0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852\";\n    tokenConfigs[2].isUniswapReversed = true;\n\n    // Change DAI symbol to NOTDAI, try and fail to deploy pool, and change DAI symbol back to DAI\n    tokenConfigs[3].symbolHash = Fuse.Web3.utils.soliditySha3(\"NOTDAI\");\n    await assert.rejects(deployPool({ priceOracle: \"UniswapView\", priceOracleConf: { tokenConfigs, isPublic: true } }, { from: accounts[0], gasPrice: \"0\" }), (err) => {\n      assert(/Symbol mismatch between token config and ERC20 symbol method/.test(err));\n      return true;\n    });\n    tokenConfigs[3].symbolHash = Fuse.Web3.utils.soliditySha3(\"DAI\");\n\n    // Change DAI base unit to 1e16, try and fail to deploy pool, and change DAI base unit back to 1e18\n    tokenConfigs[3].baseUnit = Fuse.Web3.utils.toBN(1e16).toString();\n    await assert.rejects(deployPool({ priceOracle: \"UniswapView\", priceOracleConf: { tokenConfigs, isPublic: true } }, { from: accounts[0], gasPrice: \"0\" }), (err) => {\n      assert(/Incorrect token config base unit/.test(err));\n      return true;\n    });\n    tokenConfigs[3].baseUnit = Fuse.Web3.utils.toBN(1e18).toString();\n\n    // Change DAI Uniswap market to USDC Uniswap market, try and fail to deploy pool, and change DAI base unit back to 0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\n    tokenConfigs[3].uniswapMarket = \"0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc\";\n    await assert.rejects(deployPool({ priceOracle: \"UniswapView\", priceOracleConf: { tokenConfigs, isPublic: true } }, { from: accounts[0], gasPrice: \"0\" }), (err) => {\n      assert(/Token config Uniswap market is not correct/.test(err));\n      return true;\n    });\n    tokenConfigs[3].uniswapMarket = \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\";\n\n    // Change DAI Uniswap market reversal to true, try and fail to deploy pool, and change DAI Uniswap market reversal back to false\n    tokenConfigs[3].isUniswapReversed = true;\n    await assert.rejects(deployPool({ priceOracle: \"UniswapView\", priceOracleConf: { tokenConfigs, isPublic: true } }, { from: accounts[0], gasPrice: \"0\" }), (err) => {\n      assert(/Token config Uniswap reversal is incorrect/.test(err));\n      return true;\n    });\n    tokenConfigs[3].isUniswapReversed = false;\n\n    // Actually deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"UniswapView\", priceOracleConf: { tokenConfigs, isPublic: true } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    uniswapView = new fuse.web3.eth.Contract(JSON.parse(fuse.openOracleContracts[\"contracts/Uniswap/UniswapView.sol:UniswapView\"].abi), priceOracleAddress);\n\n    // Post prices for TWAP assets\n    await uniswapView.methods.postPrices([\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\", \"0xdac17f958d2ee523a2206206994597c13d831ec7\", \"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xD291E7a03283640FDc51b121aC401383A46cC623\"]).send({ from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" },\n      { name: \"Fuse USDT\", symbol: \"fUSDT\", underlying: \"0xdac17f958d2ee523a2206206994597c13d831ec7\" },\n      { name: \"Fuse DAI\", symbol: \"fDAI\", underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\" },\n      { name: \"Fuse RGT\", symbol: \"fRGT\", underlying: \"0xD291E7a03283640FDc51b121aC401383A46cC623\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await uniswapView.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * (symbol == \"fRGT\" ? 0.9 : 0.95) && oraclePrice <= expectedPrice * (symbol == \"fRGT\" ? 1.1 : 1.05));\n      }\n    });\n  });\n});\n\ndescribe('UniswapAnchoredView (Coinbase)', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, uniswapAnchoredView;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"UniswapAnchoredView\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    uniswapAnchoredView = new fuse.web3.eth.Contract(JSON.parse(fuse.openOracleContracts[\"contracts/Uniswap/UniswapAnchoredView.sol:UniswapAnchoredView\"].abi), priceOracleAddress);\n\n    // Add more token configs\n    var PriceSource = {\n      FIXED_ETH: 0,\n      FIXED_USD: 1,\n      REPORTER: 2,\n      TWAP: 3\n    };\n\n    var tokenConfigs = [\n      { underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\", symbolHash: Fuse.Web3.utils.soliditySha3(\"WETH\"), baseUnit: Fuse.Web3.utils.toBN(1e18).toString(), priceSource: PriceSource.FIXED_ETH, fixedPrice: Fuse.Web3.utils.toBN(1e18).toString(), uniswapMarket: \"0x0000000000000000000000000000000000000000\", isUniswapReversed: false },\n      { underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\", symbolHash: Fuse.Web3.utils.soliditySha3(\"USDC\"), baseUnit: Fuse.Web3.utils.toBN(1e6).toString(), priceSource: PriceSource.FIXED_USD, fixedPrice: Fuse.Web3.utils.toBN(1e6).toString(), uniswapMarket: \"0x0000000000000000000000000000000000000000\", isUniswapReversed: false },\n      { underlying: \"0xdac17f958d2ee523a2206206994597c13d831ec7\", symbolHash: Fuse.Web3.utils.soliditySha3(\"USDT\"), baseUnit: Fuse.Web3.utils.toBN(1e6).toString(), priceSource: PriceSource.FIXED_USD, fixedPrice: Fuse.Web3.utils.toBN(1e6).toString(), uniswapMarket: \"0x0000000000000000000000000000000000000000\", isUniswapReversed: false },\n      { underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\", symbolHash: Fuse.Web3.utils.soliditySha3(\"DAI\"), baseUnit: Fuse.Web3.utils.toBN(1e18).toString(), priceSource: PriceSource.REPORTER, fixedPrice: 0, uniswapMarket: \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", isUniswapReversed: false }\n    ];\n\n    await uniswapAnchoredView.methods.add(tokenConfigs).send({ from: accounts[0], gasPrice: \"0\" });\n\n    // Post prices for TWAP assets\n    await uniswapAnchoredView.methods.postPrices([], [], [\"ETH\", \"DAI\"]).send({ from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" },\n      { name: \"Fuse USDT\", symbol: \"fUSDT\", underlying: \"0xdac17f958d2ee523a2206206994597c13d831ec7\" },\n      { name: \"Fuse DAI\", symbol: \"fDAI\", underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\" },\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await uniswapAnchoredView.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n      }\n    });\n  });\n}); */\n\ndescribe('ChainlinkPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, chainlinkPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"ChainlinkPriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    chainlinkPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"ChainlinkPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" },\n      { name: \"Fuse USDT\", symbol: \"fUSDT\", underlying: \"0xdac17f958d2ee523a2206206994597c13d831ec7\" },\n      { name: \"Fuse DAI\", symbol: \"fDAI\", underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\" },\n      { name: \"Fuse MLN\", symbol: \"fMLN\", underlying: \"0xec67005c4e498ec7f55e092bd1d35cbc47c91892\" },\n      // { name: \"Fuse sTSLA\", symbol: \"fsTSLA\", underlying: \"0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D\" },\n      { name: \"Fuse DIGG\", symbol: \"fDIGG\", underlying: \"0x798D1bE841a82a273720CE31c822C61a67a601C3\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await chainlinkPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n      }\n    });\n  });\n});\n\n/* describe('PreferredPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, preferredPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Price oracle token configs\n    var PriceSource = {\n      FIXED_ETH: 0,\n      FIXED_USD: 1,\n      REPORTER: 2,\n      TWAP: 3\n    };\n\n    var tokenConfigs = [\n      { underlying: \"0xD291E7a03283640FDc51b121aC401383A46cC623\", symbolHash: Fuse.Web3.utils.soliditySha3(\"RGT\"), baseUnit: Fuse.Web3.utils.toBN(1e18).toString(), priceSource: PriceSource.TWAP, fixedPrice: 0, uniswapMarket: \"0xdc2b82bc1106c9c5286e59344896fb0ceb932f53\", isUniswapReversed: true }\n    ];\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"PreferredPriceOracle\", priceOracleConf: { tokenConfigs } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    preferredPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"PreferredPriceOracle\"].abi, priceOracleAddress);\n    var uniswapViewAddress = await preferredPriceOracle.methods.secondaryOracle().call();\n    var uniswapView = new fuse.web3.eth.Contract(JSON.parse(fuse.openOracleContracts[\"contracts/Uniswap/UniswapView.sol:UniswapView\"].abi), uniswapViewAddress);\n\n    // Post prices for TWAP assets\n    await uniswapView.methods.postPrices([\"0xD291E7a03283640FDc51b121aC401383A46cC623\"]).send({ from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" },\n      { name: \"Fuse USDT\", symbol: \"fUSDT\", underlying: \"0xdac17f958d2ee523a2206206994597c13d831ec7\" },\n      { name: \"Fuse DAI\", symbol: \"fDAI\", underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\" },\n      { name: \"Fuse MLN\", symbol: \"fMLN\", underlying: \"0xec67005c4e498ec7f55e092bd1d35cbc47c91892\" },\n      { name: \"Fuse RGT\", symbol: \"fRGT\", underlying: \"0xD291E7a03283640FDc51b121aC401383A46cC623\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await preferredPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * (symbol == \"fRGT\" ? 0.9 : 0.95) && oraclePrice <= expectedPrice * (symbol == \"fRGT\" ? 1.1 : 1.05));\n      }\n    });\n  });\n}); */\n\ndescribe('MasterPriceOracle, YVaultV1PriceOracle, YVaultV2PriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, masterPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Addresses\n    var yfi = \"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e\";\n    var wbtc = \"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599\";\n    var yWeth = \"0xe1237aA7f535b0CC33Fd973D66cBf830354D16c7\";\n    var yYfi = \"0xBA2E7Fed597fd0E3e70f5130BcDbbFE06bB94fe1\";\n    var yvWbtc = \"0xcB550A6D4C8e3517A939BC79d0c7093eb7cF56B5\";\n\n    // Deploy ChainlinkPriceOracle\n    var chainlinkPriceOracle = await fuse.deployPriceOracle(\"ChainlinkPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy YVaultV1PriceOracle\n    var yVaultV1PriceOracle = await fuse.deployPriceOracle(\"YVaultV1PriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy YVaultV2PriceOracle\n    var yVaultV2PriceOracle = await fuse.deployPriceOracle(\"YVaultV2PriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool with MasterPriceOracle\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"MasterPriceOracle\", priceOracleConf: { underlyings: [yfi, wbtc, yWeth, yYfi, yvWbtc], oracles: [chainlinkPriceOracle, chainlinkPriceOracle, yVaultV1PriceOracle, yVaultV1PriceOracle, yVaultV2PriceOracle] } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    masterPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"MasterPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse yWETH\", symbol: \"fyWETH\", underlying: yWeth },\n      { name: \"Fuse yYFI\", symbol: \"fyYFI\", underlying: yYfi },\n      { name: \"Fuse yvWBTC\", symbol: \"fyvWBTC\", underlying: yvWbtc }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await masterPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" || underlying.toLowerCase() == \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\".toLowerCase() ? 1 : (await getYVaultPrice(underlying, symbol.substr(0, 3) == \"fyv\"));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n      }\n    });\n  });\n});\n\nasync function getYVaultPrice(yVault, v2) {\n  var abi = v2 ? [{\n    \"name\": \"pricePerShare\",\n    \"outputs\": [{\n        \"type\": \"uint256\",\n        \"name\": \"\"\n      }\n    ],\n    \"inputs\": [],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\",\n    \"gas\": 12704\n  }, {\n    \"name\": \"token\",\n    \"outputs\": [{\n        \"type\": \"address\",\n        \"name\": \"\"\n      }\n    ],\n    \"inputs\": [],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\",\n    \"gas\": 2831\n  }] : [{\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getPricePerFullShare\",\n    \"outputs\": [{\n        \"internalType\": \"uint256\",\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }, {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"token\",\n    \"outputs\": [{\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }];\n\n  var yVaultContract = new fuse.web3.eth.Contract(abi, yVault);\n  var tokenUnderlyingYVault = await yVaultContract.methods.token().call();\n  if (v2) return (await yVaultContract.methods.pricePerShare().call()) / (10 ** (await (new fuse.web3.eth.Contract(erc20Abi, yVault)).methods.decimals().call())) * (await getTokenPrice(tokenUnderlyingYVault));\n  else return (await yVaultContract.methods.getPricePerFullShare().call()) / 1e18 * (await getTokenPrice(tokenUnderlyingYVault));\n}\n\ndescribe('MasterPriceOracle, UniswapLpTokenPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, masterPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Addresses\n    var usdc = \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\";\n    var usdt = \"0xdac17f958d2ee523a2206206994597c13d831ec7\";\n    var usdcUsdtUniswapLpToken = \"0x3041cbd36888becc7bbcbc0045e3b1f144466f5f\";\n    var mln = \"0xec67005c4e498ec7f55e092bd1d35cbc47c91892\";\n    var ethMlnUniswapLpToken = \"0x15ab0333985fd1e289adf4fbbe19261454776642\";\n    var yfi = \"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e\";\n    var yfiEthSushiSwapLpToken = \"0x088ee5007c98a9677165d78dd2109ae4a3d04d0c\";\n\n    // Deploy ChainlinkPriceOracle\n    var chainlinkPriceOracle = await fuse.deployPriceOracle(\"ChainlinkPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy UniswapLpTokenPriceOracle\n    var uniswapLpTokenPriceOracle = await fuse.deployPriceOracle(\"UniswapLpTokenPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool with MasterPriceOracle\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"MasterPriceOracle\", priceOracleConf: { underlyings: [usdc, usdt, mln, yfi, usdcUsdtUniswapLpToken, ethMlnUniswapLpToken, yfiEthSushiSwapLpToken], oracles: [chainlinkPriceOracle, chainlinkPriceOracle, chainlinkPriceOracle, chainlinkPriceOracle, uniswapLpTokenPriceOracle, uniswapLpTokenPriceOracle, uniswapLpTokenPriceOracle] } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    masterPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"MasterPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse USDC-USDT (Uniswap)\", symbol: \"fuUSDC-USDT\", underlying: usdcUsdtUniswapLpToken },\n      { name: \"Fuse ETH-MLN (Uniswap)\", symbol: \"fuETH-MLN\", underlying: ethMlnUniswapLpToken },\n      { name: \"Fuse YFI-ETH (SushiSwap)\", symbol: \"fsYFI-ETH\", underlying: yfiEthSushiSwapLpToken }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await masterPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" || underlying.toLowerCase() == \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\".toLowerCase() ? 1 : (await getLpTokenPrice(underlying, symbol.substr(0, 2) == \"fs\"));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.9 && oraclePrice <= expectedPrice * 1.1);\n      }\n    });\n  });\n});\n\nasync function getLpTokenPrice(lpToken, sushiSwap) {\n  var data = (\n    await axios.post(\n      sushiSwap ? \"https://api.thegraph.com/subgraphs/name/zippoxer/sushiswap-subgraph-fork\" : \"https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2\",\n      {\n        query: `{\n          myPair: pair(id: \"` + lpToken.toLowerCase() + `\") {\n            reserveUSD\n            totalSupply\n          }\n        }`,\n      }\n    )\n  ).data;\n  return parseFloat(data.data.myPair.reserveUSD) / parseFloat(data.data.myPair.totalSupply) * (await getTokenPrice(\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"));\n}\n\n/* describe('AlphaHomoraV1PriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddress, comptroller, priceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"AlphaHomoraV1PriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    priceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"AlphaHomoraV1PriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddress = await deployAsset({ comptroller: poolAddress, name: \"Fuse ibETH\", symbol: \"fibETH\", underlying: \"0x67B66C99D3Eb37Fa76Aa3Ed1ff33E8e39F0b9c7A\" }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      var oraclePrice = (await priceOracle.methods.getUnderlyingPrice(assetAddress).call()) / 1e18;\n      var expectedPrice = await getTokenPrice(\"0x67B66C99D3Eb37Fa76Aa3Ed1ff33E8e39F0b9c7A\");\n      // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n      assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n    });\n  });\n});\n\ndescribe('RecursivePriceOracle (Compound)', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, recursivePriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"RecursivePriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    recursivePriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"RecursivePriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse Compound ETH\", symbol: \"fcETH\", underlying: \"0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5\" },\n      { name: \"Fuse Compound USDC\", symbol: \"fcUSDC\", underlying: \"0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643\" },\n      { name: \"Fuse Compound UNI\", symbol: \"fcUNI\", underlying: \"0x35a18000230da775cac24873d00ff85bccded550\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // TODO: Check Compound's UniswapAnchoredView?\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await recursivePriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n      }\n    });\n  });\n});\n\ndescribe('RecursivePriceOracle (Fuse)', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, recursivePriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Deploy underlying pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"ChainlinkPriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    chainlinkPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"ChainlinkPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy underlying assets\n    underlyingPoolAssetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" },\n      { name: \"Fuse MLN\", symbol: \"fMLN\", underlying: \"0xec67005c4e498ec7f55e092bd1d35cbc47c91892\" }\n    ]) {\n      underlyingPoolAssetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"RecursivePriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    recursivePriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"RecursivePriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse Fuse ETH\", symbol: \"ffETH\", underlying: underlyingPoolAssetAddresses.fETH },\n      { name: \"Fuse Fuse USDC\", symbol: \"ffUSDC\", underlying: underlyingPoolAssetAddresses.fUSDC },\n      { name: \"Fuse Fuse MLN\", symbol: \"ffMLN\", underlying: underlyingPoolAssetAddresses.fMLN }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await recursivePriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n\n        if (underlying) {\n          var underlyingCToken = new fuse.web3.eth.Contract(cErc20Abi, underlying);\n          var underlyingCTokenDecimals = await underlyingCToken.methods.decimals().call();\n          if (await underlyingCToken.methods.isCEther().call()) {\n            var underlyingCTokenUnderlyingDecimals = 18;\n          } else {\n            var underlyingCTokenUnderlying = await underlyingCToken.methods.underlying().call();\n            var underlyingCTokenUnderlyingToken = new fuse.web3.eth.Contract(erc20Abi, underlyingCTokenUnderlying);\n            var underlyingCTokenUnderlyingDecimals = await underlyingCTokenUnderlyingToken.methods.decimals().call();\n          }\n          var expectedUnderlyingCTokenUnderlyingPrice = symbol === \"ffETH\" ? 1 : (await getTokenPrice(underlyingCTokenUnderlying));\n          var expectedPrice = (await underlyingCToken.methods.exchangeRateCurrent().call()) * (10 ** underlyingCTokenDecimals) / (10 ** underlyingCTokenUnderlyingDecimals) / 1e18 * expectedUnderlyingCTokenUnderlyingPrice;\n        } else var expectedPrice = 1;\n\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n      }\n    });\n  });\n});\n\ndescribe('Keep3rPriceOracle (Uniswap)', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, keep3rPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"Keep3rPriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    keep3rPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"Keep3rPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" },\n      { name: \"Fuse LINK\", symbol: \"fLINK\", underlying: \"0x514910771af9ca656af840dff83e8264ecf986ca\" },\n      { name: \"Fuse YFI\", symbol: \"fYFI\", underlying: \"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e\" },\n      { name: \"Fuse CRV\", symbol: \"fCRV\", underlying: \"0xD533a949740bb3306d119CC777fa900bA034cd52\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await keep3rPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n      }\n    });\n  });\n});\n\ndescribe('Keep3rPriceOracle (SushiSwap)', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, keep3rPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"Keep3rPriceOracle\", priceOracleConf: { sushiswap: true } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    keep3rPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"Keep3rPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" },\n      { name: \"Fuse LINK\", symbol: \"fLINK\", underlying: \"0x514910771af9ca656af840dff83e8264ecf986ca\" },\n      { name: \"Fuse YFI\", symbol: \"fYFI\", underlying: \"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e\" },\n      { name: \"Fuse SUSHI\", symbol: \"fSUSHI\", underlying: \"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await keep3rPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n      }\n    });\n  });\n});\n\ndescribe('SynthetixPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, synthetixPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"SynthetixPriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    synthetixPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"SynthetixPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse sUSD\", symbol: \"fsUSD\", underlying: \"0x57ab1ec28d129707052df4df418d58a2d46d5f51\" },\n      { name: \"Fuse sBTC\", symbol: \"fsBTC\", underlying: \"0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6\" },\n      { name: \"Fuse sETH\", symbol: \"fsETH\", underlying: \"0x5e74c9036fb86bd7ecdcb084a0673efc32ea31cb\" },\n      { name: \"Fuse sEUR\", symbol: \"fsEUR\", underlying: \"0xd71ecff9342a5ced620049e616c5035f1db98620\" },\n      { name: \"Fuse sDEFI\", symbol: \"sDEFI\", underlying: \"0xe1afe1fd76fd88f78cbf599ea1846231b8ba3b6b\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await synthetixPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n      }\n    });\n  });\n}); */\n\ndescribe('MasterPriceOracle, CurveLpTokenPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, masterPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Addresses\n    var dai = \"0x6B175474E89094C44Da98b954EedeAC495271d0F\";\n    var usdc = \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\";\n    var usdt = \"0xdac17f958d2ee523a2206206994597c13d831ec7\";\n    var threePoolCurveLpToken = \"0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490\";\n    var wbtc = \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\";\n    var renbtc = \"0xeb4c2781e4eba804ce9a9803c67d0893436bb27d\";\n    var renCurveLpToken = \"0x49849C98ae39Fff122806C06791Fa73784FB3675\";\n    var ust = \"0xa47c8bf37f92abed4a126bda807a7b7498661acd\";\n    var ustCurveLpToken = \"0x94e131324b6054c0D789b190b2dAC504e4361b53\";\n\n    // Deploy ChainlinkPriceOracle\n    var chainlinkPriceOracle = await fuse.deployPriceOracle(\"ChainlinkPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy CurveLpTokenPriceOracle\n    var curveLpTokenPriceOracle = await fuse.deployPriceOracle(\"CurveLpTokenPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Register LP tokens with CurveLpTokenPriceOracle\n    var curveOracleContract = new fuse.web3.eth.Contract(fuse.oracleContracts[\"CurveLpTokenPriceOracle\"].abi, curveLpTokenPriceOracle);\n    for (const lpToken of [threePoolCurveLpToken, renCurveLpToken, ustCurveLpToken]) await curveOracleContract.methods.registerPool(lpToken).send({ from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool with MasterPriceOracle\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"MasterPriceOracle\", priceOracleConf: { underlyings: [dai, usdc, usdt, wbtc, renbtc, ust, threePoolCurveLpToken, renCurveLpToken, ustCurveLpToken], oracles: [chainlinkPriceOracle, chainlinkPriceOracle, chainlinkPriceOracle, chainlinkPriceOracle, chainlinkPriceOracle, chainlinkPriceOracle, curveLpTokenPriceOracle, curveLpTokenPriceOracle, curveLpTokenPriceOracle] } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    masterPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"MasterPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse 3Crv\", symbol: \"f3Crv\", underlying: threePoolCurveLpToken },\n      { name: \"Fuse crvRenWBTC\", symbol: \"fcrvRenWBTC\", underlying: renCurveLpToken },\n      { name: \"Fuse ust3CRV\", symbol: \"fust3CRV\", underlying: ustCurveLpToken }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await masterPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" || underlying.toLowerCase() == \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\".toLowerCase() ? 1 : (await getCurveLpTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.9 && oraclePrice <= expectedPrice * 1.1);\n      }\n    });\n  });\n});\n\nasync function getCurveLpTokenPrice(lpToken) {\n  var abi = [{\n    \"name\": \"get_virtual_price_from_lp_token\",\n    \"outputs\": [{\n      \"type\": \"uint256\",\n      \"name\": \"\"\n    }],\n    \"inputs\": [{\n      \"type\": \"address\",\n      \"name\": \"_token\"\n    }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }];\n  var registry = new fuse.web3.eth.Contract(abi, \"0x7D86446dDb609eD0F5f8684AcF30380a356b2B4c\");\n  var virtualPrice = (await registry.methods.get_virtual_price_from_lp_token(lpToken).call()) / 1e18;\n  switch (lpToken) {\n    case \"0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490\":\n    case \"0x94e131324b6054c0D789b190b2dAC504e4361b53\":\n      return virtualPrice * (await getTokenPrice(\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"));\n      break;\n    case \"0x49849C98ae39Fff122806C06791Fa73784FB3675\":\n      return virtualPrice * (await getTokenPrice(\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\"));\n      break;\n    default: throw \"Invalid LP token supplied to Curve LP token price getter.\";\n  }\n}\n\ndescribe('MasterPriceOracle, BalancerLpTokenPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, masterPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Addresses\n    var wbtc = \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\";\n    var wbtcWethBalancerPoolToken = \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\";\n    var bal = \"0xba100000625a3754423978a60c9317c58a424e3D\";\n    var balWethBalancerPoolToken = \"0x59a19d8c652fa0284f44113d0ff9aba70bd46fb4\";\n    var susd = \"0x57Ab1ec28D129707052df4dF418D58a2D46d5f51\";\n    var stsla = \"0x918dA91Ccbc32B7a6A0cc4eCd5987bbab6E31e6D\";\n    var susdStslaBalancerPoolToken = \"0x055db9aff4311788264798356bbf3a733ae181c6\";\n\n    // Deploy ChainlinkPriceOracle\n    var chainlinkPriceOracle = await fuse.deployPriceOracle(\"ChainlinkPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy BalancerLpTokenPriceOracle\n    var balancerLpTokenPriceOracle = await fuse.deployPriceOracle(\"BalancerLpTokenPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool with MasterPriceOracle\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"MasterPriceOracle\", priceOracleConf: { underlyings: [wbtc, bal, susd, stsla, wbtcWethBalancerPoolToken, balWethBalancerPoolToken, susdStslaBalancerPoolToken], oracles: [chainlinkPriceOracle, chainlinkPriceOracle, chainlinkPriceOracle, chainlinkPriceOracle, balancerLpTokenPriceOracle, balancerLpTokenPriceOracle, balancerLpTokenPriceOracle] } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    masterPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"MasterPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse WBTC-WETH (Balancer)\", symbol: \"fbWBTC-WETH\", underlying: wbtcWethBalancerPoolToken },\n      { name: \"Fuse BAL-WETH (Balancer)\", symbol: \"fbBAL-WETH\", underlying: balWethBalancerPoolToken },\n      { name: \"Fuse sUSD-sTSLA (Balancer)\", symbol: \"fbsUSD-sTSLA\", underlying: susdStslaBalancerPoolToken }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var oraclePrice = (await masterPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        var expectedPrice = symbol === \"fETH\" || underlying.toLowerCase() == \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\".toLowerCase() ? 1 : (await getBalancerLpTokenPrice(underlying));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.9 && oraclePrice <= expectedPrice * 1.1);\n      }\n    });\n  });\n});\n\nasync function getBalancerLpTokenPrice(lpToken) {\n  var data = (\n    await axios.post(\n      \"https://api.thegraph.com/subgraphs/name/balancer-labs/balancer\",\n      {\n        query: `{\n          pool(id: \"` + lpToken.toLowerCase() + `\") {\n            liquidity\n            totalShares\n          }\n        }`,\n      }\n    )\n  ).data;\n  return parseFloat(data.data.pool.liquidity) / parseFloat(data.data.pool.totalShares) * (await getTokenPrice(\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"));\n}\n\nasync function getCurveLpTokenPrice(lpToken) {\n  var abi = [{\n    \"name\": \"get_virtual_price_from_lp_token\",\n    \"outputs\": [{\n      \"type\": \"uint256\",\n      \"name\": \"\"\n    }],\n    \"inputs\": [{\n      \"type\": \"address\",\n      \"name\": \"_token\"\n    }],\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }];\n  var registry = new fuse.web3.eth.Contract(abi, \"0x7D86446dDb609eD0F5f8684AcF30380a356b2B4c\");\n  var virtualPrice = (await registry.methods.get_virtual_price_from_lp_token(lpToken).call()) / 1e18;\n  switch (lpToken.toLowerCase()) {\n    case \"0x6c3f90f043a72fa612cbac8115ee7e52bde6e490\": // Curve.fi DAI/USDC/USDT (3Crv)\n    case \"0x94e131324b6054c0d789b190b2dac504e4361b53\": // Curve.fi UST/3Crv (ust3CRV)\n      return virtualPrice * (await getTokenPrice(\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\")); // USDC\n    case \"0x49849c98ae39fff122806c06791fa73784fb3675\": // Curve.fi renBTC/wBTC (crvRenWBTC)\n      return virtualPrice * (await getTokenPrice(\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\")); // WBTC\n    case \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\": // Curve.fi LINK/sLINK (linkCRV)\n      return virtualPrice * (await getTokenPrice(\"0x514910771af9ca656af840dff83e8264ecf986ca\")); // LINK\n    default: throw \"Invalid LP token supplied to Curve LP token price getter.\";\n  }\n}\n\ndescribe('MasterPriceOracle, CurveLiquidityGaugeV2PriceOracle', function() {\n  this.timeout(60000);\n  var accounts, assetAddresses, comptroller, masterPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Addresses\n    var link = \"0x514910771af9ca656af840dff83e8264ecf986ca\";\n    var sLink = \"0xbBC455cb4F1B9e4bFC4B73970d360c8f032EfEE6\";\n    var linkCurveLpToken = \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\";\n    var linkCurveGauge = \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\";\n\n    // Deploy ChainlinkPriceOracleV2\n    var chainlinkPriceOracleV2 = await fuse.deployPriceOracle(\"ChainlinkPriceOracleV2\", {}, { from: accounts[0], gasPrice: 1e6, gas: 10e6 });\n    var chainlinkOracleContract = new fuse.web3.eth.Contract(fuse.oracleContracts[\"ChainlinkPriceOracleV2\"].abi, chainlinkPriceOracleV2);\n    await chainlinkOracleContract.methods.setPriceFeeds([link, sLink], [\"0xDC530D9457755926550b59e8ECcdaE7624181557\", \"0xDC530D9457755926550b59e8ECcdaE7624181557\"], 0).send({ from: accounts[0], gasPrice: 1e6, gas: 10e6 });\n\n    // Deploy CurveLpTokenPriceOracle\n    var curveLpTokenPriceOracle = await fuse.deployPriceOracle(\"CurveLpTokenPriceOracle\", {}, { from: accounts[0], gasPrice: 1e6, gas: 10e6 });\n    var curveOracleContract = new fuse.web3.eth.Contract(fuse.oracleContracts[\"CurveLpTokenPriceOracle\"].abi, curveLpTokenPriceOracle);\n    for (const lpToken of [linkCurveLpToken]) await curveOracleContract.methods.registerPool(lpToken).send({ from: accounts[0], gasPrice: 1e6, gas: 10e6 });\n\n    // Deploy CurveLiquidityGaugeV2PriceOracle\n    var curveLiquidityGaugeV2PriceOracle = await fuse.deployPriceOracle(\"CurveLiquidityGaugeV2PriceOracle\", {}, { from: accounts[0], gasPrice: 1e6, gas: 10e6 });\n\n    // Deploy pool with MasterPriceOracle\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"MasterPriceOracle\", priceOracleConf: { underlyings: [link, sLink, linkCurveLpToken, linkCurveGauge], oracles: [chainlinkPriceOracleV2, chainlinkPriceOracleV2, curveLpTokenPriceOracle, curveLiquidityGaugeV2PriceOracle] } }, { from: accounts[0], gasPrice: 1e6, gas: 10e6 });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    masterPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"MasterPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse linkCRV-gauge\", symbol: \"flinkCRV-gauge\", underlying: linkCurveGauge }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: 1e6, gas: 10e6 }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" || underlying.toLowerCase() == \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\".toLowerCase() ? 1 : (await getCurveLiquidityGaugeV2Price(underlying));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await masterPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.9 && oraclePrice <= expectedPrice * 1.1);\n\n        // Test `price`\n        oraclePrice = (await masterPriceOracle.methods.price(underlying).call()) / 1e18;\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.9 && oraclePrice <= expectedPrice * 1.1);\n      }\n    });\n  });\n});\n\nasync function getCurveLiquidityGaugeV2Price(gauge) {\n  var abi = [{\"name\":\"lp_token\",\"outputs\":[{\"type\":\"address\",\"name\":\"\"}],\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"gas\":1871}];\n  var gauge = new fuse.web3.eth.Contract(abi, gauge);\n  var lpToken = await gauge.methods.lp_token().call();\n  return await getCurveLpTokenPrice(lpToken);\n}\n\n// TODO: Test canAdminOverwrite\n// TODO: Test price not just getUnderlyingPrice on all oracles\ndescribe('ChainlinkPriceOracleV2', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, chainlinkPriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"ChainlinkPriceOracleV2\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    chainlinkPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"ChainlinkPriceOracleV2\"].abi, priceOracleAddress);\n\n    const FeedBaseCurrency = {\n      ETH: 0,\n      USD: 1,\n      BTC: 2\n    };\n    await chainlinkPriceOracle.methods.setPriceFeeds([\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\", \"0xdac17f958d2ee523a2206206994597c13d831ec7\", \"0xec67005c4e498ec7f55e092bd1d35cbc47c91892\"], [\"0x986b5E1e1755e3C2440e960477f25201B0a8bbD4\", \"0xEe9F2375b4bdF6387aa8265dD4FB8F16512A1d46\", \"0xDaeA8386611A157B08829ED4997A8A62B557014C\"], FeedBaseCurrency.ETH).send({ from: accounts[0], gasPrice: \"0\" }); // USDC, USDT, MLN\n    await chainlinkPriceOracle.methods.setPriceFeeds([\"0x6b175474e89094c44da98b954eedeac495271d0f\"], [\"0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9\"], FeedBaseCurrency.USD).send({ from: accounts[0], gasPrice: \"0\" }); // DAI\n    await chainlinkPriceOracle.methods.setPriceFeeds([\"0x798D1bE841a82a273720CE31c822C61a67a601C3\"], [\"0x418a6C98CD5B8275955f08F0b8C1c6838c8b1685\"], FeedBaseCurrency.BTC).send({ from: accounts[0], gasPrice: \"0\" }); // DIGG\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ETH\", symbol: \"fETH\" },\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" },\n      { name: \"Fuse USDT\", symbol: \"fUSDT\", underlying: \"0xdac17f958d2ee523a2206206994597c13d831ec7\" },\n      { name: \"Fuse DAI\", symbol: \"fDAI\", underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\" },\n      { name: \"Fuse MLN\", symbol: \"fMLN\", underlying: \"0xec67005c4e498ec7f55e092bd1d35cbc47c91892\" },\n      { name: \"Fuse DIGG\", symbol: \"fDIGG\", underlying: \"0x798D1bE841a82a273720CE31c822C61a67a601C3\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await chainlinkPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await chainlinkPriceOracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        }\n      }\n    });\n  });\n});\n\ndescribe('FixedEthPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"FixedEthPriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    oracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"FixedEthPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse WETH\", symbol: \"fWETH\", underlying: \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\" },\n      { name: \"Fuse sETH\", symbol: \"fsETH\", underlying: \"0x5e74c9036fb86bd7ecdcb084a0673efc32ea31cb\" },\n      { name: \"Fuse stETH\", symbol: \"fstETH\", underlying: \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = 1;\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await oracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.99 && oraclePrice <= expectedPrice * 1.01);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await oracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.99 && oraclePrice <= expectedPrice * 1.01);\n        }\n      }\n    });\n  });\n});\n\ndescribe('FixedEurPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"FixedEurPriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    oracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"FixedEurPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse EURS\", symbol: \"fEURS\", underlying: \"0xdb25f211ab05b1c97d595516f45794528a807ad8\" },\n      { name: \"Fuse sEUR\", symbol: \"fsEUR\", underlying: \"0xd71ecff9342a5ced620049e616c5035f1db98620\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await oracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await oracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        }\n      }\n    });\n  });\n});\n\ndescribe(\"UniswapTwapPriceOracle (Uniswap)\", function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Call update on the relevant Uniswap V2 pools\n    var rootOracleContract = new fuse.web3.eth.Contract([{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pairs\",\"type\":\"address[]\"}],\"name\":\"update\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}], Fuse.UNISWAP_TWAP_PRICE_ORACLE_ROOT_CONTRACT_ADDRESS);\n    await rootOracleContract.methods[\"update(address[])\"]([\"0x6ada49aeccf6e556bb7a35ef0119cc8ca795294a\", \"0x94b0a3d511b6ecdb17ebf877278ab030acb0a878\"]).send({ from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"UniswapTwapPriceOracle\", priceOracleConf: { rootOracle: Fuse.UNISWAP_TWAP_PRICE_ORACLE_ROOT_CONTRACT_ADDRESS, uniswapV2Factory: \"0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f\" } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    oracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"UniswapTwapPriceOracle\"].abi, priceOracleAddress);\n\n    // Fast forward 15 minutes to give time for the TWAP to load after calling `update`\n    await increaseTime(15 * 60);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse WOO\", symbol: \"fWOO\", underlying: \"0x4691937a7508860f876c9c0a2a617e7d9e945d4b\" },\n      { name: \"Fuse FEI\", symbol: \"fFEI\", underlying: \"0x956f47f50a910163d8bf957cf5846d573e7f87ca\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await oracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await oracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        }\n      }\n    });\n  });\n});\n\ndescribe(\"UniswapTwapPriceOracle (SushiSwap)\", function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Call update on the relevant Uniswap V2 pools\n    var rootOracleContract = new fuse.web3.eth.Contract([{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pairs\",\"type\":\"address[]\"}],\"name\":\"update\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}], Fuse.UNISWAP_TWAP_PRICE_ORACLE_ROOT_CONTRACT_ADDRESS);\n    await rootOracleContract.methods[\"update(address[])\"]([\"0xc3f279090a47e80990fe3a9c30d24cb117ef91a8\"]).send({ from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"UniswapTwapPriceOracle\", priceOracleConf: { rootOracle: Fuse.UNISWAP_TWAP_PRICE_ORACLE_ROOT_CONTRACT_ADDRESS, uniswapV2Factory: \"0xc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac\" } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    oracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"UniswapTwapPriceOracle\"].abi, priceOracleAddress);\n\n    // Fast forward 15 minutes to give time for the TWAP to load after calling `increaseObservationCardinalityNext`\n    await increaseTime(15 * 60);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse ALCX\", symbol: \"fALCX\", underlying: \"0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await oracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await oracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        }\n      }\n    });\n  });\n});\n\ndescribe(\"MasterPriceOracle, UniswapTwapPriceOracleV2 (SushiSwap)\", function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy UniswapTwapPriceOracleV2Root\n    var rootOracle = await fuse.deployPriceOracle(\"UniswapTwapPriceOracleV2Root\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy UniswapTwapPriceOracleV2\n    var twapOracle = await fuse.deployPriceOracle(\"UniswapTwapPriceOracleV2\", { rootOracle: rootOracle, uniswapV2Factory: \"0xc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac\", baseToken: \"0x6b175474e89094c44da98b954eedeac495271d0f\" }, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy ChainlinkPriceOracle for DAI\n    var chainlinkPriceOracle = await fuse.deployPriceOracle(\"ChainlinkPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Call update on the relevant Uniswap V2 pools\n    var rootOracleContract = new fuse.web3.eth.Contract([{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pairs\",\"type\":\"address[]\"}],\"name\":\"update\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}], rootOracle);\n    await rootOracleContract.methods[\"update(address[])\"]([\"0x34d7d7aaf50ad4944b70b320acb24c95fa2def7c\"]).send({ from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"MasterPriceOracle\", priceOracleConf: { underlyings: [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0x383518188c0c6d7730d91b2c03a03c837814a899\"], oracles: [chainlinkPriceOracle, twapOracle] } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    oracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"MasterPriceOracle\"].abi, priceOracleAddress);\n\n    // Fast forward 15 minutes to give time for the TWAP to load after calling `update`\n    await increaseTime(15 * 60);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse OHM\", symbol: \"fOHM\", underlying: \"0x383518188c0c6d7730d91b2c03a03c837814a899\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await oracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await oracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        }\n      }\n    });\n  });\n});\n\ndescribe('UniswapV3TwapPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // `IUniswapV3Pool.increaseObservationCardinalityNext(64)`\n    var uniswapV3PoolAbi = [{\n      \"inputs\": [\n        {\n          \"internalType\": \"uint16\",\n          \"name\": \"observationCardinalityNext\",\n          \"type\": \"uint16\"\n        }\n      ],\n      \"name\": \"increaseObservationCardinalityNext\",\n      \"outputs\": [],\n      \"stateMutability\": \"nonpayable\",\n      \"type\": \"function\"\n    }];\n    for (const pool of [\"0x122e55503a0b2e5cd528effa44d0b2fea300f24b\", \"0x2028d7ef0223c45cadbf05e13f1823c1228012bf\"]) {\n      var uniswapV3Pool = new fuse.web3.eth.Contract(uniswapV3PoolAbi, pool);\n      await uniswapV3Pool.methods.increaseObservationCardinalityNext(64).send({ from: accounts[0], gasPrice: \"0\" });\n    }\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"UniswapV3TwapPriceOracle\", priceOracleConf: { uniswapV3Factory: \"0x1f98431c8ad98523631ae4a59f267346ea31f984\", feeTier: 3000 } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    oracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"UniswapV3TwapPriceOracle\"].abi, priceOracleAddress);\n\n    // Fast forward 10 minutes to give time for the TWAP to load after calling `increaseObservationCardinalityNext`\n    await increaseTime(10 * 60);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse WOO\", symbol: \"fWOO\", underlying: \"0x4691937a7508860f876c9c0a2a617e7d9e945d4b\" },\n      { name: \"Fuse FEI\", symbol: \"fFEI\", underlying: \"0x956f47f50a910163d8bf957cf5846d573e7f87ca\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await oracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await oracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        }\n      }\n    });\n  });\n});\n\ndescribe('WSTEthPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"WSTEthPriceOracle\" }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    oracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"WSTEthPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse wstETH\", symbol: \"fwstETH\", underlying: \"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getWSTEthTokenPrice());\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await oracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.99 && oraclePrice <= expectedPrice * 1.01);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await oracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.99 && oraclePrice <= expectedPrice * 1.01);\n        }\n      }\n    });\n  });\n});\n\nasync function getWSTEthTokenPrice() {\n  var wstEthAbi = [{\"inputs\":[],\"name\":\"stEthPerToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}];\n  var wstEth = new fuse.web3.eth.Contract(wstEthAbi, \"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0\");\n  return (await wstEth.methods.stEthPerToken().call()) / 1e18;\n}\n\ndescribe('MasterPriceOracle, FixedTokenPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy FixedTokenPriceOracle pegged to DAI\n    var fixedTokenPriceOracle = await fuse.deployPriceOracle(\"FixedTokenPriceOracle\", { baseToken: \"0x6b175474e89094c44da98b954eedeac495271d0f\" }, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy ChainlinkPriceOracle for DAI\n    var chainlinkPriceOracle = await fuse.deployPriceOracle(\"ChainlinkPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool with MasterPriceOracle with USDC pegged to DAI\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"MasterPriceOracle\", priceOracleConf: { underlyings: [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"], oracles: [chainlinkPriceOracle, fixedTokenPriceOracle] } }, { from: accounts[0], gasPrice: 1e6, gas: 10e6 });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    masterPriceOracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"MasterPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse DAI\", symbol: \"fDAI\", underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\" },\n      { name: \"Fuse USDC\", symbol: \"fUSDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await masterPriceOracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await masterPriceOracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        }\n      }\n    });\n  });\n});\n\ndescribe('MasterPriceOracle, SushiBarPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy ChainlinkPriceOracle for SUSHI\n    var chainlinkPriceOracle = await fuse.deployPriceOracle(\"ChainlinkPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy SushiBarPriceOracle\n    var sushiBarPriceOracle = await fuse.deployPriceOracle(\"SushiBarPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"MasterPriceOracle\", priceOracleConf: { underlyings: [\"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2\", \"0x8798249c2e607446efb7ad49ec89dd1865ff4272\"], oracles: [chainlinkPriceOracle, sushiBarPriceOracle] } }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    oracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"SushiBarPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse xSUSHI\", symbol: \"fxSUSHI\", underlying: \"0x8798249c2e607446efb7ad49ec89dd1865ff4272\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (await getTokenPrice(underlying));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await oracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await oracle.methods.price(underlying).call()) / 1e18;\n          // console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        }\n      }\n    });\n  });\n});\n\n\ndescribe('BadgerPriceOracle', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, oracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = await fuse.web3.eth.getAccounts();\n\n    // Whitelist accounts[0] as deployer\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(\"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\");\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy BadgerPriceOracle\n    var badgerPriceOracle = await fuse.deployPriceOracle(\"BadgerPriceOracle\", {}, { from: accounts[0], gasPrice: \"0\" });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: badgerPriceOracle }, { from: accounts[0], gasPrice: \"0\" });\n    comptroller = new fuse.web3.eth.Contract(comptrollerAbi, poolAddress);\n    oracle = new fuse.web3.eth.Contract(fuse.oracleContracts[\"BadgerPriceOracle\"].abi, priceOracleAddress);\n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of [\n      { name: \"Fuse bBADGER\", symbol: \"fbBADGER\", underlying: \"0x19d97d8fa813ee2f51ad4b4e04ea08baf4dffc28\" },\n      { name: \"Fuse bDIGG\", symbol: \"fbDIGG\", underlying: \"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\" },\n      { name: \"Fuse ibBTC\", symbol: \"fibBTC\", underlying: \"0xc4e15973e6ff2a35cc804c2cf9d2a1b817a8b40f\" }\n    ]) {\n      assetAddresses[conf.symbol] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\" }, true);\n    }\n  });\n\n  describe('#getUnderlyingPrice()', function() {\n    it('should check token prices', async function() {\n      for (const symbol of Object.keys(assetAddresses)) {\n        // Get underlying token address and expected price\n        var underlying = symbol === \"fETH\" ? null : await (new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[symbol])).methods.underlying().call();\n        var expectedPrice = symbol === \"fETH\" ? 1 : (symbol === \"fibBTC\" ? (await getTokenPrice(underlying)) : (symbol === \"bDIGG\" ? 0.155539222 : (await getYVaultPrice(underlying, false))));\n\n        // Test `getUnderlyingPrice`\n        var oraclePrice = (await oracle.methods.getUnderlyingPrice(assetAddresses[symbol]).call()) / (10 ** (36 - (symbol === \"fETH\" ? 18 : (await (new fuse.web3.eth.Contract(erc20Abi, underlying)).methods.decimals().call()))));\n        console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n        // assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        \n        // Test `price` if != ETH\n        if (symbol !== \"fETH\") {\n          oraclePrice = (await oracle.methods.price(underlying).call()) / 1e18;\n          console.log(symbol + \": \" + oraclePrice + \" ETH (expected \" + expectedPrice + \" ETH)\");\n          // assert(oraclePrice >= expectedPrice * 0.95 && oraclePrice <= expectedPrice * 1.05);\n        }\n      }\n    });\n  });\n});\n"
  },
  {
    "path": "src/fuse-sdk/test/public-contracts.js",
    "content": "const Fuse = require(\"../dist/fuse.node.commonjs2.js\");\n\nvar fuse = new Fuse(process.env.TESTING_WEB3_PROVIDER_URL);\n\nconsole.log(\n  \"ChainlinkPriceOracle:\",\n  await fuse.deployPriceOracle(\n    \"ChainlinkPriceOracle\",\n    { maxSecondsBeforePriceIsStale: 0 },\n    { from: accounts[0] }\n  )\n);\n\nvar comptroller = new App.web3.eth.Contract(\n  JSON.parse(\n    fuse.compoundContracts[\"contracts/Comptroller.sol:Comptroller\"].abi\n  )\n);\ncomptroller = await comptroller\n  .deploy({\n    data:\n      \"0x\" +\n      fuse.compoundContracts[\"contracts/Comptroller.sol:Comptroller\"].bin,\n  })\n  .send({ from: accounts[0] });\nconsole.log(\"Comptroller:\", comptroller.options.address);\n\nvar cToken = new App.web3.eth.Contract(\n  JSON.parse(\n    fuse.compoundContracts[\"contracts/CErc20Delegate.sol:CErc20Delegate\"].abi\n  )\n);\ncToken = await cToken\n  .deploy({\n    data:\n      \"0x\" +\n      fuse.compoundContracts[\"contracts/CErc20Delegate.sol:CErc20Delegate\"].bin,\n  })\n  .send({ from: accounts[0] });\nconsole.log(\"CErc20Delegate:\", cToken.options.address);\n\nvar cToken = new App.web3.eth.Contract(\n  JSON.parse(\n    fuse.compoundContracts[\"contracts/CEtherDelegate.sol:CEtherDelegate\"].abi\n  )\n);\ncToken = await cToken\n  .deploy({\n    data:\n      \"0x\" +\n      fuse.compoundContracts[\"contracts/CEtherDelegate.sol:CEtherDelegate\"].bin,\n  })\n  .send({ from: accounts[0] });\nconsole.log(\"CEtherDelegate:\", cToken.options.address);\n\nFuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_Cream_StablesMajors = await fuse.deployInterestRateModel(\n  \"JumpRateModel\",\n  {\n    baseRatePerYear: Web3.utils.toBN(2e16).muln(125).divn(100),\n    multiplierPerYear: Web3.utils.toBN(2.5e17).muln(125).divn(100),\n    jumpMultiplierPerYear: Web3.utils.toBN(5e18).muln(125).divn(100),\n    kink: Web3.utils.toBN(8e17),\n  },\n  { from: accounts[0] }\n);\nconsole.log(\n  \"JumpRateModel (Stables + Majors):\",\n  Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_StablesMajors\n);\nFuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_Cream_GovSeeds = await fuse.deployInterestRateModel(\n  \"JumpRateModel\",\n  {\n    baseRatePerYear: Web3.utils.toBN(2e16).muln(125).divn(100),\n    multiplierPerYear: Web3.utils.toBN(3.5e17).muln(125).divn(100),\n    jumpMultiplierPerYear: Web3.utils.toBN(7.5e18).muln(125).divn(100),\n    kink: Web3.utils.toBN(8e17),\n  },\n  { from: accounts[0] }\n);\nconsole.log(\n  \"JumpRateModel (Gov + Seeds):\",\n  Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds\n);\n"
  },
  {
    "path": "src/fuse-sdk/test/safe-liquidator.js",
    "content": "var assert = require('assert');\nvar Big = require('big.js');\nvar hre = require('hardhat');\n\nconst Fuse = require(\"../dist/fuse.node.commonjs2.js\");\n\nassert(process.env.TESTING_WEB3_PROVIDER_URL, \"Web3 provider URL required\");\nvar fuse = new Fuse(process.env.TESTING_WEB3_PROVIDER_URL, hre);\nhre.ethers.provider = new hre.ethers.providers.Web3Provider(fuse.web3.currentProvider);\n\nvar erc20Abi = JSON.parse(fuse.compoundContracts[\"contracts/EIP20Interface.sol:EIP20Interface\"].abi);\nvar cErc20Abi = JSON.parse(fuse.compoundContracts[\"contracts/CErc20Delegate.sol:CErc20Delegate\"].abi);\nvar cEtherAbi = JSON.parse(fuse.compoundContracts[\"contracts/CEtherDelegate.sol:CEtherDelegate\"].abi);\n\n// Snapshot + revert + dry run wrapper function\nvar snapshotId = null;\n\nfunction snapshot() {\n  return new Promise(function(resolve, reject) {\n    fuse.web3.currentProvider.send({\n      jsonrpc: \"2.0\",\n      method: \"evm_snapshot\",\n      id: 1\n    }, function(err, result) {\n      if (err) return reject(err);\n      snapshotId = result.result;\n      resolve();\n    });\n  });\n}\n\nfunction revert() {\n  return new Promise(function(resolve, reject) {\n    assert(snapshotId !== null);\n    fuse.web3.currentProvider.send({\n      jsonrpc: \"2.0\",\n      method: \"evm_revert\",\n      params: [snapshotId],\n      id: new Date().getTime()\n    }, function(err, result) {\n      if (err) return reject(err);\n      assert(result.result);\n      resolve();\n    });\n  });\n}\n\nfunction dryRun(promise) {\n  return async function() {\n    await snapshot();\n    var error = null;\n\n    try {\n      await promise();\n    } catch (_error) {\n      error = _error;\n    }\n\n    await revert();\n    if (error !== null) throw error;\n  }\n}\n\n// hardhat_impersonateAccount\nfunction impersonateAccount(account) {\n  return new Promise(function(resolve, reject) {\n    fuse.web3.currentProvider.send({\n      jsonrpc: \"2.0\",\n      method: \"hardhat_impersonateAccount\",\n      params: [account],\n      id: new Date().getTime()\n    }, function(err, result) {\n      if (err) return reject(err);\n      assert(result.result);\n      resolve();\n    });\n  });\n}\n\n// Deploy pool + assets\nasync function deployPool(conf, options) {\n  if (conf.closeFactor === undefined) conf.poolName = \"Example Fuse Pool \" + (new Date()).getTime();\n  if (conf.closeFactor === undefined) conf.closeFactor = Fuse.Web3.utils.toBN(0.5e18);\n  else conf.closeFactor = Fuse.Web3.utils.toBN((new Big(conf.closeFactor)).mul((new Big(10)).pow(18)).toFixed(0));\n  if (conf.maxAssets === undefined) conf.maxAssets = 20;\n  if (conf.liquidationIncentive === undefined) conf.liquidationIncentive = Fuse.Web3.utils.toBN(1.08e18);\n  else conf.liquidationIncentive = Fuse.Web3.utils.toBN((new Big(conf.liquidationIncentive)).mul((new Big(10)).pow(18)).toFixed(0));\n\n  var [poolAddress, implementationAddress, priceOracleAddress] = await fuse.deployPool(conf.poolName, conf.isPrivate, conf.closeFactor, conf.maxAssets, conf.liquidationIncentive, conf.priceOracle, conf.priceOracleConf, options);\n  return [poolAddress, priceOracleAddress];\n}\n\nasync function deployAsset(conf, collateralFactor, reserveFactor, adminFee, options, bypassPriceFeedCheck) {\n  if (conf.interestRateModel === undefined) conf.interestRateModel = \"0x6bc8fe27d0c7207733656595e73c0d5cf7afae36\";\n  if (conf.decimals === undefined) conf.decimals = 8;\n  if (conf.admin === undefined) conf.admin = options.from;\n  if (collateralFactor === undefined) collateralFactor = Fuse.Web3.utils.toBN(0.75e18);\n  if (reserveFactor === undefined) reserveFactor = Fuse.Web3.utils.toBN(0.2e18);\n  if (adminFee === undefined) adminFee = Fuse.Web3.utils.toBN(0.05e18);\n\n  var [assetAddress, implementationAddress, interestRateModel] = await fuse.deployAsset(conf, collateralFactor, reserveFactor, adminFee, options, bypassPriceFeedCheck);\n  return assetAddress;\n}\n\n// Set CERC20_DELEGATE_CONTRACT_ADDRESS\nFuse.CERC20_DELEGATE_CONTRACT_ADDRESS = \"0x2b3dd0ae288c13a730f6c422e2262a9d3da79ed1\";\n\n// LiquidationStrategy enum\nconst LIQUIDATION_STRATEGIES = {\n  CurveLpToken: \"0xc6e7DF5E7b4f2A278906862b61205850344D4e7d\",\n  CurveLiquidityGaugeV2: \"0x59b670e9fA9D0A427751Af201D676719a970857b\",\n  UniswapLpToken: \"0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f\",\n  YearnYVaultV1: \"0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1\",\n  YearnYVaultV2: \"0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44\",\n  BalancerPoolToken: \"0x4A679253410272dd5232B3Ff7cF5dbB88f295319\",\n  SynthetixSynth: \"0x1613beB3B2C4f22Ee086B2b38C1476A3cE7f78E8\",\n  PoolTogether: \"0x82e01223d51Eb87e16A03E24687EDF0F294da6f1\",\n  CurveSwap: \"0x4c5859f0F772848b2D91F1D83E2Fe57935348029\",\n  UniswapV1: \"0x1291Be112d480055DaFd8a610b7d1e203891C274\",\n  UniswapV2: \"0x5f3f1dBD7B74C6B46e8c44f98792A1dAf8d69154\",\n  SOhm: \"0xb7278A61aa25c888815aFC32Ad3cC52fF24fE575\",\n  WSTEth: \"0xCD8a1C3ba11CF5ECfa6267617243239504a98d90\",\n  SushiBar: \"0x82e01223d51Eb87e16A03E24687EDF0F294da6f1\",\n  UniswapV3: \"0x2bdCC0de6bE1f7D2ee689a0342D76F52E8EFABa3\",\n  BadgerSett: \"0x2bdCC0de6bE1f7D2ee689a0342D76F52E8EFABa3\"\n};\n\n// Supported Uniswap V2 protocols\nconst UNISWAP_V2_PROTOCOLS = {\n  \"Uniswap\": {\n    router: \"0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\",\n    factory: \"0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f\"\n  },\n  \"SushiSwap\": {\n    router: \"0xd9e1ce17f2641f24ae83637ab66a2cca9c378b9f\",\n    factory: \"0xc0aee478e3658e2610c5f7a4a2e1777ce9e4f2ac\"\n  }\n}\n\n// Liquidation strategy functions\nasync function getUniswapV2RouterByBestWethLiquidity(token) {\n  // Get best Uniswap market for this token\n  var bestUniswapV2RouterForToken, bestUniswapLiquidityForToken = Fuse.Web3.utils.toBN(0);\n  var uniswapV2FactoryAbi = [{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"getPair\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}];\n  var uniswapV2PairAbi = [{\"constant\":true,\"inputs\":[],\"name\":\"getReserves\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"_reserve0\",\"type\":\"uint112\"},{\"internalType\":\"uint112\",\"name\":\"_reserve1\",\"type\":\"uint112\"},{\"internalType\":\"uint32\",\"name\":\"_blockTimestampLast\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token0\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}];\n  for (const uniswapV2 of Object.values(UNISWAP_V2_PROTOCOLS)) {\n    var uniswapV2Factory = new fuse.web3.eth.Contract(uniswapV2FactoryAbi, uniswapV2.factory);\n    var uniswapV2Pair = await uniswapV2Factory.methods.getPair(token, Fuse.WETH_ADDRESS).call();\n    if (uniswapV2Pair == \"0x0000000000000000000000000000000000000000\") continue;\n    uniswapV2Pair = new fuse.web3.eth.Contract(uniswapV2PairAbi, uniswapV2Pair);\n    var reserves = await uniswapV2Pair.methods.getReserves().call();\n    var wethLiquidity = Fuse.Web3.utils.toBN(reserves[(await uniswapV2Pair.methods.token0().call()).toLowerCase() == Fuse.WETH_ADDRESS.toLowerCase() ? \"0\" : \"1\"])\n    if (wethLiquidity.gt(bestUniswapLiquidityForToken)) {\n      bestUniswapV2RouterForToken = uniswapV2.router;\n      bestUniswapLiquidityForToken = wethLiquidity;\n    }\n  }\n  return [bestUniswapV2RouterForToken, bestUniswapLiquidityForToken];\n}\n\nasync function getLiquidationStrategyData(token, strategy) {\n  if (strategy == \"CurveLiquidityGaugeV2\") {\n    // Get coins underlying LP token underling gauge\n    var gaugeAbi = [{\"name\":\"lp_token\",\"outputs\":[{\"type\":\"address\",\"name\":\"\"}],\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"gas\":1871}];\n    var gauge = new fuse.web3.eth.Contract(gaugeAbi, token);\n    token = await gauge.methods.lp_token().call();\n    strategy = \"CurveLpToken\";\n  }\n\n  if (strategy == \"CurveLpToken\") {\n    // Get Curve pool coins\n    var registryAbi = [{\"name\":\"get_coins\",\"outputs\":[{\"type\":\"address[8]\",\"name\":\"\"}],\"inputs\":[{\"type\":\"address\",\"name\":\"_pool\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"gas\":12285},{\"name\":\"get_pool_from_lp_token\",\"outputs\":[{\"type\":\"address\",\"name\":\"\"}],\"inputs\":[{\"type\":\"address\",\"name\":\"arg0\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"gas\":2446}];\n    var registry = new fuse.web3.eth.Contract(registryAbi, \"0x7D86446dDb609eD0F5f8684AcF30380a356b2B4c\");\n    var pool = await registry.methods.get_pool_from_lp_token(token).call();\n    var coins = await registry.methods.get_coins(pool).call();\n\n    // Get ideal output coin and Uniswap market by best swap liquidity\n    var bestCurveCoinIndex, bestUnderlying, bestUniswapV2Router, bestUniswapLiquidity = 0;\n\n    for (var i = 0; i < coins.length; i++) {\n      // Break if we have iterated through all coins\n      if (coins[i] == \"0x0000000000000000000000000000000000000000\") break;\n\n      // Break if coin is ETH or WETH\n      if (coins[i].toLowerCase() == \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\" || coins[i].toLowerCase() == Fuse.WETH_ADDRESS.toLowerCase()) {\n        bestUniswapV2Router = UNISWAP_V2_PROTOCOLS.Uniswap.router;\n        bestCurveCoinIndex = i;\n        bestUnderlying = coins[i];\n        break;\n      }\n\n      // Get best Uniswap market for this token\n      var [bestUniswapV2RouterForToken, bestUniswapLiquidityForToken] = await getUniswapV2RouterByBestWethLiquidity(coins[i]);\n\n      // If this token's best Uniswap liquidity is better than the rest, use it\n      if (bestUniswapLiquidityForToken > bestUniswapLiquidity) {\n        bestCurveCoinIndex = i;\n        bestUnderlying = coins[i];\n        bestUniswapV2Router = bestUniswapV2RouterForToken;\n        bestUniswapLiquidity = bestUniswapLiquidityForToken;\n      }\n    }\n\n    // Return strategy data and Uniswap V2 router\n    return [fuse.web3.eth.abi.encodeParameters(['uint8', 'address'], [bestCurveCoinIndex, bestUnderlying]), bestUniswapV2Router];\n  }\n\n  if (strategy == \"CurveSwap\") {\n    // Get Curve pool for token => WETH\n    var registryAbi = [{\"name\":\"find_pool_for_coins\",\"outputs\":[{\"type\":\"address\",\"name\":\"\"}],\"inputs\":[{\"type\":\"address\",\"name\":\"_from\"},{\"type\":\"address\",\"name\":\"_to\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"name\":\"get_coin_indices\",\"outputs\":[{\"type\":\"int128\",\"name\":\"\"},{\"type\":\"int128\",\"name\":\"\"},{\"type\":\"bool\",\"name\":\"\"}],\"inputs\":[{\"type\":\"address\",\"name\":\"_pool\"},{\"type\":\"address\",\"name\":\"_from\"},{\"type\":\"address\",\"name\":\"_to\"}],\"stateMutability\":\"view\",\"type\":\"function\",\"gas\":27456}];\n    var registry = new fuse.web3.eth.Contract(registryAbi, \"0x7D86446dDb609eD0F5f8684AcF30380a356b2B4c\");\n    var pool = await registry.methods.find_pool_for_coins(token, \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\").call();\n    var indices = await registry.methods.get_coin_indices(pool, token, \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\").call();\n\n    // Return strategy data and Uniswap V2 router\n    return [fuse.web3.eth.abi.encodeParameters(['address', 'int128', 'int128', 'address'], [pool, indices[\"0\"], indices[\"1\"], \"0x0000000000000000000000000000000000000000\"]), UNISWAP_V2_PROTOCOLS.Uniswap.router];\n  }\n}\n\n// Assets to be added to pool\nconst testAssetFixtures = [\n  { name: \"Fuse ETH\", symbol: \"f123-ETH\", underlying: \"0x0000000000000000000000000000000000000000\", price: Fuse.Web3.utils.toBN(1e18) },\n  { name: \"Fuse USDC\", symbol: \"f123-USDC\", underlying: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\", price: \"421407501053518000000000000\" },\n  { name: \"Fuse DAI\", symbol: \"f123-DAI\", underlying: \"0x6b175474e89094c44da98b954eedeac495271d0f\", price: \"421407501053518\" },\n  { name: \"Fuse linkCRV\", symbol: \"f123-linkCRV\", underlying: \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", price: \"14810827631962988\" },\n  { name: \"Fuse linkCRV-gauge\", symbol: \"f123-linkCRV-gauge\", underlying: \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", price: \"14810827631962988\" },\n  { name: \"Fuse yUSDC\", symbol: \"f123-yUSDC\", underlying: \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", price: \"461407501053518000000000000\" }, // yVault V1\n  { name: \"Fuse yvDAI\", symbol: \"f123-yvDAI\", underlying: \"0x19D3364A399d251E894aC732651be8B0E4e85001\", price: \"421407501053518\" }, // yVault V2\n  { name: \"Fuse Uniswap DAI-ETH\", symbol: \"f123u-DAI-ETH\", underlying: \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", price: \"42140750105351800\" },\n  { name: \"Fuse Balancer WETH-50-WBTC-50\", symbol: \"f123b-WETH-50-WBTC-50\", underlying: \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", price: \"100000000000000000000\" }, // BPT WETH-WBTC\n  { name: \"Fuse yvlinkCRV\", symbol: \"f123-yvlinkCRV\", underlying: \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", price: \"14810827631962988\" }, // crvLINK yVault V1\n  { name: \"Fuse yvCurve-sETH\", symbol: \"f123-yvCurve-sETH\", underlying: \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", price: \"1879096400000000000\" }, // eCRV yVault V2\n  { name: \"Fuse sEUR\", symbol: \"f123-sEUR\", underlying: \"0xd71ecff9342a5ced620049e616c5035f1db98620\", price: \"421407501053518\" },\n  { name: \"Fuse PcUSDC\", symbol: \"f123-PcUSDC\", underlying: \"0xd81b1a8b1ad00baa2d6609e0bae28a38713872f7\", price: \"421407501053518000000000000\" },\n  { name: \"Fuse stETH\", symbol: \"f123-stETH\", underlying: \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", price: \"1000000000000000000\" },\n  { name: \"Fuse sOHM\", symbol: \"f123-sOHM\", underlying: \"0x04f2694c8fcee23e8fd0dfea1d4f5bb8c352111f\", price: \"100000000000000000000000000\" },\n  { name: \"Fuse wstETH\", symbol: \"f123-wstETH\", underlying: \"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0\", price: \"920000000000000000\" },\n  { name: \"Fuse SOCKS\", symbol: \"f123-SOCKS\", underlying: \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", price: \"16000000000000000000\" },\n  { name: \"Fuse xSUSHI\", symbol: \"f123-xSUSHI\", underlying: \"0x8798249c2e607446efb7ad49ec89dd1865ff4272\", price: \"4500000000000000\" },\n  { name: \"Fuse bBADGER\", symbol: \"f123-bBADGER\", underlying: \"0x19d97d8fa813ee2f51ad4b4e04ea08baf4dffc28\", price: \"5000000000000000\" },\n  { name: \"Fuse bDIGG\", symbol: \"f123-bDIGG\", underlying: \"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\", price: \"2000000000000000000\" }\n];\n\ndescribe('FuseSafeLiquidator', function() {\n  this.timeout(30000);\n  var accounts, assetAddresses, comptroller, simplePriceOracle;\n\n  before(async function() {\n    this.timeout(60000);\n    accounts = [\"0x45D54B22582c79c8Fb8f4c4F2663ef54944f397a\", \"0x1Eeb75CFad36EDb6C996f7809f30952B0CA0B5B9\", \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\"];\n\n    // Impersonate accounts\n    if (process.env.HARDHAT_IMPERSONATE) for (const account of accounts) await impersonateAccount(account);\n\n    // Whitelist accounts[0] as deployer\n    await fuse.contracts.FusePoolDirectory.methods._whitelistDeployers([accounts[0]]).send({ from: \"0x10dB6Bce3F2AE1589ec91A872213DAE59697967a\" });\n\n    // Deploy FuseSafeLiquidator and liquidation strategies\n    if (process.env.HARDHAT_DEPLOY_FUSE_CONTRACTS) {\n      const fslFactory = await fuse.hre.ethers.getContractFactory(\"FuseSafeLiquidator\");\n      const fsl = await fslFactory.deploy();\n      fuse.contracts.FuseSafeLiquidator.options.address = fsl.address;\n\n      for (const strategy of Object.keys(LIQUIDATION_STRATEGIES)) {\n        const contractFactory = await fuse.hre.ethers.getContractFactory(strategy + \"Liquidator\");\n        const contract = await contractFactory.deploy();\n        LIQUIDATION_STRATEGIES[strategy] = contract.address;\n      }\n    }\n\n    // Send tokens to accounts[0]\n    // Block 12680852\n    var tokensNeeded = [\n      [\n        \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\",\n        \"0xee1f07f88934c2811e3dcabdf438d975c3d62cd3\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\",\n        \"0xd47ca06c4866318ff9680695e39aa3a5bd337fbd\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", \"0xe19b0990735b625920972b0743403fbaf08ef8b2\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e6))\n      ],\n      [\n        \"0x19D3364A399d251E894aC732651be8B0E4e85001\", \"0xe8e8f41ed29e46f34e206d7d2a7d6f735a3ff2cb\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", \"0x31d9377e7500ebc345b821a9740005e280c904fd\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", \"0x577ebc5de943e35cdf9ecb5bbe1f7d7cb6c7c647\",\n        Fuse.Web3.utils.toBN(100).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", \"0xd916127b40e3383fcc09ab8feaae0f2a6a1300c1\",\n        Fuse.Web3.utils.toBN(100).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", \"0x438fd34eab0e80814a231a983d8bfaf507ae16d4\",\n        Fuse.Web3.utils.toBN(10).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0xd71ecff9342a5ced620049e616c5035f1db98620\", \"0xe896e539e557bc751860a7763c8dd589af1698ce\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0xd81b1a8b1ad00baa2d6609e0bae28a38713872f7\", \"0xb0b0f6f13a5158eb67724282f586a552e75b5728\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e6))\n      ],\n      [\n        \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"0x62e41b1185023bcc14a465d350e1dde341557925\",\n        Fuse.Web3.utils.toBN(100).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0x04f2694c8fcee23e8fd0dfea1d4f5bb8c352111f\", \"0x1512c7c4a4266dc9a56b1f21c8cb19e13410e684\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e9))\n      ],\n      [\n        \"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0\", \"0xf9ce182b0fbe597773ab9bb5159b7479047de8fe\",\n        Fuse.Web3.utils.toBN(10).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", \"0xb9fddbd225b6c8cc24ce193e5fb95db76d783f2d\",\n        Fuse.Web3.utils.toBN(1).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0x8798249c2e607446efb7ad49ec89dd1865ff4272\", \"0xf977814e90da44bfa03b6295a0616a897441acec\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0x19d97d8fa813ee2f51ad4b4e04ea08baf4dffc28\", \"0x533e3c0e6b48010873b947bddc4721b1bdff9648\",\n        Fuse.Web3.utils.toBN(1000).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n      [\n        \"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\", \"0x533e3c0e6b48010873b947bddc4721b1bdff9648\",\n        Fuse.Web3.utils.toBN(10).mul(Fuse.Web3.utils.toBN(1e18))\n      ],\n    ];\n\n    for (const [tokenAddress, sender, amount] of tokensNeeded) {\n      if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(sender);\n      var token = new fuse.web3.eth.Contract(erc20Abi, tokenAddress);\n      if (Fuse.Web3.utils.toBN(await token.methods.balanceOf(accounts[0]).call()).lt(amount)) await token.methods.transfer(accounts[0], amount).send({ from: sender });\n    }\n\n    // Approve contract access to bDIGG and bBADGER\n    var badgerGovernance = \"0xb65cef03b9b89f99517643226d76e286ee999e77\";\n    if (process.env.HARDHAT_IMPERSONATE) await impersonateAccount(badgerGovernance);\n    var settAbi = [{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"approveContractAccess\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}];\n    var bBADGER = new fuse.web3.eth.Contract(settAbi, \"0x19d97d8fa813ee2f51ad4b4e04ea08baf4dffc28\");\n    await bBADGER.methods.approveContractAccess(fuse.contracts.FuseSafeLiquidator.options.address).send({ from: badgerGovernance });\n    var bDIGG = new fuse.web3.eth.Contract(settAbi, \"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\");\n    await bDIGG.methods.approveContractAccess(fuse.contracts.FuseSafeLiquidator.options.address).send({ from: badgerGovernance });\n\n    // Deploy pool\n    var [poolAddress, priceOracleAddress] = await deployPool({ priceOracle: \"SimplePriceOracle\" }, { from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    comptroller = new fuse.web3.eth.Contract(JSON.parse(fuse.compoundContracts[\"contracts/Comptroller.sol:Comptroller\"].abi), poolAddress);\n\n    // Set initial token prices\n    simplePriceOracle = new fuse.web3.eth.Contract(JSON.parse(fuse.compoundContracts[\"contracts/SimplePriceOracle.sol:SimplePriceOracle\"].abi), priceOracleAddress);\n    for (const conf of testAssetFixtures) await simplePriceOracle.methods.setDirectPrice(conf.underlying, conf.price).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 }); \n\n    // Deploy assets\n    assetAddresses = {};\n    for (const conf of testAssetFixtures) assetAddresses[conf.underlying.toLowerCase()] = await deployAsset({ comptroller: poolAddress, ...conf }, undefined, undefined, undefined, { from: accounts[0], gasPrice: \"0\", gas: 10e6 }, true);\n  });\n\n  async function setupUnhealthyEthBorrowWithTokenCollateral(tokenCollateral) {\n    // Default token collateral to DAI\n    if (tokenCollateral === undefined) tokenCollateral = \"0x6b175474e89094c44da98b954eedeac495271d0f\";\n    var originalPrice = testAssetFixtures.find(item => tokenCollateral.toLowerCase() === item.underlying.toLowerCase()).price;\n\n    // Supply token collateral\n    var token = new fuse.web3.eth.Contract(erc20Abi, tokenCollateral);\n    var cToken = new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[tokenCollateral.toLowerCase()]);\n    await token.methods.approve(cToken.options.address, Fuse.Web3.utils.toBN(2).pow(Fuse.Web3.utils.toBN(256)).subn(1)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    await cToken.methods.mint(Fuse.Web3.utils.toBN(3e14).mul(Fuse.Web3.utils.toBN(1e18)).div(Fuse.Web3.utils.toBN(originalPrice))).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n\n    // Supply 0.001 ETH from other account\n    var cToken = new fuse.web3.eth.Contract(cEtherAbi, assetAddresses[\"0x0000000000000000000000000000000000000000\"]);\n    await cToken.methods.mint().send({ from: accounts[1], gas: 5e6, gasPrice: \"0\", value: Fuse.Web3.utils.toBN(1e15) });\n\n    // Borrow 0.0001 ETH using token collateral\n    await comptroller.methods.enterMarkets([assetAddresses[tokenCollateral.toLowerCase()]]).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    await cToken.methods.borrow(Fuse.Web3.utils.toBN(1e14)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n\n    // Set price of token collateral to 1/10th of what it was\n    await simplePriceOracle.methods.setDirectPrice(tokenCollateral, Fuse.Web3.utils.toBN(originalPrice).divn(10)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n  }\n\n  async function setupUnhealthyTokenBorrowWithEthCollateral() {\n    // Supply ETH collateral\n    var cToken = new fuse.web3.eth.Contract(cEtherAbi, assetAddresses[\"0x0000000000000000000000000000000000000000\"]);\n    await cToken.methods.mint().send({ from: accounts[0], gasPrice: \"0\", gas: 10e6, value: Fuse.Web3.utils.toBN(1e14) });\n\n    // Supply DAI from other account\n    var token = new fuse.web3.eth.Contract(erc20Abi, \"0x6b175474e89094c44da98b954eedeac495271d0f\");\n    var cToken = new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[\"0x6b175474e89094c44da98b954eedeac495271d0f\"]);\n    await token.methods.approve(cToken.options.address, Fuse.Web3.utils.toBN(5e17)).send({ from: accounts[1], gas: 5e6, gasPrice: \"0\" });\n    await cToken.methods.mint(Fuse.Web3.utils.toBN(5e17)).send({ from: accounts[1], gas: 5e6, gasPrice: \"0\" });\n\n    // Borrow DAI using ETH as collateral\n    await comptroller.methods.enterMarkets([assetAddresses[\"0x0000000000000000000000000000000000000000\"]]).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    await cToken.methods.borrow(Fuse.Web3.utils.toBN(1e17)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n\n    // Set price of ETH collateral to 1/10th of what it was\n    await simplePriceOracle.methods.setDirectPrice(\"0x0000000000000000000000000000000000000000\", Fuse.Web3.utils.toBN(1e17)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n  }\n\n  async function setupUnhealthyTokenBorrowWithTokenCollateral(tokenCollateral) {\n    // Default token collateral to DAI\n    if (tokenCollateral === undefined) tokenCollateral = \"0x6b175474e89094c44da98b954eedeac495271d0f\";\n\n    // Get token collateral price\n    var originalPrice = testAssetFixtures.find(item => tokenCollateral.toLowerCase() === item.underlying.toLowerCase()).price;\n\n    // Supply token collateral\n    var token = new fuse.web3.eth.Contract(erc20Abi, tokenCollateral);\n    var cToken = new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[tokenCollateral.toLowerCase()]);\n    await token.methods.approve(cToken.options.address, Fuse.Web3.utils.toBN(2).pow(Fuse.Web3.utils.toBN(256)).subn(1)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    await cToken.methods.mint(Fuse.Web3.utils.toBN(1e14).mul(Fuse.Web3.utils.toBN(1e18)).div(Fuse.Web3.utils.toBN(originalPrice))).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n\n    // Supply USDC from other account\n    var token = new fuse.web3.eth.Contract(erc20Abi, \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\");\n    var cToken = new fuse.web3.eth.Contract(cErc20Abi, assetAddresses[\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"]);\n    await token.methods.approve(cToken.options.address, Fuse.Web3.utils.toBN(1e6)).send({ from: accounts[1], gas: 5e6, gasPrice: \"0\" });\n    await cToken.methods.mint(Fuse.Web3.utils.toBN(1e6)).send({ from: accounts[1], gas: 5e6, gasPrice: \"0\" });\n\n    // Borrow USDC using token collateral\n    await comptroller.methods.enterMarkets([assetAddresses[tokenCollateral.toLowerCase()]]).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    await cToken.methods.borrow(Fuse.Web3.utils.toBN(1e5)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n\n    // Set price of DAI collateral to 1/10th of what it was\n    await simplePriceOracle.methods.setDirectPrice(tokenCollateral, Fuse.Web3.utils.toBN(originalPrice).divn(10)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n  }\n\n  async function setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(exchangeTo, flashLoan, tokenCollateral, liquidationStrategy, strategyData, uniswapV2RouterForCollateral) {\n    // Default token collateral to DAI\n    if (tokenCollateral === undefined) tokenCollateral = \"0x6b175474e89094c44da98b954eedeac495271d0f\";\n\n    // Setup unhealthy ETH borrow with token collateral\n    await setupUnhealthyEthBorrowWithTokenCollateral(tokenCollateral);\n\n    // Defaults\n    if (exchangeTo === undefined || exchangeTo === null) exchangeTo = tokenCollateral;\n    if (liquidationStrategy === undefined) liquidationStrategy = [];\n    else if (typeof liquidationStrategy == \"string\") liquidationStrategy = [LIQUIDATION_STRATEGIES[liquidationStrategy]];\n    else for (var i = 0; i < liquidationStrategy.length; i++) liquidationStrategy[i] = LIQUIDATION_STRATEGIES[liquidationStrategy[i]];\n    if (strategyData === undefined || strategyData === \"0x0\") strategyData = Array(liquidationStrategy.length).fill(\"0x0\");\n    else if (typeof strategyData == \"string\") strategyData = [strategyData];\n    if (uniswapV2RouterForCollateral === undefined) uniswapV2RouterForCollateral = UNISWAP_V2_PROTOCOLS.Uniswap.router;\n\n    // Check balance before liquidation\n    const liquidatorBalanceBeforeLiquidation = exchangeTo === \"0x0000000000000000000000000000000000000000\" ? Fuse.Web3.utils.toBN(await fuse.web3.eth.getBalance(accounts[0])) : Fuse.Web3.utils.toBN(await (new fuse.web3.eth.Contract(erc20Abi, exchangeTo)).methods.balanceOf(accounts[0]).call());\n\n    // Liquidate borrow\n    var repayAmount = Fuse.Web3.utils.toBN(1e13);\n    await (flashLoan ? fuse.contracts.FuseSafeLiquidator.methods.safeLiquidateToEthWithFlashLoan(accounts[0], repayAmount, assetAddresses[\"0x0000000000000000000000000000000000000000\"], assetAddresses[tokenCollateral.toLowerCase()], 0, exchangeTo, uniswapV2RouterForCollateral, liquidationStrategy, strategyData, 0).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 }) : fuse.contracts.FuseSafeLiquidator.methods.safeLiquidate(accounts[0], assetAddresses[\"0x0000000000000000000000000000000000000000\"], assetAddresses[tokenCollateral.toLowerCase()], 0, exchangeTo, uniswapV2RouterForCollateral, liquidationStrategy, strategyData).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6, value: repayAmount }));\n\n    // Assert balance after liquidation > balance before liquidation\n    const liquidatorBalanceAfterLiquidation = exchangeTo === \"0x0000000000000000000000000000000000000000\" ? Fuse.Web3.utils.toBN(await fuse.web3.eth.getBalance(accounts[0])) : Fuse.Web3.utils.toBN(await (new fuse.web3.eth.Contract(erc20Abi, exchangeTo)).methods.balanceOf(accounts[0]).call());\n    assert(!flashLoan && exchangeTo === \"0x0000000000000000000000000000000000000000\" ? liquidatorBalanceAfterLiquidation.gt(liquidatorBalanceBeforeLiquidation.sub(repayAmount)) : liquidatorBalanceAfterLiquidation.gt(liquidatorBalanceBeforeLiquidation)); // Factor in repaid ETH if not supplying own capital\n  }\n\n  async function setupAndLiquidateUnhealthyTokenBorrowWithEthCollateral(exchangeTo, flashLoan) {\n    // Setup unhealthy token borrow with ETH collateral\n    await setupUnhealthyTokenBorrowWithEthCollateral();\n\n    // Default profit target\n    if (exchangeTo === undefined || exchangeTo === null) exchangeTo = \"0x0000000000000000000000000000000000000000\";\n\n    // Check balance before liquidation\n    const liquidatorBalanceBeforeLiquidation = exchangeTo === \"0x0000000000000000000000000000000000000000\" ? Fuse.Web3.utils.toBN(await fuse.web3.eth.getBalance(accounts[0])) : Fuse.Web3.utils.toBN(await (new fuse.web3.eth.Contract(erc20Abi, exchangeTo)).methods.balanceOf(accounts[0]).call());\n\n    // Liquidate borrow\n    if (flashLoan) await fuse.contracts.FuseSafeLiquidator.methods.safeLiquidateToTokensWithFlashLoan(accounts[0], Fuse.Web3.utils.toBN(1e16), assetAddresses[\"0x6b175474e89094c44da98b954eedeac495271d0f\"], assetAddresses[\"0x0000000000000000000000000000000000000000\"], 0, exchangeTo, UNISWAP_V2_PROTOCOLS.Uniswap.router, UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x0000000000000000000000000000000000000000\"], [\"0x0\"], 0).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    else {\n      var token = new fuse.web3.eth.Contract(erc20Abi, \"0x6b175474e89094c44da98b954eedeac495271d0f\");\n      await token.methods.approve(fuse.contracts.FuseSafeLiquidator.options.address, Fuse.Web3.utils.toBN(1e16)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n      await fuse.contracts.FuseSafeLiquidator.methods.safeLiquidate(accounts[0], Fuse.Web3.utils.toBN(1e16), assetAddresses[\"0x6b175474e89094c44da98b954eedeac495271d0f\"], assetAddresses[\"0x0000000000000000000000000000000000000000\"], 0, exchangeTo, UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x0000000000000000000000000000000000000000\"], [\"0x0\"]).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    }\n\n    // Assert balance after liquidation > balance before liquidation\n    const liquidatorBalanceAfterLiquidation = exchangeTo === \"0x0000000000000000000000000000000000000000\" ? Fuse.Web3.utils.toBN(await fuse.web3.eth.getBalance(accounts[0])) : Fuse.Web3.utils.toBN(await (new fuse.web3.eth.Contract(erc20Abi, exchangeTo)).methods.balanceOf(accounts[0]).call());\n    assert(liquidatorBalanceAfterLiquidation.gt(liquidatorBalanceBeforeLiquidation));\n  }\n\n  async function setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(exchangeTo, flashLoan, tokenCollateral, liquidationStrategy, strategyData, uniswapV2RouterForCollateral) {\n    // Default token collateral to DAI\n    if (tokenCollateral === undefined) tokenCollateral = \"0x6b175474e89094c44da98b954eedeac495271d0f\";\n\n    // Setup unhealthy ETH borrow with token collateral\n    await setupUnhealthyTokenBorrowWithTokenCollateral(tokenCollateral);\n\n    // Defaults\n    if (exchangeTo === undefined || exchangeTo === null) exchangeTo = tokenCollateral;\n    if (liquidationStrategy === undefined) liquidationStrategy = [];\n    else if (typeof liquidationStrategy == \"string\") liquidationStrategy = [LIQUIDATION_STRATEGIES[liquidationStrategy]];\n    else for (var i = 0; i < liquidationStrategy.length; i++) liquidationStrategy[i] = LIQUIDATION_STRATEGIES[liquidationStrategy[i]];\n    if (strategyData === undefined || strategyData === \"0x0\") strategyData = Array(liquidationStrategy.length).fill(\"0x0\");\n    else if (typeof strategyData == \"string\") strategyData = [strategyData];\n    if (uniswapV2RouterForCollateral === undefined) uniswapV2RouterForCollateral = UNISWAP_V2_PROTOCOLS.Uniswap.router;\n\n    // Check balance before liquidation\n    const liquidatorBalanceBeforeLiquidation = exchangeTo === \"0x0000000000000000000000000000000000000000\" ? Fuse.Web3.utils.toBN(await fuse.web3.eth.getBalance(accounts[0])) : Fuse.Web3.utils.toBN(await (new fuse.web3.eth.Contract(erc20Abi, exchangeTo)).methods.balanceOf(accounts[0]).call());\n\n    // Liquidate borrow\n    if (flashLoan) await fuse.contracts.FuseSafeLiquidator.methods.safeLiquidateToTokensWithFlashLoan(accounts[0], Fuse.Web3.utils.toBN(1e4), assetAddresses[\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"], assetAddresses[tokenCollateral.toLowerCase()], 0, exchangeTo, UNISWAP_V2_PROTOCOLS.Uniswap.router, uniswapV2RouterForCollateral, liquidationStrategy, strategyData, 0).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    else {\n      var token = new fuse.web3.eth.Contract(erc20Abi, \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\");\n      await token.methods.approve(fuse.contracts.FuseSafeLiquidator.options.address, Fuse.Web3.utils.toBN(1e4)).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n      await fuse.contracts.FuseSafeLiquidator.methods.safeLiquidate(accounts[0], Fuse.Web3.utils.toBN(1e4), assetAddresses[\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\"], assetAddresses[tokenCollateral.toLowerCase()], 0, exchangeTo, uniswapV2RouterForCollateral, liquidationStrategy, strategyData).send({ from: accounts[0], gasPrice: \"0\", gas: 10e6 });\n    }\n\n    // Assert balance after liquidation > balance before liquidation\n    const liquidatorBalanceAfterLiquidation = exchangeTo === \"0x0000000000000000000000000000000000000000\" ? Fuse.Web3.utils.toBN(await fuse.web3.eth.getBalance(accounts[0])) : Fuse.Web3.utils.toBN(await (new fuse.web3.eth.Contract(erc20Abi, exchangeTo)).methods.balanceOf(accounts[0]).call());\n    assert(liquidatorBalanceAfterLiquidation.gt(liquidatorBalanceBeforeLiquidation));\n  }\n\n  describe('#safeLiquidate()', function() {\n    // Safe liquidate ETH borrow\n    it('should liquidate an ETH borrow for token collateral', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral() }));\n    \n    // Safe liquidate token borrows\n    it('should liquidate a token borrow for ETH collateral', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithEthCollateral() }));\n    it('should liquidate a token borrow for token collateral', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral() }));\n    \n    // Safe liquidate ETH borrow + exchange seized collateral\n    it('should liquidate an ETH borrow for token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\") }));\n    it('should liquidate an ETH borrow for token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\") }));\n\n    // Safe liquidate token borrow + exchange seized collateral\n    it('should liquidate a token borrow for ETH collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithEthCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\") }));\n    it('should liquidate a token borrow for token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\") }));\n    it('should liquidate a token borrow for token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\") }));\n\n    // Safe liquidate ETH borrow using Curve LP token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow for Curve LP token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\", ...await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\")) }));\n    it('should liquidate an ETH borrow for Curve LP token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", false, \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\", ...await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\")) }));\n\n    // Safe liquidate token borrow using Curve LP token collateral + exchange seized collateral\n    it('should liquidate a token borrow for Curve LP token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\", ...await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\")) }));\n    it('should liquidate a token borrow for Curve LP token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", false, \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\", ...await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\")) }));\n\n    // Safe liquidate ETH borrow using Curve LiquidityGaugeV2 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow for Curve LiquidityGaugeV2 token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\", ...await getLiquidationStrategyData(\"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\")) }));\n    it('should liquidate an ETH borrow for Curve LiquidityGaugeV2 token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", false, \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\", ...await getLiquidationStrategyData(\"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\")) }));\n    \n    // Safe liquidate token borrow using Curve LiquidityGaugeV2 token collateral + exchange seized collateral\n    it('should liquidate a token borrow for Curve LiquidityGaugeV2 token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\", ...await getLiquidationStrategyData(\"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\")) }));\n    it('should liquidate a token borrow for Curve LiquidityGaugeV2 token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", false, \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\", ...await getLiquidationStrategyData(\"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\")) }));\n\n    // Safe liquidate ETH borrow using yVault V1 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow for yVault V1 collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", \"YearnYVaultV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow for yVault V1 collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", false, \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", \"YearnYVaultV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow using yVault V1 token collateral + exchange seized collateral\n    it('should liquidate a token borrow for yVault V1 collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", \"YearnYVaultV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow for yVault V1 collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", false, \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", \"YearnYVaultV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow using yVault V2 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow for yVault V2 collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x19D3364A399d251E894aC732651be8B0E4e85001\", \"YearnYVaultV2\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow for yVault V2 collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0x19D3364A399d251E894aC732651be8B0E4e85001\", \"YearnYVaultV2\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow using yVault V2 token collateral + exchange seized collateral\n    it('should liquidate a token borrow for yVault V2 collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x19D3364A399d251E894aC732651be8B0E4e85001\", \"YearnYVaultV2\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow for yVault V2 collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0x19D3364A399d251E894aC732651be8B0E4e85001\", \"YearnYVaultV2\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow using Curve yVault V1 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow for Curve yVault V1 collateral and exchange to ETH', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\"); // Underlying linkCRV token\n      await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", [\"YearnYVaultV1\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n    it('should liquidate an ETH borrow for Curve yVault V1 collateral and exchange to another token', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\"); // Underlying linkCRV token\n      await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", [\"YearnYVaultV1\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n\n    // Safe liquidate token borrow using Curve yVault V1 token collateral + exchange seized collateral\n    it('should liquidate a token borrow for Curve yVault V1 collateral and exchange to ETH', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\"); // Underlying linkCRV token\n      await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", [\"YearnYVaultV1\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n    it('should liquidate a token borrow for Curve yVault V1 collateral and exchange to another token', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\"); // Underlying linkCRV token\n      await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", [\"YearnYVaultV1\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n\n    // Safe liquidate ETH borrow using Curve yVault V2 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow for Curve yVault V2 collateral and exchange to ETH', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c\", \"CurveLpToken\"); // Underlying eCRV token\n      await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", [\"YearnYVaultV2\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n    it('should liquidate an ETH borrow for Curve yVault V2 collateral and exchange to another token', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c\", \"CurveLpToken\"); // Underlying eCRV token\n      await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", [\"YearnYVaultV2\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n\n    // Safe liquidate token borrow using Curve yVault V2 token collateral + exchange seized collateral\n    it('should liquidate a token borrow for Curve yVault V2 collateral and exchange to ETH', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c\", \"CurveLpToken\"); // Underlying eCRV token\n      await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", [\"YearnYVaultV2\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n    it('should liquidate a token borrow for Curve yVault V2 collateral and exchange to another token', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c\", \"CurveLpToken\"); // Underlying eCRV token\n      await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", [\"YearnYVaultV2\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n\n    // Safe liquidate ETH borrow using Uniswap LP token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow for Uniswap LP token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", \"UniswapLpToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[]', 'address[]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"], []]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow for Uniswap LP token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", \"UniswapLpToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[]', 'address[]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"], []]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow using Uniswap LP token collateral + exchange seized collateral\n    it('should liquidate a token borrow for Uniswap LP token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", \"UniswapLpToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[]', 'address[]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"], []]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow for Uniswap LP token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", \"UniswapLpToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[]', 'address[]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"], []]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow using Balancer Pool Token (BPT) collateral + exchange seized collateral\n    it('should liquidate an ETH borrow for Balancer Pool Token (BPT) collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", \"BalancerPoolToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[][]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [[], [\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"]]]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow for Balancer Pool Token (BPT) collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", \"BalancerPoolToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[][]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [[], [\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"]]]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow using Balancer Pool Token (BPT) collateral + exchange seized collateral\n    it('should liquidate a token borrow for Balancer Pool Token (BPT) collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", false, \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", \"BalancerPoolToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[][]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [[], [\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"]]]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow for Balancer Pool Token (BPT) collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", false, \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", \"BalancerPoolToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[][]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [[], [\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"]]]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n  });\n\n  describe('#safeLiquidateToEthWithFlashLoan()', function() {\n    // Safe liquidate ETH borrow with flashloan\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(undefined, true) }));\n    \n    // Safe liquidate ETH borrow with flashloan + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true) }));\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true) }));\n    \n    // Safe liquidate ETH borrow with flashloan + exchange seized collateral (using SushiSwap for exchanging collateral)\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral and exchange to ETH (using SushiSwap for exchanging collateral)', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x6b175474e89094c44da98b954eedeac495271d0f\", undefined, undefined, UNISWAP_V2_PROTOCOLS.SushiSwap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral and exchange to another token (using SushiSwap for exchanging collateral)', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x6b175474e89094c44da98b954eedeac495271d0f\", undefined, undefined, UNISWAP_V2_PROTOCOLS.SushiSwap.router) }));\n\n    // Safe liquidate ETH borrow with flashloan using Curve LP token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for Curve LP collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\", ...await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\")) }));\n    it('should liquidate an ETH borrow (using a flash swap) for Curve LP collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", true, \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\", ...await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\")) }));\n\n    // Safe liquidate ETH borrow with flashloan using Curve LiquidityGaugeV2 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for Curve LiquidityGaugeV2 token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\", ...await getLiquidationStrategyData(\"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\")) }));\n    it('should liquidate an ETH borrow (using a flash swap) for Curve LiquidityGaugeV2 token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", true, \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\", ...await getLiquidationStrategyData(\"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\")) }));\n\n    // Safe liquidate ETH borrow with flashloan using yVault V1 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for yVault V1 collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", \"YearnYVaultV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for yVault V1 collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", true, \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", \"YearnYVaultV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow with flashloan using yVault V2 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for yVault V2 collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x19D3364A399d251E894aC732651be8B0E4e85001\", \"YearnYVaultV2\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for yVault V2 collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x19D3364A399d251E894aC732651be8B0E4e85001\", \"YearnYVaultV2\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow with flashloan using Curve yVault V1 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for Curve yVault V1 collateral and exchange to ETH', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\"); // Underlying linkCRV token\n      await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", [\"YearnYVaultV1\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n    it('should liquidate an ETH borrow (using a flash swap) for Curve yVault V1 collateral and exchange to another token', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\"); // Underlying linkCRV token\n      await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", [\"YearnYVaultV1\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n\n    // Safe liquidate ETH borrow with flashloan using Curve yVault V2 token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for Curve yVault V2 collateral and exchange to ETH', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c\", \"CurveLpToken\"); // Underlying eCRV token\n      await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", [\"YearnYVaultV2\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n    it('should liquidate an ETH borrow (using a flash swap) for Curve yVault V2 collateral and exchange to another token', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c\", \"CurveLpToken\"); // Underlying eCRV token\n      await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", [\"YearnYVaultV2\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n\n    // Safe liquidate ETH borrow with flashloan using Uniswap LP token collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for Uniswap LP token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", \"UniswapLpToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[]', 'address[]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"], []]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for Uniswap LP token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", \"UniswapLpToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[]', 'address[]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"], []]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow with flashloan using Balancer Pool Token (BPT) collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for Balancer Pool Token (BPT) collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", \"BalancerPoolToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[][]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [[], [\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"]]]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for Balancer Pool Token (BPT) collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", \"BalancerPoolToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[][]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [[], [\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"]]]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow with flashloan using Synthetix sEUR collateral + exchange seized collateral\n    // TODO: Doesn't work because of fee reclamation right now but may work in the future due to SIP-120: https://github.com/Synthetixio/SIPs/blob/master/sips/sip-120.md\n    /* it('should liquidate an ETH borrow (using a flash swap) for Synthetix sEUR collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xd71ecff9342a5ced620049e616c5035f1db98620\", \"SynthetixSynth\", fuse.web3.eth.abi.encodeParameters([\"address\"], [\"0x5e74c9036fb86bd7ecdcb084a0673efc32ea31cb\"]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for Synthetix sEUR collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0xd71ecff9342a5ced620049e616c5035f1db98620\", \"SynthetixSynth\", fuse.web3.eth.abi.encodeParameters([\"address\"], [\"0x5e74c9036fb86bd7ecdcb084a0673efc32ea31cb\"]), UNISWAP_V2_PROTOCOLS.Uniswap.router) })); */\n\n    // Safe liquidate ETH borrow with flashloan using PoolTogether PcUSDC collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for PoolTogether PcUSDC collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xd81b1a8b1ad00baa2d6609e0bae28a38713872f7\", \"PoolTogether\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for PoolTogether PcUSDC collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0xd81b1a8b1ad00baa2d6609e0bae28a38713872f7\", \"PoolTogether\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow with flashloan using token collateral (via 0x) + exchange seized collateral\n    // TODO: Going to have to calculate the input amount (i.e. collateral seized)\n    /* function get0xQuote(sellToken) {\n      var decoded = (await axios.get('https://api.0x.org/swap/v1/quote?sellToken=' + sellToken + '&buyToken=WETH&sellAmount=1000000000000000000', {\n        params: {\n          vs_currencies: \"eth\",\n          sellAmount: tokenAddress\n        }\n      })).data;\n      if (!decoded || !decoded[tokenAddress]) throw \"Failed to decode price of \" + tokenAddress + \" from CoinGecko\";\n      return [res.to, res.data];\n    }\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral (via 0x) and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"ZeroEx\", fuse.web3.eth.abi.encodeParameters([\"address\"], [Fuse.WETH_ADDRESS]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral (via 0x) and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"ZeroEx\", fuse.web3.eth.abi.encodeParameters([\"address\"], [Fuse.WETH_ADDRESS]), UNISWAP_V2_PROTOCOLS.Uniswap.router) })); */\n\n    // Safe liquidate ETH borrow with flashloan using token collateral (via Curve) + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral (via Curve) and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\", ...await getLiquidationStrategyData(\"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\")) }));\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral (via Curve) and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\", ...await getLiquidationStrategyData(\"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\")) }));\n\n    // Safe liquidate ETH borrow with flashloan using sOHM collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for sOHM collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x04f2694c8fcee23e8fd0dfea1d4f5bb8c352111f\", [\"SOhm\", \"UniswapV2\"], [\"0x0\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address[]\"], [UNISWAP_V2_PROTOCOLS.SushiSwap.router, [\"0x383518188c0c6d7730d91b2c03a03c837814a899\", \"0x6b175474e89094c44da98b954eedeac495271d0f\"]])], UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for sOHM collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x04f2694c8fcee23e8fd0dfea1d4f5bb8c352111f\", [\"SOhm\", \"UniswapV2\"], [\"0x0\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address[]\"], [UNISWAP_V2_PROTOCOLS.SushiSwap.router, [\"0x383518188c0c6d7730d91b2c03a03c837814a899\", \"0x6b175474e89094c44da98b954eedeac495271d0f\"]])], UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow with flashloan using wstETH collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for wstETH collateral and exchange to ETH', dryRun(async () => { var [strategyData, bestUniswapV2Router] = await getLiquidationStrategyData(\"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\"); await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0\", [\"WSTEth\", \"CurveSwap\"], [\"0x0\", strategyData], bestUniswapV2Router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for wstETH collateral and exchange to another token', dryRun(async () => { var [strategyData, bestUniswapV2Router] = await getLiquidationStrategyData(\"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\"); await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0\", [\"WSTEth\", \"CurveSwap\"], [\"0x0\", strategyData], bestUniswapV2Router) }));\n\n    // Safe liquidate ETH borrow with flashloan using token collateral (via Uniswap V1 liquidator) + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral (via Uniswap V1 liquidator) and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", \"UniswapV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) })); // SOCKS as an example\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral (via Uniswap V1 liquidator) and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", \"UniswapV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) })); // SOCKS as an example\n\n    // Safe liquidate ETH borrow with flashloan using xSUSHI collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for xSUSHI collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x8798249c2e607446efb7ad49ec89dd1865ff4272\", \"SushiBar\", undefined, UNISWAP_V2_PROTOCOLS.SushiSwap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for xSUSHI collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x8798249c2e607446efb7ad49ec89dd1865ff4272\", \"SushiBar\", undefined, UNISWAP_V2_PROTOCOLS.SushiSwap.router) }));\n\n    // Safe liquidate ETH borrow with flashloan using token collateral (via Uniswap V3 liquidator) + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral (via Uniswap V3 liquidator) and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", \"UniswapV3\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address\", \"uint24\"], [\"0xe592427a0aece92de3edee1f18e0157c05861564\", Fuse.WETH_ADDRESS, 10000]), UNISWAP_V2_PROTOCOLS.Uniswap.router) })); // SOCKS as an example\n    it('should liquidate an ETH borrow (using a flash swap) for token collateral (via Uniswap V3 liquidator) and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", \"UniswapV3\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address\", \"uint24\"], [\"0xe592427a0aece92de3edee1f18e0157c05861564\", Fuse.WETH_ADDRESS, 10000]), UNISWAP_V2_PROTOCOLS.Uniswap.router) })); // SOCKS as an example\n\n    // Safe liquidate ETH borrow with flashloan using bBADGER collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for bBADGER collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x19d97d8fa813ee2f51ad4b4e04ea08baf4dffc28\", \"BadgerSett\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for bBADGER collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x19d97d8fa813ee2f51ad4b4e04ea08baf4dffc28\", \"BadgerSett\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate ETH borrow with flashloan using bDIGG collateral + exchange seized collateral\n    it('should liquidate an ETH borrow (using a flash swap) for bDIGG collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\", [\"BadgerSett\", \"UniswapV2\"], [\"0x0\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address[]\"], [UNISWAP_V2_PROTOCOLS.SushiSwap.router, [\"0x798D1bE841a82a273720CE31c822C61a67a601C3\", \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\"]])], UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate an ETH borrow (using a flash swap) for bDIGG collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyEthBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\", [\"BadgerSett\", \"UniswapV2\"], [\"0x0\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address[]\"], [UNISWAP_V2_PROTOCOLS.SushiSwap.router, [\"0x798D1bE841a82a273720CE31c822C61a67a601C3\", \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\"]])], UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n  });\n\n  describe('#safeLiquidateToTokensWithFlashLoan()', function() {\n    // Safe liquidate token borrow with flashloan\n    it('should liquidate a token borrow (using a flash swap) for ETH collateral', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithEthCollateral(undefined, true) }));\n    it('should liquidate a token borrow (using a flash swap) for token collateral', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(undefined, true) }));\n    \n    // Safe liquidate token borrow with flashloan + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for ETH collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithEthCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true) }));\n    it('should liquidate a token borrow (using a flash swap) for token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true) }));\n    it('should liquidate a token borrow (using a flash swap) for token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true) }));\n    \n    // Safe liquidate token borrow with flashloan + exchange seized collateral (using SushiSwap for exchanging collateral)\n    it('should liquidate a token borrow (using a flash swap) for token collateral and exchange to ETH (using SushiSwap for exchanging collateral)', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x6b175474e89094c44da98b954eedeac495271d0f\", undefined, undefined, UNISWAP_V2_PROTOCOLS.SushiSwap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for token collateral and exchange to another token (using SushiSwap for exchanging collateral)', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x6b175474e89094c44da98b954eedeac495271d0f\", undefined, undefined, UNISWAP_V2_PROTOCOLS.SushiSwap.router) }));\n\n    // Safe liquidate token borrow with flashloan using Curve LP token collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for Curve LP collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\", ...await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\")) }));\n    it('should liquidate a token borrow (using a flash swap) for Curve LP collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", true, \"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\", ...await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\")) }));\n\n    // Safe liquidate token borrow with flashloan using Curve LiquidityGaugeV2 token collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for Curve LiquidityGaugeV2 token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\", ...await getLiquidationStrategyData(\"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\")) }));\n    it('should liquidate a token borrow (using a flash swap) for Curve LiquidityGaugeV2 token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", true, \"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\", ...await getLiquidationStrategyData(\"0xfd4d8a17df4c27c1dd245d153ccf4499e806c87d\", \"CurveLiquidityGaugeV2\")) }));\n\n    // Safe liquidate token borrow with flashloan using yVault V1 token collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for yVault V1 collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", \"YearnYVaultV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for yVault V1 collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x6b175474e89094c44da98b954eedeac495271d0f\", true, \"0x597aD1e0c13Bfe8025993D9e79C69E1c0233522e\", \"YearnYVaultV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow with flashloan using yVault V2 token collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for yVault V2 collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x19D3364A399d251E894aC732651be8B0E4e85001\", \"YearnYVaultV2\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for yVault V2 collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x19D3364A399d251E894aC732651be8B0E4e85001\", \"YearnYVaultV2\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow with flashloan using Curve yVault V1 token collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for Curve yVault V1 collateral and exchange to ETH', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\"); // Underlying linkCRV token\n      await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", [\"YearnYVaultV1\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n    it('should liquidate a token borrow (using a flash swap) for Curve yVault V1 collateral and exchange to another token', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xcee60cfa923170e4f8204ae08b4fa6a3f5656f3a\", \"CurveLpToken\"); // Underlying linkCRV token\n      await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x96Ea6AF74Af09522fCB4c28C269C26F59a31ced6\", [\"YearnYVaultV1\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n\n    // Safe liquidate token borrow with flashloan using Curve yVault V2 token collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for Curve yVault V2 collateral and exchange to ETH', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c\", \"CurveLpToken\"); // Underlying eCRV token\n      await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", [\"YearnYVaultV2\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n    it('should liquidate a token borrow (using a flash swap) for Curve yVault V2 collateral and exchange to another token', dryRun(async () => {\n      var [curveLpTokenStrategyData, uniswapV2Router] = await getLiquidationStrategyData(\"0xa3d87fffce63b53e0d54faa1cc983b7eb0b74a9c\", \"CurveLpToken\"); // Underlying eCRV token\n      await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x986b4AFF588a109c09B50A03f42E4110E29D353F\", [\"YearnYVaultV2\", \"CurveLpToken\"], [\"0x0\", curveLpTokenStrategyData], uniswapV2Router);\n    }));\n\n    // Safe liquidate token borrow with flashloan using Uniswap LP token collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for Uniswap LP token collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", \"UniswapLpToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[]', 'address[]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"], []]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for Uniswap LP token collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0xa478c2975ab1ea89e8196811f51a7b7ade33eb11\", \"UniswapLpToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[]', 'address[]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [\"0x6b175474e89094c44da98b954eedeac495271d0f\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"], []]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow with flashloan using Balancer Pool Token (BPT) collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for Balancer Pool Token (BPT) collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", \"BalancerPoolToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[][]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [[], [\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"]]]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for Balancer Pool Token (BPT) collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x1eff8af5d577060ba4ac8a29a13525bb0ee2a3d5\", \"BalancerPoolToken\", fuse.web3.eth.abi.encodeParameters(['address', 'address[][]'], [UNISWAP_V2_PROTOCOLS.Uniswap.router, [[], [\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\", \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\"]]]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow with flashloan using Synthetix sEUR collateral + exchange seized collateral\n    // TODO: Doesn't work because of fee reclamation right now but may work in the future due to SIP-120: https://github.com/Synthetixio/SIPs/blob/master/sips/sip-120.md\n    /* it('should liquidate a token borrow (using a flash swap) for Synthetix sEUR collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xd71ecff9342a5ced620049e616c5035f1db98620\", \"SynthetixSynth\", fuse.web3.eth.abi.encodeParameters([\"address\"], [\"0x5e74c9036fb86bd7ecdcb084a0673efc32ea31cb\"]), UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for Synthetix sEUR collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0xd71ecff9342a5ced620049e616c5035f1db98620\", \"SynthetixSynth\", fuse.web3.eth.abi.encodeParameters([\"address\"], [\"0x5e74c9036fb86bd7ecdcb084a0673efc32ea31cb\"]), UNISWAP_V2_PROTOCOLS.Uniswap.router) })); */\n\n    // Safe liquidate token borrow with flashloan using PoolTogether PcUSDC collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for PoolTogether PcUSDC collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xd81b1a8b1ad00baa2d6609e0bae28a38713872f7\", \"PoolTogether\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for PoolTogether PcUSDC collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0xd81b1a8b1ad00baa2d6609e0bae28a38713872f7\", \"PoolTogether\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow with flashloan using token collateral (via Curve) + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for token collateral (via Curve) and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\", ...await getLiquidationStrategyData(\"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\")) }));\n    it('should liquidate a token borrow (using a flash swap) for token collateral (via Curve) and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\", ...await getLiquidationStrategyData(\"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\")) }));\n\n    // Safe liquidate token borrow with flashloan using sOHM collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for sOHM collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x04f2694c8fcee23e8fd0dfea1d4f5bb8c352111f\", [\"SOhm\", \"UniswapV2\"], [\"0x0\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address[]\"], [UNISWAP_V2_PROTOCOLS.SushiSwap.router, [\"0x383518188c0c6d7730d91b2c03a03c837814a899\", \"0x6b175474e89094c44da98b954eedeac495271d0f\"]])], UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for sOHM collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x04f2694c8fcee23e8fd0dfea1d4f5bb8c352111f\", [\"SOhm\", \"UniswapV2\"], [\"0x0\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address[]\"], [UNISWAP_V2_PROTOCOLS.SushiSwap.router, [\"0x383518188c0c6d7730d91b2c03a03c837814a899\", \"0x6b175474e89094c44da98b954eedeac495271d0f\"]])], UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow with flashloan using wstETH collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for wstETH collateral and exchange to ETH', dryRun(async () => { var [strategyData, bestUniswapV2Router] = await getLiquidationStrategyData(\"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\"); await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0\", [\"WSTEth\", \"CurveSwap\"], [\"0x0\", strategyData], bestUniswapV2Router) }));\n    it('should liquidate a token borrow (using a flash swap) for wstETH collateral and exchange to another token', dryRun(async () => { var [strategyData, bestUniswapV2Router] = await getLiquidationStrategyData(\"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\", \"CurveSwap\"); await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0\", [\"WSTEth\", \"CurveSwap\"], [\"0x0\", strategyData], bestUniswapV2Router) }));\n\n    // Safe liquidate token borrow with flashloan using token collateral (via Uniswap V1 liquidator) + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for token collateral (via Uniswap V1 liquidator) and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", \"UniswapV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) })); // SOCKS as an example\n    it('should liquidate a token borrow (using a flash swap) for token collateral (via Uniswap V1 liquidator) and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", \"UniswapV1\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) })); // SOCKS as an example\n\n    // Safe liquidate token borrow with flashloan using xSUSHI collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for xSUSHI collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x8798249c2e607446efb7ad49ec89dd1865ff4272\", \"SushiBar\", undefined, UNISWAP_V2_PROTOCOLS.SushiSwap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for xSUSHI collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x8798249c2e607446efb7ad49ec89dd1865ff4272\", \"SushiBar\", undefined, UNISWAP_V2_PROTOCOLS.SushiSwap.router) }));\n\n    // Safe liquidate token borrow with flashloan using token collateral (via Uniswap V3 liquidator) + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for token collateral (via Uniswap V3 liquidator) and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", \"UniswapV3\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address\", \"uint24\"], [\"0xe592427a0aece92de3edee1f18e0157c05861564\", Fuse.WETH_ADDRESS, 10000]), UNISWAP_V2_PROTOCOLS.Uniswap.router) })); // SOCKS as an example\n    it('should liquidate a token borrow (using a flash swap) for token collateral (via Uniswap V3 liquidator) and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\", \"UniswapV3\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address\", \"uint24\"], [\"0xe592427a0aece92de3edee1f18e0157c05861564\", Fuse.WETH_ADDRESS, 10000]), UNISWAP_V2_PROTOCOLS.Uniswap.router) })); // SOCKS as an example\n\n    // Safe liquidate token borrow with flashloan using bBADGER collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for bBADGER collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x19d97d8fa813ee2f51ad4b4e04ea08baf4dffc28\", \"BadgerSett\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for bBADGER collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x19d97d8fa813ee2f51ad4b4e04ea08baf4dffc28\", \"BadgerSett\", undefined, UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n\n    // Safe liquidate token borrow with flashloan using bDIGG collateral + exchange seized collateral\n    it('should liquidate a token borrow (using a flash swap) for bDIGG collateral and exchange to ETH', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0x0000000000000000000000000000000000000000\", true, \"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\", [\"BadgerSett\", \"UniswapV2\"], [\"0x0\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address[]\"], [UNISWAP_V2_PROTOCOLS.SushiSwap.router, [\"0x798D1bE841a82a273720CE31c822C61a67a601C3\", \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\"]])], UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n    it('should liquidate a token borrow (using a flash swap) for bDIGG collateral and exchange to another token', dryRun(async () => { await setupAndLiquidateUnhealthyTokenBorrowWithTokenCollateral(\"0xD291E7a03283640FDc51b121aC401383A46cC623\", true, \"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\", [\"BadgerSett\", \"UniswapV2\"], [\"0x0\", fuse.web3.eth.abi.encodeParameters([\"address\", \"address[]\"], [UNISWAP_V2_PROTOCOLS.SushiSwap.router, [\"0x798D1bE841a82a273720CE31c822C61a67a601C3\", \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\"]])], UNISWAP_V2_PROTOCOLS.Uniswap.router) }));\n  });\n});\n"
  },
  {
    "path": "src/fuse-sdk/test/update-interest-rate-models-v2.js",
    "content": "const Fuse = require(\"../dist/fuse.node.commonjs2.js\");\n\nvar fuse = new Fuse(process.env.TESTING_WEB3_PROVIDER_URL);\n\n// Launch pools\nvar pools = {\n  R1: {\n    comptroller: \"0x4dD657E0AC3d6Eac84B1b3Be6dA0018d2AA1dbC8\",\n    shortName: \"Fuse R1\",\n    longName: \"Rari DAO Fuse Pool R1 (Base)\",\n    assetSymbolPrefix: \"fr1\",\n    assets: [\n      [\n        \"0x0000000000000000000000000000000000000000\",\n        0.75,\n        0.2,\n        Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n          .JumpRateModel_StablesMajors,\n      ], // ETH\n      [\n        \"0x6B175474E89094C44Da98b954EedeAC495271d0F\",\n        0.75,\n        0.15,\n        Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n          .JumpRateModel_StablesMajors,\n      ], // DAI\n      [\n        \"0xD291E7a03283640FDc51b121aC401383A46cC623\",\n        0.45,\n        0.3,\n        Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n          .JumpRateModel_GovSeeds,\n      ], // RGT\n    ],\n  },\n};\n\npools[\"R2\"] = {\n  comptroller: \"0x8560b9839e10766ebFdBC901605b5cc72ce4Afd8\",\n  shortName: \"Fuse R2\",\n  longName: \"Rari DAO Fuse Pool R2 (Core)\",\n  assetSymbolPrefix: \"fr2\",\n  assets: pools[\"R1\"].assets.concat([\n    [\n      \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n      0.75,\n      0.15,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .JumpRateModel_StablesMajors,\n    ], // USDC\n    [\n      \"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\",\n      0.5,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .JumpRateModel_StablesMajors,\n    ], // WBTC\n    [\n      \"0x514910771af9ca656af840dff83e8264ecf986ca\",\n      0.5,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // LINK\n  ]),\n};\n\npools[\"R3\"] = {\n  comptroller: \"0xc18057F85f752f1CE181aeAD1f081d116333D02C\",\n  shortName: \"Fuse R3\",\n  longName: \"Rari DAO Fuse Pool R3 (VC)\",\n  assetSymbolPrefix: \"fr3\",\n  assets: pools[\"R2\"].assets.concat([\n    [\n      \"0x111111111117dc0aa78b770fa6a738034120c302\",\n      0.45,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // 1INCH\n    [\n      \"0xbbbbca6a901c926f240b89eacb641d8aec7aeafd\",\n      0.4,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // LRC\n    [\n      \"0xc944e90c64b2c07662a292be6244bdf05cda44a7\",\n      0.4,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // GRT\n    [\n      \"0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2\",\n      0.45,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // MTA\n    [\n      \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n      0.45,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .JumpRateModel_StablesMajors,\n    ], // mUSD\n    [\n      \"0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828\",\n      0.45,\n      0.35,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // UMA\n    [\n      \"0x0d438f3b5175bebc262bf23753c1e53d03432bde\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // wNXM\n    [\n      \"0xD533a949740bb3306d119CC777fa900bA034cd52\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // CRV\n    [\n      \"0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // SNX\n    [\n      \"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // MKR\n    [\n      \"0xc00e94cb662c3520282e6f5717214004a7f26888\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // COMP\n    [\n      \"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // UNI\n    [\n      \"0xe41d2489571d322189246dafa5ebde1f4699f498\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // ZRX\n    [\n      \"0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // AAVE\n    [\n      \"0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e\",\n      0.6,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // YFI\n  ]),\n};\n\npools[\"R4\"] = {\n  comptroller: \"0x6E7fb6c5865e8533D5ED31b6d43fD95f4C411834\",\n  shortName: \"Fuse R4\",\n  longName: \"Rari DAO Fuse Pool R4 (Community)\",\n  assetSymbolPrefix: \"fr4\",\n  assets: pools[\"R2\"].assets.concat([\n    // [\"0x7e7e112a68d8d2e221e11047a72ffc1065c38e1a\", 0.30, 0.30, Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_StablesMajors], // bDIGG\n    [\n      \"0x4688a8b1f292fdab17e9a90c8bc379dc1dbd8713\",\n      0.4,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // COVER\n    [\n      \"0x0AaCfbeC6a24756c20D41914F2caba817C0d8521\",\n      0.45,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // YAM\n    [\n      \"0x3472A5A71965499acd81997a54BBA8D852C6E53d\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // BADGER\n    [\n      \"0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // KP3R\n    [\n      \"0x4e15361fd6b4bb609fa63c81a2be19d873717870\",\n      0.3,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // FTM\n    [\n      \"0x584bC13c7D411c00c01A62e8019472dE68768430\",\n      0.25,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // HEGIC\n    [\n      \"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2\",\n      0.5,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // SUSHI\n    [\n      \"0xb753428af26e81097e7fd17f40c88aaa3e04902c\",\n      0.4,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // SFI\n    [\n      \"0x8888801af4d980682e47f1a9036e589479e835c5\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // MPH\n    [\n      \"0xdbdb4d16eda451d0503b854cf79d55697f90c8df\",\n      0.5,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // ALCX\n  ]),\n};\n\npools[\"R5\"] = {\n  comptroller: \"0x64fCabe3DBb99D8427194a83F0f4af20eE7D739E\",\n  shortName: \"Fuse R5\",\n  longName: \"Rari DAO Fuse Pool R5 (CEX)\",\n  assetSymbolPrefix: \"fr5\",\n  assets: pools[\"R2\"].assets.concat([\n    [\n      \"0x476c5E26a75bd202a9683ffD34359C0CC15be0fF\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // SRM\n    [\n      \"0x408e41876cccdc0f92210600ef50372656052a38\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // REN\n    [\n      \"0x50d1c9771902476076ecfc8b2a83ad6b9355a4c9\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // FTT\n    // [\"0xB8c77482e45F1F44dE1745F52C74426C631bDD52\", 0.35, 0.30, Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds], // BNB\n    [\n      \"0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // CEL\n    [\n      \"0x4fabb145d64652a948d72533023f6e7a623c7c53\",\n      0.35,\n      0.3,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .JumpRateModel_StablesMajors,\n    ], // BUSD\n  ]),\n};\n\npools[\"R7\"] = {\n  comptroller: \"0x2A1bF27578C14e868E42A49f0D87dE45d29f7efa\",\n  shortName: \"Fuse R7\",\n  longName: \"Rari DAO Fuse Pool R7 (SOCKS)\",\n  assetSymbolPrefix: \"fr7\",\n  assets: [\n    [\n      \"0x0000000000000000000000000000000000000000\",\n      0.65,\n      0.2,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .JumpRateModel_StablesMajors,\n    ], // ETH\n    [\n      \"0x23b608675a2b2fb1890d3abbd85c5775c51691d5\",\n      0.5,\n      0.25,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES.JumpRateModel_GovSeeds,\n    ], // SOCKS\n    [\n      \"0x6B175474E89094C44Da98b954EedeAC495271d0F\",\n      0.65,\n      0.15,\n      Fuse.PUBLIC_INTEREST_RATE_MODEL_CONTRACT_ADDRESSES\n        .JumpRateModel_StablesMajors,\n    ], // DAI\n  ],\n};\n\n(async function () {\n  var accounts = await fuse.web3.eth.getAccounts();\n\n  // For each pool:\n  for (const poolId of Object.keys(pools)) {\n    var pool = pools[poolId];\n    console.log(\"Updating\", pool.longName);\n    var comptroller = new fuse.web3.eth.Contract(\n      JSON.parse(\n        fuse.compoundContracts[\"contracts/Comptroller.sol:Comptroller\"].abi\n      ),\n      pool.comptroller\n    );\n    var cTokens = await comptroller.methods.getAllMarkets().call();\n\n    for (const cTokenAddress of cTokens) {\n      // Update asset interest rate model\n      console.log(\"Updating\", cTokenAddress, \"of\", pool.shortName);\n\n      var cToken = new fuse.web3.eth.Contract(\n        JSON.parse(\n          fuse.compoundContracts[\"contracts/CErc20Delegate.sol:CErc20Delegate\"]\n            .abi\n        ),\n        cTokenAddress\n      );\n      var underlying = await cToken.methods.underlying().call();\n      var interestRateModel = pool.assets.find(\n        (item) => underlying.toLowerCase() === item[0].toLowerCase()\n      )[3];\n\n      try {\n        await cToken.methods\n          ._setInterestRateModel(interestRateModel)\n          .send({ from: accounts[0], gasPrice: \"0\" });\n      } catch (error) {\n        console.error(\n          \"Failed to update\",\n          cTokenAddress,\n          \"of\",\n          pool.shortName,\n          error\n        );\n      }\n\n      console.log(\"Successfully updated\", cTokenAddress, \"of\", pool.shortName);\n    }\n\n    console.log(\"Successfully updated all assets for:\", pool.longName);\n  }\n})();\n"
  },
  {
    "path": "src/fuse-sdk/webpack.config.js",
    "content": "const webpack = require(\"webpack\");\nconst TerserPlugin = require(\"terser-webpack-plugin\");\nconst CompressionPlugin = require(\"compression-webpack-plugin\");\n\nmodule.exports = [\n  /* createConfig('commonjs2'), */\n  createConfig(\"commonjs2\", \"node\"),\n  createConfig(\"window\"),\n];\n\nfunction createConfig(libraryTarget, target) {\n  var config = {\n    resolve: {\n      fallback: {\n        os: require.resolve(\"os-browserify/browser\"),\n        https: require.resolve(\"https-browserify\"),\n        http: require.resolve(\"stream-http\"),\n        stream: require.resolve(\"stream-browserify\"),\n        crypto: require.resolve(\"crypto-browserify\"),\n      },\n    },\n    entry: [\"regenerator-runtime/runtime\", \"./src/index.js\"],\n    output: {\n      path: __dirname,\n      filename:\n        \"./dist/fuse.\" +\n        (target !== undefined ? target + \".\" : \"\") +\n        libraryTarget +\n        \".js\",\n      libraryTarget: libraryTarget,\n      libraryExport: \"default\",\n    },\n    optimization: {\n      minimize: true,\n      minimizer: [\n        new TerserPlugin({\n          terserOptions: {\n            output: {\n              comments: false,\n            },\n          },\n        }),\n      ],\n    },\n    module: {\n      rules: [\n        {\n          test: /\\.js$/,\n          exclude: /node_modules/,\n          use: {\n            loader: \"babel-loader\",\n            options: {\n              presets: [\n                [\n                  \"@babel/preset-env\",\n                  {\n                    useBuiltIns: \"entry\",\n                    corejs: { version: 3 },\n                  },\n                ],\n              ],\n              plugins: [\"@babel/plugin-proposal-class-properties\"],\n            },\n          },\n        },\n      ],\n    },\n  };\n\n  if (libraryTarget === \"window\") config.output.library = \"Fuse\";\n  if (target !== undefined) config.target = target;\n\n  if (target === \"node\") {\n    config.plugins = [\n      new webpack.DefinePlugin({\n        btoa: function (string) {\n          return process.browser\n            ? btoa(string)\n            : Buffer.from(string, \"binary\").toString(\"base64\");\n        },\n      }),\n      new webpack.ProvidePlugin({\n        window: \"global/window\",\n      }),\n      new webpack.ProvidePlugin({\n        electron: \"electron\",\n      }),\n    ];\n  } else {\n    config.plugins = [\n      new webpack.ProvidePlugin({\n        process: target === \"node\" ? \"process\" : \"process/browser\",\n      }),\n      new webpack.ProvidePlugin({\n        Buffer: [\"buffer\", \"Buffer\"],\n      }),\n    ];\n  }\n\n  config.plugins.push(new CompressionPlugin());\n\n  return config;\n}\n"
  },
  {
    "path": "src/hooks/fuse/useCTokenData.ts",
    "content": "import { useRari } from \"context/RariContext\";\nimport { useQuery } from \"react-query\";\n\nimport { createComptroller, createCToken } from \"utils/createComptroller\";\n\nexport interface CTokenData {\n  reserveFactorMantissa: any;\n  adminFeeMantissa: any;\n  collateralFactorMantissa: any;\n  interestRateModelAddress: string;\n  cTokenAddress: string;\n  isPaused: boolean;\n}\n\nexport const useCTokenData = (\n  comptrollerAddress?: string,\n  cTokenAddress?: string\n): CTokenData | undefined => {\n  const { fuse } = useRari();\n\n  const { data } = useQuery(cTokenAddress + \" cTokenData\", async () => {\n    if (comptrollerAddress && cTokenAddress) {\n      const comptroller = createComptroller(comptrollerAddress, fuse);\n      const cToken = createCToken(fuse, cTokenAddress);\n\n      const [\n        adminFeeMantissa,\n        reserveFactorMantissa,\n        interestRateModelAddress,\n        { collateralFactorMantissa },\n        isPaused,\n      ] = await Promise.all([\n        cToken.methods.adminFeeMantissa().call(),\n        cToken.methods.reserveFactorMantissa().call(),\n        cToken.methods.interestRateModel().call(),\n        comptroller.methods.markets(cTokenAddress).call(),\n        comptroller.methods.borrowGuardianPaused(cTokenAddress).call(),\n      ]);\n\n      const obj = {\n        reserveFactorMantissa,\n        adminFeeMantissa,\n        collateralFactorMantissa,\n        interestRateModelAddress,\n        cTokenAddress,\n        isPaused,\n      };\n\n      return obj;\n    }\n  });\n\n  return data;\n};\n"
  },
  {
    "path": "src/hooks/fuse/useFusePools.ts",
    "content": "import { useMemo } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport Rari from \"rari-sdk/index\";\nimport Fuse from \"fuse-sdk\";\nimport FuseJs from \"fuse.js\";\nimport { filterOnlyObjectProperties } from \"utils/fetchFusePoolData\";\n\nexport interface FusePool {\n  name: string;\n  creator: string;\n  comptroller: string;\n  isPrivate: boolean;\n}\n\ninterface LensFusePool {\n  blockPosted: string;\n  name: string;\n  creator: string;\n  comptroller: string;\n  timestampPosted: string;\n}\n\ninterface LensFusePoolData {\n  totalBorrow: string;\n  totalSupply: string;\n  underlyingSymbols: string[];\n  underlyingTokens: string[];\n  whitelistedAdmin: boolean;\n}\n\nexport type LensPoolsWithData = [\n  ids: string[],\n  fusePools: LensFusePool[],\n  fusePoolsData: LensFusePoolData[],\n  errors: boolean[]\n];\n\nexport interface MergedPool extends LensFusePoolData, LensFusePool {\n  id: number;\n  suppliedUSD: number;\n  borrowedUSD: number;\n}\n\nconst poolSort = (pools: MergedPool[]) => {\n  return pools.sort((a, b) => {\n    if (b.suppliedUSD > a.suppliedUSD) {\n      return 1;\n    }\n\n    if (b.suppliedUSD < a.suppliedUSD) {\n      return -1;\n    }\n\n    // They're equal, let's sort by pool number:\n    return b.id > a.id ? 1 : -1;\n  });\n};\n\nexport const fetchPools = async ({\n  rari,\n  fuse,\n  address,\n  filter,\n}: {\n  rari: Rari;\n  fuse: Fuse;\n  address: string;\n  filter?: string;\n}) => {\n  const isMyPools = filter === \"my-pools\";\n  const isCreatedPools = filter === \"created-pools\";\n  const isNonWhitelistedPools = filter === \"unverified-pools\";\n\n  const req = isMyPools\n    ? fuse.contracts.FusePoolLens.methods\n        .getPoolsBySupplierWithData(address)\n        .call({ gas: 1e18 })\n    : isCreatedPools\n    ? fuse.contracts.FusePoolLens.methods\n        .getPoolsByAccountWithData(address)\n        .call({ gas: 1e18 })\n    : isNonWhitelistedPools\n    ? fuse.contracts.FusePoolLens.methods\n        .getPublicPoolsByVerificationWithData(false)\n        .call({ gas: 1e18 })  \n    : fuse.contracts.FusePoolLens.methods\n        .getPublicPoolsByVerificationWithData(true)\n        .call({ gas: 1e18 });\n\n  const {\n    0: ids,\n    1: fusePools,\n    2: fusePoolsData,\n    3: errors,\n  }: LensPoolsWithData = await req;\n\n  const ethPrice = await rari.web3.utils.fromWei(await rari.getEthUsdPriceBN());\n\n  const merged: MergedPool[] = [];\n  for (let i = 0; i < ids.length; i++) {\n    const id = parseFloat(ids[i]);\n    const fusePool = fusePools[i];\n    const fusePoolData = fusePoolsData[i];\n\n    const mergedPool = {\n      id,\n      suppliedUSD:\n        (parseFloat(fusePoolData.totalSupply) / 1e18) * parseFloat(ethPrice),\n      borrowedUSD:\n        (parseFloat(fusePoolData.totalBorrow) / 1e18) * parseFloat(ethPrice),\n      ...filterOnlyObjectProperties(fusePool),\n      ...filterOnlyObjectProperties(fusePoolData),\n    };\n\n    merged.push(mergedPool);\n  }\n\n  return merged;\n};\n\ninterface UseFusePoolsReturn {\n  pools: MergedPool[] | undefined;\n  filteredPools: MergedPool[];\n}\n\n// returns impersonal data about fuse pools ( can filter by your supplied/created pools )\nexport const useFusePools = (\n  filter?: \"my-pools\" | \"created-pools\" | string\n): UseFusePoolsReturn => {\n  const { fuse, rari, address } = useRari();\n\n  const isMyPools = filter === \"my-pools\";\n  const isCreatedPools = filter === \"created-pools\";\n  // const isWhitelistedPools = filter ===\"verified-pools\"\n  const isNonWhitelistedPools = filter === \"unverified-pools\";\n\n  const { data: pools } = useQuery(\n    address +\n      \" fusePoolList\" +\n      (isMyPools || isCreatedPools || isNonWhitelistedPools ? filter : \"\"),\n    async () => await fetchPools({ rari, fuse, address, filter })\n  );\n\n  const filteredPools = useMemo(() => {\n\n    if (!pools?.length) {\n      return [];\n    }\n\n    if (!filter) {\n      return poolSort(pools);\n    }\n\n    if (isMyPools || isCreatedPools || isNonWhitelistedPools) {\n      return poolSort(pools);\n    }\n\n    const options = {\n      keys: [\"pool.name\", \"id\", \"underlyingTokens\", \"underlyingSymbols\"],\n      threshold: 0.3,\n    };\n\n    const filtered = new FuseJs(pools, options).search(filter);\n    return poolSort(filtered.map((item) => item.item));\n  }, [pools, filter, isMyPools, isCreatedPools, isNonWhitelistedPools]);\n\n  return { pools, filteredPools };\n};\n"
  },
  {
    "path": "src/hooks/fuse/useFuseTVL.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport Rari from \"rari-sdk/index\";\nimport Fuse from \"fuse-sdk\";\nimport { fetchFuseTVL } from \"utils/fetchTVL\";\n\nexport const fetchFuseNumberTVL = async (rari: Rari, fuse: Fuse) => {\n  const tvlETH = await fetchFuseTVL(fuse);\n\n  const ethPrice: number = rari.web3.utils.fromWei(\n    await rari.getEthUsdPriceBN()\n  ) as any;\n\n  return (parseInt(tvlETH.toString()) / 1e18) * ethPrice;\n};\n\nexport const useFuseTVL = () => {\n  const { rari, fuse } = useRari();\n\n  return useQuery(\"fuseTVL\", async () => {\n    return fetchFuseNumberTVL(rari, fuse);\n  });\n};\n"
  },
  {
    "path": "src/hooks/fuse/useFuseTotalBorrowAndSupply.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport Rari from \"rari-sdk/index\";\nimport Fuse from \"fuse-sdk\";\n\nexport const fetchFuseTotalBorrowAndSupply = async ({\n  rari,\n  fuse,\n  address,\n}: {\n  rari: Rari;\n  fuse: Fuse;\n  address: string;\n}) => {\n  const [{ 0: supplyETH, 1: borrowETH }, ethPrice] = await Promise.all([\n    fuse.contracts.FusePoolLens.methods\n      .getUserSummary(address)\n      .call({ gas: 1e18 }),\n\n    rari.web3.utils.fromWei(await rari.getEthUsdPriceBN()) as any,\n  ]);\n\n  return {\n    totalSuppliedUSD: (supplyETH / 1e18) * ethPrice,\n    totalBorrowedUSD: (borrowETH / 1e18) * ethPrice,\n  };\n};\n\nexport const useFuseTotalBorrowAndSupply = () => {\n  const { rari, fuse, address } = useRari();\n\n  const { data, isLoading, isError } = useQuery(\n    address + \" totalBorrowAndSupply\",\n    async () => fetchFuseTotalBorrowAndSupply({ rari, fuse, address })\n  );\n\n  return { data, isLoading, isError };\n};\n"
  },
  {
    "path": "src/hooks/fuse/useIRMCurves.ts",
    "content": "\n// Rari\nimport { useRari } from \"context/RariContext\";\n\n// Hooks\nimport { useQuery } from \"react-query\";\n\n// Utils\nimport { convertIRMtoCurve } from \"components/pages/Fuse/FusePoolInfoPage\";\n\nconst useIRMCurves = ({\n    interestRateModel,\n    adminFee,\n    reserveFactor,\n  }: {\n    interestRateModel: any;\n    adminFee: any;\n    reserveFactor: any;\n  }) => {\n    const { fuse } = useRari();\n  \n    // Get IRM curves\n    const { data: curves } = useQuery(\n      interestRateModel + adminFee + reserveFactor + \" irm\",\n      async () => {\n        const IRM = await fuse.identifyInterestRateModel(interestRateModel);\n  \n        if (IRM === null) {\n          return null;\n        }\n  \n        await IRM._init(\n          fuse.web3,\n          interestRateModel,\n          // reserve factor\n          reserveFactor * 1e16,\n          // admin fee\n          adminFee * 1e16,\n          // hardcoded 10% Fuse fee\n          0.1e18\n        );\n  \n        return convertIRMtoCurve(IRM, fuse);\n      }\n    );\n  \n    return curves;\n  };\n\nexport default useIRMCurves"
  },
  {
    "path": "src/hooks/fuse/useLiquidationIncentive.ts",
    "content": "// Rari\nimport { useRari } from \"context/RariContext\";\n\n// Hooks\nimport { useQuery } from \"react-query\";\nimport { createComptroller } from \"utils/createComptroller\";\n\nexport const useLiquidationIncentive = (comptrollerAddress: string) => {\n    const { fuse } = useRari();\n  \n    const { data } = useQuery(\n      comptrollerAddress + \" comptrollerData\",\n      async () => {\n        const comptroller = createComptroller(comptrollerAddress, fuse);\n  \n        return comptroller.methods.liquidationIncentiveMantissa().call();\n      }\n    );\n  \n    return data;\n  };"
  },
  {
    "path": "src/hooks/fuse/useOracleData.ts",
    "content": "// Rari\nimport Fuse from \"../../fuse-sdk/src/index\";\n\n// Hooks\nimport { createOracle } from \"../../utils/createComptroller\";\n\n// Web3\nimport { Contract } from \"web3-eth-contract\";\n\n// Libraries\nimport axios from \"axios\";\nimport { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport { ETH_TOKEN_DATA } from \"hooks/useTokenData\";\n\nexport type OracleDataType = {\n  admin: string; // Address of Oracle's admin\n  adminOverwrite: boolean; // Will tell us if admin can overwrite existing oracle-token pairs\n  oracleContract: Contract;\n  defaultOracle: undefined | string;\n};\n\n// Return a string of what we want to call this oracle\nexport const useIdentifyOracle = (\n  oracleAddr: string,\n  tokenAddr?: string\n): string => {\n  const { fuse } = useRari();\n\n  const { data } = useQuery(\"Identifying Oracle \" + oracleAddr, async () => {\n    if (tokenAddr && tokenAddr === ETH_TOKEN_DATA.address)\n      return \"MasterPriceOracle\";\n\n    // If no oracle address provided, return empty string\n    if (!oracleAddr) return \"\";\n\n    const identity = await fuse.identifyPriceOracle(oracleAddr);\n    if (identity === \"MasterPriceOracleV1\") return \"RariMasterPriceOracle\";\n    return identity;\n  });\n\n  return data ?? \"\";\n};\n\nexport const useOracleData = (\n  oracleAddress: string,\n  fuse: Fuse,\n  oracleModel: string | undefined\n): OracleDataType | undefined => {\n  const { data } = useQuery(\n    \"Oracle info\" + oracleAddress + \" Oracle Model: \" + oracleModel,\n    async () => {\n      // If its not v2 or v3 (it is  a legacy oracle), then just return the string of the oracleModel\n      // If its MPOv1 or MPOv2 or v3\n      if (\n        oracleModel !== \"MasterPriceOracleV2\" &&\n        oracleModel !== \"MasterPriceOracleV3\"\n      )\n        return undefined;\n\n      const oracleContract = createOracle(\n        oracleAddress,\n        fuse,\n        \"MasterPriceOracle\"\n      );\n\n      const admin = await oracleContract.methods.admin().call();\n      const adminOverwrite = await oracleContract.methods\n        .canAdminOverwrite()\n        .call();\n\n      let defaultOracle = undefined;\n      try {\n        defaultOracle = await oracleContract.methods.defaultOracle().call();\n      } catch (err) {\n        console.log(\"Error fetching default oracle for Pool Oracle\");\n        console.error(err);\n      }\n\n      return { admin, adminOverwrite, oracleContract, defaultOracle };\n    }\n  );\n\n  return data;\n};\n\nexport const useGetOracleOptions = (\n  oracleData: OracleDataType | undefined,\n  tokenAddress: string\n): { [key: string]: any } | null => {\n  const { fuse } = useRari();\n  const isValidAddress = fuse.web3.utils.isAddress(tokenAddress);\n\n  const { defaultOracle, oracleContract, adminOverwrite } = oracleData ?? {};\n  const oracleAddress = oracleContract?.options?.address ?? undefined;\n\n  // If the pool has a default price oracle (RariMasterPriceOracle), query that oracle's price for this token.\n  // If it has an available price, we can let the user choose \"Default Price Oracle\"\n  // We should also set this value initially if it is available and if \"Current_Price_Oracle\" is null.\n  const { data: Default_Price_Oracle } = useQuery(\n    \"Pool Default Price Oracle \" +\n      (defaultOracle ?? \"\") +\n      \" check price feed for \" +\n      tokenAddress,\n    async () => {\n      if (!defaultOracle) return null;\n\n      // If defaultOracle address is empty return null\n      if (defaultOracle === ETH_TOKEN_DATA.address) return null;\n\n      const oracleContract = createOracle(\n        defaultOracle,\n        fuse,\n        \"MasterPriceOracle\"\n      );\n\n      // Call the defaultOracle's price to make sure we have a price for this token\n      try {\n        const price = await oracleContract.methods.price(tokenAddress).call();\n        console.log(\"Default_Price_Oracle\", { price });\n        if (parseFloat(price) > 0) return defaultOracle;\n      } catch (err) {\n        console.log(\"Default_Price_Oracle: could not fetch price\");\n        console.error(err);\n        return null;\n      }\n    }\n  );\n\n  // If it has a custom oracle set, show this option and show it by default\n  // If it doesn't have a custom oracle, then query for the default oracle and show that as the \"Current oracle\"\n  const { data: Current_Price_Oracle } = useQuery(\n    \"MasterOracle \" + oracleAddress ??\n      \"\" +\n        \" check price feed for \" +\n        tokenAddress +\n        \" and default oracle \" +\n        defaultOracle,\n    async () => {\n      if (!isValidAddress) return null;\n      if (!oracleContract) return null;\n      if (!oracleData) return null;\n\n      // Get custom Oracle address for asset from the pools MasterPriceOracle\n      const customOracleAddress = await oracleData.oracleContract.methods\n        .oracles(tokenAddress)\n        .call();\n\n      // If we have a custom oracle address set, retur that\n      if (customOracleAddress !== ETH_TOKEN_DATA.address)\n        return customOracleAddress;\n      // If custom oracleAddress is empty\n      //  -- If there isnt a defaultOracle, return null\n      //  -- If there is a defaultOracle price for this asset, return the defaultOracle\n      //  -- If there isnt a default oracle price, then return null\n      // -\n      else {\n        if (!oracleData.defaultOracle) return null;\n        // This is copied from the DefaultOracle query\n        else {\n          const oracleContract = createOracle(\n            oracleData.defaultOracle,\n            fuse,\n            \"MasterPriceOracle\"\n          );\n\n          // Call the defaultOracle's price to make sure we have a price for this token\n          try {\n            const price = await oracleContract.methods\n              .price(tokenAddress)\n              .call();\n            if (parseFloat(price) > 0) return oracleData.defaultOracle;\n          } catch (err) {\n            console.log(\n              \"Current_Price_Oracle: Default_Price_Oracle: could not fetch price\"\n            );\n            console.error(err);\n            return null;\n          }\n        }\n      }\n    }\n  );\n\n  // If the pool does not have a default oracle (RariMasterPriceOracle) then show this option.\n  // If the pool already has a default oracle (RariMasterPriceOracle) then we don't have to show this.\n  // In case the Pool's default RariMasterPriceOracle cannot fetch the price for this asset, there would be no point in choosing this option.\n  const { data: Rari_MasterPriceOracle } = useQuery(\n    \"RariMasterPriceOracle price feed check for \" + tokenAddress,\n    async () => {\n      if (\n        !isValidAddress ||\n        (!adminOverwrite && !Current_Price_Oracle === null) ||\n        !!defaultOracle || // our defaultOracle IS RariMasterPriceOracle. ||\n        !oracleData\n      )\n        return null;\n\n      // If address is valid and admin can overwrite, get Oracle address for the asset from RariMasterPriceOracle\n      const oracleContract = createOracle(\n        Fuse.PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES.MasterPriceOracle,\n        fuse,\n        \"MasterPriceOracle\"\n      );\n\n      const oracleAddress = await oracleContract.methods\n        .oracles(tokenAddress)\n        .call();\n\n      // If oracleAddress is empty return null, else return the RARI MASTER PRICE ORACLE\n      if (oracleAddress === \"0x0000000000000000000000000000000000000000\")\n        return null;\n      return Fuse.PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES.MasterPriceOracle;\n    }\n  );\n\n  const { data: Chainlink_Oracle } = useQuery(\n    \"Chainlink price feed check for: \" + tokenAddress,\n    async () => {\n      if (\n        !isValidAddress ||\n        (!adminOverwrite && !Current_Price_Oracle === null) ||\n        !oracleData\n      )\n        return null;\n\n      // If address is valid and admin can overwrite, get price for the asset from ChainlinkPriceOracle\n      const oracleContract = createOracle(\n        Fuse.PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES.ChainlinkPriceOracleV3,\n        fuse,\n        \"ChainlinkPriceOracle\"\n      );\n      const oraclePrice = await oracleContract.methods\n        .price(tokenAddress)\n        .call();\n\n      // If price is zero, this means theres no pricefeed for the asset so return null\n      // If we receive a price, return ChainlinkPriceOracle address\n      if (oraclePrice <= 0) return null;\n      return Fuse.PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES.ChainlinkPriceOracleV3;\n    }\n  );\n\n  // We mount this hook to get data from cache.\n  // We need this because if there's no whitelisted uniswap pool,\n  // we shouldn't return Uniswap_V3_Oracle as an option\n  const { data: liquidity, error } = useQuery(\n    \"UniswapV3 pool liquidity for  \" + tokenAddress,\n    async () =>\n      (\n        await axios.post(\n          \"https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3\",\n          {\n            query: `{\n            token(id:\"${tokenAddress.toLocaleLowerCase()}\") {\n              whitelistPools {\n                id,\n                feeTier,\n                totalValueLockedUSD,\n                token0 {\n                  name,\n                  id,\n                  symbol\n                },\n                token1 {\n                  name,\n                  id,\n                  symbol\n                }\n              }\n            }\n          }`,\n          }\n        )\n      ).data.data.pairs,\n    { refetchOnMount: false }\n  );\n\n  // If theres no whitelisted pool for the asset, or if there was an error return null\n  // Otherwise its return ''\n  // In the UniswapV3PriceOracleConfigurator, we will mount the hook above to get info\n  const Uniswap_V3_Oracle = liquidity?.data.token === null || error ? null : \"\";\n\n  const { SushiPairs, SushiError, UniV2Pairs, univ2Error } =\n    useSushiOrUniswapV2Pairs(tokenAddress);\n\n  // If theres no whitelisted pool for the asset, or if there was an error return null\n  // Otherwise its return ''\n  // In the UniswapV3PriceOracleConfigurator, we will mount the hook above to get info\n  // const Uniswap_V2_Oracle =\n  //       (UniV2Pairs === null || UniV2Pairs === undefined || UniV2Pairs.length === 0 || univ2Error )\n  //       ? null\n  //       : ''\n\n  // const SushiSwap_Oracle =\n  //       (SushiPairs === null || SushiPairs === undefined || SushiPairs.length === 0 || SushiError )\n  //       ? null\n  //       : ''\n\n  // If tokenAddress is not a valid address return null.\n  // If tokenAddress is valid and oracle admin can overwrite or if admin can't overwrite but there's no preset, return all options\n  // If tokenAddress is valid but oracle admin can't overwrite, return the preset oracle address,\n  const Data = !isValidAddress\n    ? null\n    : adminOverwrite || Current_Price_Oracle === null\n    ? {\n        Default_Price_Oracle,\n        Current_Price_Oracle,\n        Rari_MasterPriceOracle,\n        Chainlink_Oracle,\n        Uniswap_V3_Oracle,\n        // Uniswap_V2_Oracle,\n        // SushiSwap_Oracle,\n        Custom_Oracle: \" \",\n      }\n    : { Current_Price_Oracle };\n\n  return Data;\n};\n\nexport const useSushiOrUniswapV2Pairs = (tokenAddress: string) => {\n  const { data: UniV2Pairs, error: univ2Error } = useQuery(\n    \"UniswapV2 pairs for  \" + tokenAddress,\n    async () => {\n      const pairs = await axios.post(\n        \"https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2\",\n        {\n          query: `{\n          pairs(first: 10, orderBy: totalSupply, orderDirection: desc, where: { token0: \"${tokenAddress.toLocaleLowerCase()}\" } ) {\n            id,\n           token0 {\n             id,\n             symbol\n           },\n           token1 {\n             id,\n             symbol\n           }\n           totalSupply\n          }\n         }`,\n        }\n      );\n      return pairs !== undefined &&\n        pairs.data !== undefined &&\n        pairs.data.data.pairs !== undefined\n        ? pairs.data.data.pairs.filter((pair: any) => pair.totalSupply > 10000)\n        : null;\n    },\n    { refetchOnMount: false }\n  );\n\n  const { data: SushiPairs, error: SushiError } = useQuery(\n    \"SushiSwap pairs for  \" + tokenAddress,\n    async () => {\n      const pairs = await axios.post(\n        \"https://api.thegraph.com/subgraphs/name/zippoxer/sushiswap-subgraph-fork\",\n        {\n          query: `{\n          pairs(first: 10, orderBy: totalSupply, orderDirection: desc, where: { token0: \"${tokenAddress.toLocaleLowerCase()}\" } ) {\n            id,\n           token0 {\n             id,\n             symbol\n           },\n           token1 {\n             id,\n             symbol\n           }\n           totalSupply\n          }\n         }`,\n        }\n      );\n\n      return pairs !== undefined &&\n        pairs.data !== undefined &&\n        pairs.data.data.pairs !== undefined\n        ? pairs.data.data.pairs.filter((pair: any) => pair.totalSupply > 10000)\n        : null;\n    },\n    { refetchOnMount: false }\n  );\n\n  return { SushiPairs, SushiError, UniV2Pairs, univ2Error };\n};\n"
  },
  {
    "path": "src/hooks/fuse/useOraclesForPool.ts",
    "content": "import { useRari } from \"context/RariContext\";\nimport { string } from \"mathjs\";\nimport React, { useMemo } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { createOracle } from \"utils/createComptroller\";\n\nconst useOraclesForPool = (\n  poolOracle: string | undefined,\n  underlyings: string[]\n) => {\n  const { fuse } = useRari();\n\n  const { data } = useQuery(\n    \"querying oracles for MasterPriceOracle \" + poolOracle,\n    async () => {\n      if (!poolOracle) return {};\n\n      const mpo = createOracle(poolOracle, fuse, \"MasterPriceOracle\");\n\n      try {\n        const events = await mpo.getPastEvents(\"NewOracle\", {\n          fromBlock: 0,\n          toBlock: \"latest\",\n        });\n\n        console.log({ events });\n        const oracles: {\n          [underlyingToken: string]: string;\n        } = {};\n        for (let e of events) {\n          if (e.returnValues.newOracle !== \"0x0000000000000000000000000000000000000000\") oracles[e.returnValues.underlying] = e.returnValues.newOracle;\n          else if (oracles[e.returnValues.underlying] !== undefined) delete oracles[e.returnValues.underlying];\n        }\n\n        return oracles;\n      } catch (err) {\n        console.error(err);\n      }\n      return {};\n    }\n  );\n\n  const tokenToOracleMap = data ?? {};\n\n  //   Maps oracle to list of underlyings\n  const oraclesMap = useMemo(() => {\n    const map: {\n      [oracleAddr: string]: string[];\n    } = {};\n\n    Object.entries(tokenToOracleMap).map(\n      ([underlying, oracleAddr]: [string, string]) => {\n        if (!map[oracleAddr]) {\n          map[oracleAddr] = [underlying];\n        } else {\n          map[oracleAddr] = [...map[oracleAddr], underlying];\n        }\n      }\n    );\n    return map;\n  }, [tokenToOracleMap]);\n\n  return oraclesMap;\n};\n\nexport default useOraclesForPool;\n"
  },
  {
    "path": "src/hooks/homepage/useOpportunitySubtitle.ts",
    "content": "import { useMemo } from \"react\";\nimport {\n  HomepageOpportunity,\n  HomepageOpportunityType,\n} from \"constants/homepage\";\nimport { usePoolAPY } from \"hooks/usePoolAPY\";\nimport { useFusePoolData } from \"hooks/useFusePoolData\";\nimport { FusePoolMetric } from \"utils/fetchFusePoolData\";\nimport { shortUsdFormatter } from \"utils/bigUtils\";\nimport { useFuseTVL } from \"hooks/fuse/useFuseTVL\";\nimport { usePool2APR } from \"hooks/pool2/usePool2APR\";\nimport { usePoolsAPY } from \"hooks/usePoolAPY\";\nimport { usePoolInfos } from \"hooks/usePoolInfo\";\nimport {\n  SaffronTranchePool,\n  TrancheRating,\n  useMySaffronData,\n} from \"hooks/tranches/useSaffronData\";\n\nexport const useOpportunitySubtitle = (opportunity: HomepageOpportunity) => {\n  // Earn\n  const earnPoolAPY = usePoolAPY(opportunity.vaultType);\n  const poolInfos = usePoolInfos();\n  const poolsAPY = usePoolsAPY(poolInfos);\n\n  // Fuse\n  const fusePoolData = useFusePoolData(opportunity.fusePoolId?.toString());\n  const { data: fuseTVL } = useFuseTVL();\n\n  // Pool2\n  const pool2APR = usePool2APR();\n\n  // Tranches\n  const mySaffronData: SaffronTranchePool[] = useMySaffronData();\n  const trancheAPYs = useMemo(() => {\n    const sTrancheAPY =\n      mySaffronData?.[0]?.tranches?.[TrancheRating.S]?.[\"total-apy\"];\n    const aTrancheAPY =\n      mySaffronData?.[0]?.tranches?.[TrancheRating.A]?.[\"total-apy\"];\n\n    const APYs = [sTrancheAPY, aTrancheAPY]\n      .filter((obj) => obj) // remove null or zero values\n      .sort((a, b) => (b && a ? a - b : 1));\n\n    return APYs;\n  }, [mySaffronData]);\n\n  const returnedSubtitle = useMemo(() => {\n    switch (opportunity.type) {\n      case HomepageOpportunityType.EarnVault:\n        return `${earnPoolAPY}% APY`;\n\n      case HomepageOpportunityType.FusePool:\n        switch (opportunity.fuseMetric) {\n          case FusePoolMetric.TotalBorrowedUSD:\n            return `${shortUsdFormatter(\n              fusePoolData?.totalBorrowedUSD\n            )} borrowed`;\n          case FusePoolMetric.TotalSuppliedUSD:\n            return `${shortUsdFormatter(\n              fusePoolData?.totalSuppliedUSD\n            )} supplied`;\n          case FusePoolMetric.TotalLiquidityUSD:\n            return `${shortUsdFormatter(\n              fusePoolData?.totalLiquidityUSD\n            )} liquidity`;\n          default:\n            return `${shortUsdFormatter(\n              fusePoolData?.totalSuppliedUSD\n            )} supplied`;\n        }\n\n      case HomepageOpportunityType.EarnPage:\n        // @ts-ignore\n        const apys = poolsAPY.filter((obj) => obj).map(parseFloat);\n        // console.log({ apys });\n        return `${Math.max.apply(null, apys)}% APY`;\n\n      case HomepageOpportunityType.FusePage:\n        // console.log({ fuseTVL });\n        return fuseTVL ? `${shortUsdFormatter(fuseTVL)} TVL` : \"? TVL\";\n\n      case HomepageOpportunityType.Pool2Page:\n        // console.log({ pool2APR });\n        return `${pool2APR ?? \"?\"}% APR`;\n\n      case HomepageOpportunityType.TranchesPage:\n        return `${trancheAPYs.map((apy) => `${apy}%`).join(\" - \")} APY`;\n\n      default:\n        return null;\n    }\n  }, [\n    opportunity,\n    earnPoolAPY,\n    poolsAPY,\n    fusePoolData,\n    fuseTVL,\n    pool2APR,\n    trancheAPYs,\n  ]);\n\n  return returnedSubtitle;\n};\n"
  },
  {
    "path": "src/hooks/interestRates/aave/LendingPool.ts",
    "content": "// Types\nimport { AbiItem } from \"web3-utils\";\n\n// LendingPool contract ABI\nconst abi: AbiItem[] =\n  require(\"@aave/protocol-v2/artifacts/contracts/protocol/lendingpool/LendingPool.sol/LendingPool.json\").abi;\n\n// Contract address\nconst address = \"0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9\";\n\nconst LendingPool = { abi, address };\n\nexport default LendingPool;\n"
  },
  {
    "path": "src/hooks/interestRates/aave/useReserves.ts",
    "content": "import { useEffect, useRef, useState } from \"react\";\n\n// Hooks\nimport { useRari } from \"context/RariContext\";\n\n// ABIs\nimport LendingPool from \"./LendingPool\";\n\n// Utils\nimport Web3 from \"web3\";\nimport { ETH_TOKEN_DATA } from \"hooks/useTokenData\";\n\n// Types\nimport { MarketInfo, InterestRatesType } from \"../types\";\n\n// address for WETH\nconst WETH_TOKEN_ADDRESS = \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\";\n\nexport default function useReserves() {\n  const { rari } = useRari();\n\n  // state for reserves (list & borrowing/lending rate data)\n  const [reserves, setReserves] = useState<MarketInfo[]>([]);\n\n  // ref for refresh interval\n  const refreshInterval = useRef<number | null>(null);\n\n  useEffect(() => {\n    const contract = new rari.web3.eth.Contract(\n      LendingPool.abi,\n      LendingPool.address\n    );\n\n    // fetch list of token addresses\n    async function getReserves() {\n      // get list of token addresses\n      const tokenList: string[] = await contract.methods\n        .getReservesList()\n        .call();\n\n      // grab reserve data asynchronously\n      let reservesData: MarketInfo[] = [];\n      await Promise.all(\n        tokenList.map(async (address) => {\n          reservesData.push({\n            tokenAddress: address,\n            rates: await fetchReserveData(address, rari.web3),\n          });\n        })\n      );\n\n      // sort reserves according to tokenList order\n      // TODO: possibly remove this, as it may no\n      // longer be necessary if the sorting happens\n      // in InterestRatesView\n      reservesData.sort(\n        (a, b) =>\n          tokenList.indexOf(a.tokenAddress) - tokenList.indexOf(b.tokenAddress)\n      );\n\n      reservesData = reservesData.map((reserve) => {\n        // Aave lists ETH under WETH address, so we have\n        // to map the WETH address to the ETH dummy address\n        if (reserve.tokenAddress === WETH_TOKEN_ADDRESS)\n          reserve.tokenAddress = ETH_TOKEN_DATA.address;\n\n        return reserve;\n      });\n\n      setReserves(reservesData);\n    }\n\n    getReserves().then(() => {\n      refreshInterval.current = window.setInterval(getReserves, 5000);\n    });\n\n    // clear refreshInterval on unmount (if initialized)\n    return () => {\n      window.clearInterval(refreshInterval.current || -1);\n    };\n  }, [rari.web3, setReserves]);\n\n  return reserves;\n}\n\nasync function fetchReserveData(\n  assetAddress: string,\n  web3: Web3\n): Promise<InterestRatesType> {\n  // init LendingPool\n  const contract = new web3.eth.Contract(LendingPool.abi, LendingPool.address);\n\n  // get reserve data from LendingPool\n  const reserveData = await contract.methods\n    .getReserveData(assetAddress)\n    .call();\n\n  // get lending and borrowing rates (converting from ray [1e27])\n  const lendingRate = reserveData.currentLiquidityRate / 1e27;\n  const borrowingRate = reserveData.currentVariableBorrowRate / 1e27;\n\n  return { lending: lendingRate, borrowing: borrowingRate };\n}\n"
  },
  {
    "path": "src/hooks/interestRates/compound/CErc20.ts",
    "content": "// Types\nimport { AbiItem } from \"web3-utils\";\n\n// CErc20 contract ABI\nconst abi: AbiItem[] = require(\"./contracts/CErc20.json\");\n\nconst CErc20 = { abi };\n\nexport default CErc20;\n"
  },
  {
    "path": "src/hooks/interestRates/compound/contracts/CErc20.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"cashPrior\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"interestAccumulated\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"borrowIndex\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"totalBorrows\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"AccrueInterest\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"borrower\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"borrowAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"accountBorrows\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"totalBorrows\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Borrow\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"error\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"info\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"detail\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Failure\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"liquidator\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"borrower\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"repayAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"cTokenCollateral\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"seizeTokens\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"LiquidateBorrow\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"minter\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"mintAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"mintTokens\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Mint\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"oldAdmin\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAdmin\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewAdmin\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"oldComptroller\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"newComptroller\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewComptroller\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"oldInterestRateModel\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"newInterestRateModel\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewMarketInterestRateModel\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"oldPendingAdmin\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newPendingAdmin\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewPendingAdmin\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"oldReserveFactorMantissa\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"newReserveFactorMantissa\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"NewReserveFactor\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"redeemer\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"redeemAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"redeemTokens\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Redeem\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"payer\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"borrower\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"repayAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"accountBorrows\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"totalBorrows\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"RepayBorrow\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"benefactor\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"addAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"newTotalReserves\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"ReservesAdded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"admin\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"reduceAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"newTotalReserves\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"ReservesReduced\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"_acceptAdmin\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"addAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"_addReserves\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"reduceAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"_reduceReserves\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"newComptroller\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"_setComptroller\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"newInterestRateModel\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"_setInterestRateModel\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newPendingAdmin\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"_setPendingAdmin\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"newReserveFactorMantissa\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"_setReserveFactor\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"accrualBlockNumber\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"accrueInterest\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"admin\",\n    \"outputs\": [\n      { \"internalType\": \"address payable\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOfUnderlying\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"borrowAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"borrow\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"borrowBalanceCurrent\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"borrowBalanceStored\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"borrowIndex\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"borrowRatePerBlock\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"comptroller\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"exchangeRateCurrent\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"exchangeRateStored\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"getAccountSnapshot\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getCash\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"underlying_\", \"type\": \"address\" },\n      {\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"comptroller_\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"interestRateModel_\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"initialExchangeRateMantissa_\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"string\", \"name\": \"name_\", \"type\": \"string\" },\n      { \"internalType\": \"string\", \"name\": \"symbol_\", \"type\": \"string\" },\n      { \"internalType\": \"uint8\", \"name\": \"decimals_\", \"type\": \"uint8\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"comptroller_\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"interestRateModel_\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"initialExchangeRateMantissa_\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"string\", \"name\": \"name_\", \"type\": \"string\" },\n      { \"internalType\": \"string\", \"name\": \"symbol_\", \"type\": \"string\" },\n      { \"internalType\": \"uint8\", \"name\": \"decimals_\", \"type\": \"uint8\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"interestRateModel\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isCToken\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"borrower\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"repayAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"contract CTokenInterface\",\n        \"name\": \"cTokenCollateral\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"liquidateBorrow\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"mintAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"mint\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"pendingAdmin\",\n    \"outputs\": [\n      { \"internalType\": \"address payable\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"redeemTokens\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"redeem\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"redeemAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"redeemUnderlying\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"repayAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"repayBorrow\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"borrower\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"repayAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"repayBorrowBehalf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"reserveFactorMantissa\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"liquidator\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"borrower\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"seizeTokens\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"seize\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"supplyRatePerBlock\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract EIP20NonStandardInterface\",\n        \"name\": \"token\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"sweepToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalBorrows\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"totalBorrowsCurrent\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalReserves\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"dst\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"src\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"dst\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"underlying\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/hooks/interestRates/compound/useCompoundMarkets.ts",
    "content": "import { useEffect, useState, useRef } from \"react\";\n\n// Hooks\nimport { useRari } from \"context/RariContext\";\n\n// ABIs\nimport CErc20 from \"./CErc20\";\n\n// Types\nimport { MarketInfo } from \"../types\";\n\n// Util/Misc\nimport { ETH_TOKEN_DATA } from \"hooks/useTokenData\";\n\ntype CTokenData = {\n  cTokenAddress: string; // address of underlying token\n  marketInfo: MarketInfo;\n};\n\n// I replaced a call to the getAllMarkets() method in\n// Comptroller because it was returning data that\n// got in the way of getting interest rates, namely\n// the duplicate \"cWBTC\" symbol caused by the existence\n// of cWBTC and cWBTC2. Unfortunately, the cWBTC2 has the\n// same symbol as its predecessor. For that reason, for\n// now, I will be using this hard-coded list of cTokens.\nconst CTOKEN_LIST = [\n  \"0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E\", // cBAT\n  \"0x70e36f6BF80a52b3B46b3aF8e106CC0ed743E8e4\", // cCOMP\n  \"0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643\", // cDAI\n  \"0xF5DCe57282A584D2746FaF1593d3121Fcac444dC\", // cSAI\n  \"0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5\", // cETH\n  \"0xFAce851a4921ce59e912d19329929CE6da6EB0c7\", // cLINK\n  \"0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1\", // cREP\n  \"0x12392F67bdf24faE0AF363c24aC620a2f67DAd86\", // cTUSD\n  \"0x35A18000230DA775CAc24873d00Ff85BccdeD550\", // cUNI\n  \"0x39AA39c021dfbaE8faC545936693aC917d5E7563\", // cUSDC\n  \"0xf650C3d88D12dB855b8bf7D11Be6C55A4e07dCC9\", // cUSDT\n  \"0xccF4429DB6322D5C611ee964527D42E5d685DD6a\", // cWBTC2\n  \"0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407\", // cZRX\n];\n\nexport default function useCompoundMarkets() {\n  const { rari } = useRari();\n\n  // holds all cToken markets\n  const [markets, setMarkets] = useState<MarketInfo[]>([]);\n\n  // ref for refresh interval\n  const refreshInterval = useRef<number | null>(null);\n\n  useEffect(() => {\n    async function getMarkets() {\n      // get all markets from Comptroller\n\n      // asynchronously fetch list of underlying tokens and supply/borrow rates\n      const marketData: CTokenData[] = [];\n      await Promise.all(\n        CTOKEN_LIST.map(async (cTokenAddress) => {\n          const cToken = new rari.web3.eth.Contract(CErc20.abi, cTokenAddress);\n\n          const symbol: string = await cToken.methods.symbol().call();\n          const supplyRate: number = await cToken.methods\n            .supplyRatePerBlock()\n            .call();\n          const borrowRate: number = await cToken.methods\n            .borrowRatePerBlock()\n            .call();\n          // for cETH, return dummy ETH \"address\" (0x000000...)\n          // otherwise, use address from underlying()\n          const underlyingAddress: string =\n            symbol === \"cETH\"\n              ? ETH_TOKEN_DATA.address\n              : ((await cToken.methods.underlying().call()) as string);\n\n          // add underlying token address & lend/borrow rates to list\n          marketData.push({\n            cTokenAddress, // address of original cToken\n            marketInfo: {\n              tokenAddress: underlyingAddress,\n              rates: {\n                lending: convertRatePerBlockToAPY(supplyRate),\n                borrowing: convertRatePerBlockToAPY(borrowRate),\n              },\n            },\n          });\n        })\n      );\n\n      // sort market data according to cToken list\n      marketData.sort(\n        (a, b) =>\n          CTOKEN_LIST.indexOf(a.cTokenAddress) -\n          CTOKEN_LIST.indexOf(b.cTokenAddress)\n      );\n\n      // set markets in state\n      setMarkets(marketData.map((data) => data.marketInfo));\n    }\n\n    getMarkets().then(() => {\n      refreshInterval.current = window.setInterval(getMarkets, 5000);\n    });\n\n    // clear refreshInterval on unmount (if initialized)\n    return () => {\n      window.clearInterval(refreshInterval.current || -1);\n    };\n  }, [rari.web3]);\n\n  return markets;\n}\n\n// rate expressed in mantissa\nfunction convertRatePerBlockToAPY(rate: number) {\n  // Compound uses 6570 blocks per day:\n  // (see https://compound.finance/docs#protocol-math)\n  return (1 + (rate * 6570) / 1e18) ** 365 - 1;\n}\n"
  },
  {
    "path": "src/hooks/interestRates/fuse/useFuseMarkets.ts",
    "content": "import { useEffect, useState } from \"react\";\n\n// Hooks\nimport { useRari } from \"context/RariContext\";\nimport { useFusePools } from \"hooks/fuse/useFusePools\";\n\n// Util\nimport { fetchFusePoolData, FusePoolData } from \"utils/fetchFusePoolData\";\nimport { convertMantissaToAPY } from \"utils/apyUtils\";\n\n// Types\nimport { MarketInfo } from \"../types\";\n\ntype FuseMarket = {\n  [id: string]: MarketInfo[];\n};\n\nexport default function useFuseMarkets() {\n  const { rari, fuse, address } = useRari();\n  const { pools } = useFusePools();\n  const [markets, setMarkets] = useState<FuseMarket>({});\n\n  useEffect(() => {\n    async function getAllFusePoolData() {\n      let marketData: FuseMarket = {};\n\n      if (pools) {\n        await Promise.all(\n          pools.map(async (pool) => {\n            marketData[pool.id.toString()] = [];\n\n            try {\n              // fetch fuse pool data\n              const poolData = (await fetchFusePoolData(\n                pool.id.toString(), // type incorrectly believes pool.id to be number\n                address,\n                fuse,\n                rari\n              )) as FusePoolData;\n\n              // add market info\n              poolData.assets.forEach((asset) => {\n                marketData[pool.id.toString()].push({\n                  tokenAddress: asset.underlyingToken,\n                  rates: {\n                    lending:\n                      convertMantissaToAPY(asset.supplyRatePerBlock, 365) / 100,\n                    borrowing:\n                      convertMantissaToAPY(asset.borrowRatePerBlock, 365) / 100,\n                  },\n                });\n              });\n            } catch (e) {\n              // replace with empty array in case of error\n              marketData[pool.id.toString()] = [];\n            }\n          })\n        );\n\n        // set data in state\n        setMarkets(marketData);\n      }\n    }\n\n    getAllFusePoolData();\n  }, [pools, rari, fuse, address]);\n\n  return { pools, markets };\n}\n"
  },
  {
    "path": "src/hooks/interestRates/types.ts",
    "content": "export type InterestRatesType = {\n  lending: number;\n  borrowing: number;\n};\n\nexport type MarketInfo = {\n  tokenAddress: string;\n  rates: InterestRatesType;\n};\n"
  },
  {
    "path": "src/hooks/pool2/usePool2APR.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\n\nexport const usePool2APR = () => {\n  const { rari } = useRari();\n\n  const { data: earned } = useQuery(\"pool2APR\", async () => {\n    const blockNumber = await rari.web3.eth.getBlockNumber();\n    const tvl = await rari.governance.rgt.sushiSwapDistributions.totalStakedUsd();\n    return (\n      parseInt(\n        (\n          await rari.governance.rgt.sushiSwapDistributions.getCurrentApr(\n            blockNumber,\n            tvl\n          )\n        ).toString()\n      ) / 1e16\n    ).toFixed(2);\n  });\n\n  return earned;\n};\n"
  },
  {
    "path": "src/hooks/pool2/usePool2Balance.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport Rari from \"rari-sdk/index\";\nimport Fuse from \"fuse-sdk\";\n\nexport const fetchPool2Balance = async ({\n  rari,\n  fuse,\n  address,\n}: {\n  rari: Rari;\n  fuse: Fuse;\n  address: string;\n}) => {\n  const SLP = parseFloat(\n    rari.web3.utils.fromWei(\n      await rari.governance.rgt.sushiSwapDistributions.stakingBalanceOf(address)\n    )\n  );\n\n  const balanceUSDBN = await rari.governance.rgt.sushiSwapDistributions.usdStakingBalanceOf(\n    address\n  );\n  const balanceUSD = parseFloat(balanceUSDBN.toString()) / 10 ** 18;\n\n  const {\n    eth: _eth,\n    rgt: _rgt,\n  } = await rari.governance.rgt.sushiSwapDistributions.stakedReservesOf(\n    address\n  );\n\n  return {\n    SLP,\n    balanceUSD,\n    hasDeposited: SLP > 0,\n    // @ts-ignore\n    eth: _eth.toString() / 1e18,\n    // @ts-ignore\n    rgt: _rgt.toString() / 1e18,\n  };\n};\n\nexport const usePool2Balance = () => {\n  const { rari, fuse, address } = useRari();\n\n  const { data: balance } = useQuery(\n    address + \" pool2Balance\",\n    async () => await fetchPool2Balance({ rari, fuse, address })\n  );\n\n  return balance;\n};\n"
  },
  {
    "path": "src/hooks/pool2/usePool2TotalStaked.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\n\nexport const usePool2TotalStaked = () => {\n  const { rari } = useRari();\n\n  const { data: totalStaked } = useQuery(\"pool2TotalStaked\", async () => {\n    return parseFloat(\n      rari.web3.utils.fromWei(\n        await rari.governance.rgt.sushiSwapDistributions.totalStakedUsd()\n      )\n    );\n  });\n\n  return totalStaked;\n};\n"
  },
  {
    "path": "src/hooks/pool2/usePool2UnclaimedRGT.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport Rari from \"rari-sdk/index\";\n\nexport const fetchPool2UnclaimedRGT = async ({\n  rari,\n  address,\n}: {\n  rari: Rari;\n  address: string;\n}) => {\n  return parseFloat(\n    rari.web3.utils.fromWei(\n      await rari.governance.rgt.sushiSwapDistributions.getUnclaimed(address)\n    )\n  );\n};\n\nexport const usePool2UnclaimedRGT = () => {\n  const { rari, address } = useRari();\n\n  const { data: earned } = useQuery(\n    address + \" pool2Unclaimed RGT\",\n    async () => await fetchPool2UnclaimedRGT({ rari, address })\n  );\n\n  return earned;\n};\n"
  },
  {
    "path": "src/hooks/pool2/useSushiswapRewards.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\n\nexport const useHasSushiswapRewardsStarted = () => {\n  const { rari } = useRari();\n\n  const { data: hasStarted } = useQuery(\n    \"hasSushiswapRewardsStarted\",\n    async () => {\n      const block = await rari.web3.eth.getBlockNumber();\n\n      const startingBlock =\n        rari.governance.rgt.sushiSwapDistributions.DISTRIBUTION_START_BLOCK;\n\n      return block >= startingBlock;\n    }\n  );\n\n  return hasStarted;\n};\n"
  },
  {
    "path": "src/hooks/rewards/useClaimable.ts",
    "content": "import { useMemo } from \"react\";\nimport {\n  UnclaimedReward,\n  useUnclaimedFuseRewards,\n} from \"./useUnclaimedFuseRewards\";\nimport { useUnclaimedRGT } from \"./useUnclaimedRGT\";\n\n/**\n *\n * Claimable Rewards won't tell you the APY, only the claimable amt.\n *\n * **/\n\nexport type ClaimMode = \"pool2\" | \"private\" | \"yieldagg\" | \"fuse\";\n\nexport interface UseClaimableReturn {\n  unclaimedRGT?: number;\n  privateUnclaimedRGT?: number;\n  pool2UnclaimedRGT?: number;\n  unclaimedFuseRewards?: UnclaimedReward[];\n  hasClaimableRewards: boolean;\n  allClaimable: GenericClaimableReward[];\n  allRewardsTokens: string[];\n}\n\nexport interface GenericClaimableReward {\n  mode: ClaimMode;\n  unclaimed: UnclaimedReward;\n}\n\n// 1 type of reward = RGT rewards\n\n// 2nd type of reward = FUse Rewards\nexport type FuseReward = {\n  comptroller: string;\n  rewardsDistibutors?: string[]; //addresses of RDs\n  unclaimedBalancesForPool: CTokenUnclaimedForPool[];\n};\n\ninterface CTokenUnclaimedForPool {}\n\nconst RGT = \"0xd291e7a03283640fdc51b121ac401383a46cc623\";\n\nconst DUST_THRESHOLD = 0;\n\nconst amountIsNotDust = (amount: number, decimals = 18) => {\n  return amount / 10 ** decimals > DUST_THRESHOLD;\n};\n\nexport function useClaimable(showPrivate: boolean = false): UseClaimableReturn {\n  const { unclaimed: unclaimedFuseRewards, rewardTokensMap } =\n    useUnclaimedFuseRewards();\n\n  const { unclaimedRGT, privateUnclaimedRGT, pool2UnclaimedRGT } =\n    useUnclaimedRGT();\n\n  // console.log({ unclaimedRGT, privateUnclaimedRGT, pool2UnclaimedRGT });\n\n  const hasClaimableRewards: boolean = useMemo(() => {\n    if (\n      (!!pool2UnclaimedRGT && amountIsNotDust(pool2UnclaimedRGT)) ||\n      (!!privateUnclaimedRGT && amountIsNotDust(privateUnclaimedRGT)) ||\n      (!!unclaimedRGT && amountIsNotDust(DUST_THRESHOLD))\n    )\n      return true;\n\n    // If any unclaimed value is greater than 0 we have claimables\n    if (unclaimedFuseRewards.length) return true;\n\n    return false;\n  }, [\n    pool2UnclaimedRGT,\n    privateUnclaimedRGT,\n    unclaimedRGT,\n    unclaimedFuseRewards,\n  ]);\n\n  console.log({ unclaimedFuseRewards });\n\n  // Construct a list of claimable rewards across reward types\n  const allClaimable: GenericClaimableReward[] = useMemo(() => {\n    // Fuse Rewards\n    const fuseRewards: GenericClaimableReward[] =\n      unclaimedFuseRewards?.map((unclaimedFuseReward) => ({\n        mode: \"fuse\",\n        unclaimed: unclaimedFuseReward,\n      })) ?? [];\n\n    console.log({ unclaimedFuseRewards });\n\n    // RGT Rewards\n    const rgtRewards: GenericClaimableReward[] = [];\n\n    const constructReward = (mode: ClaimMode, amount: number) => {\n      const reward: GenericClaimableReward = {\n        mode,\n        unclaimed: {\n          rewardToken: RGT,\n          unclaimed: amount,\n        },\n      };\n      return reward;\n    };\n\n    if (\n      showPrivate &&\n      privateUnclaimedRGT &&\n      amountIsNotDust(privateUnclaimedRGT)\n    )\n      rgtRewards.push(constructReward(\"private\", privateUnclaimedRGT));\n    if (unclaimedRGT && amountIsNotDust(unclaimedRGT))\n      rgtRewards.push(constructReward(\"yieldagg\", unclaimedRGT));\n    if (pool2UnclaimedRGT && amountIsNotDust(pool2UnclaimedRGT))\n      rgtRewards.push(constructReward(\"pool2\", pool2UnclaimedRGT));\n\n    return [...rgtRewards, ...fuseRewards];\n  }, [\n    showPrivate,\n    unclaimedFuseRewards,\n    unclaimedRGT,\n    privateUnclaimedRGT,\n    pool2UnclaimedRGT,\n  ]);\n\n  const allRewardsTokens = useMemo(\n    () => [\n      ...new Set(\n        allClaimable.reduce((arr: string[], claimable) => {\n          return [...arr, claimable.unclaimed.rewardToken];\n        }, [])\n      ),\n    ],\n    [allClaimable]\n  );\n\n  return {\n    unclaimedRGT,\n    privateUnclaimedRGT,\n    pool2UnclaimedRGT,\n    unclaimedFuseRewards,\n    hasClaimableRewards,\n    allClaimable,\n    allRewardsTokens,\n  };\n}\n"
  },
  {
    "path": "src/hooks/rewards/usePoolIncentives.ts",
    "content": "import { createCToken } from \"utils/createComptroller\";\nimport { useRari } from \"context/RariContext\";\nimport { TokensDataMap, useTokensDataAsMap } from \"hooks/useTokenData\";\nimport { useMemo } from \"react\";\nimport { useQuery } from \"react-query\";\nimport {\n  CTokenRewardsDistributorIncentivesWithRatesMap,\n  useIncentivesWithRates,\n} from \"./useRewardAPY\";\n\nexport interface CTokenRewardsDistributorIncentives {\n  rewardsDistributorAddress: string;\n  rewardToken: string;\n  borrowSpeed: number;\n  supplySpeed: number;\n}\n\nexport interface CTokenIncentivesMap {\n  [cTokenAddress: string]: CTokenRewardsDistributorIncentives[];\n}\n\n// Maps a rewardsDistributor to an array of all its ctokenaddresses\nexport interface RewardsDistributorCTokensMap {\n  [rewardsDistributorAddress: string]: string[];\n}\n\nexport interface IncentivesData {\n  hasIncentives: boolean;\n  incentives: CTokenRewardsDistributorIncentivesWithRatesMap;\n  rewardsDistributorCtokens: RewardsDistributorCTokensMap;\n  rewardTokensData: TokensDataMap;\n}\n\nexport function usePoolIncentives(comptroller?: string): IncentivesData {\n  const { fuse } = useRari();\n\n  // 1. Make Call to FusePoolLens\n  const { data } = useQuery(\n    \"Pool incentives for comptroller \" + comptroller,\n    async () => {\n      if (!comptroller) return [];\n\n      const result = await fuse.contracts.FusePoolLensSecondary.methods\n        .getRewardSpeedsByPool(comptroller)\n        .call();\n\n      return result;\n    }\n  );\n\n  // 2. Destructure data from Contract call\n  const cTokens: string[] = data?.[0] ?? [];\n  const rewardsDistributors: string[] = data?.[1] ?? [];\n  const rewardTokens: string[] = data?.[2] ?? [];\n  const supplySpeeds: string[][] = data?.[3] ?? [];\n  const borrowSpeeds: string[][] = data?.[4] ?? [];\n\n  const rewardTokensData = useTokensDataAsMap(rewardTokens);\n\n  // 3. Iterate through data\n  ////  rewardsDistributors & rewardTokens are ordered by matching indexes\n  ////  supplySpeeds/borrowSpeeds is a 2d array where the first level is ordered by matching indices with `cTokens`, and each nested array has matching indices with `rewardDistributors`;\n  const [incentives, rewardsDistributorCtokens]: [\n    CTokenIncentivesMap,\n    RewardsDistributorCTokensMap\n  ] = useMemo(() => {\n    const poolIncentives: CTokenIncentivesMap = {};\n    const rewardsDistributorCTokensMap: RewardsDistributorCTokensMap = {};\n\n    // Loop through the data and construct the final object\n    for (let i = 0; i < cTokens.length; i++) {\n      // i contains the index of the current cToken\n      const cTokenAddress = cTokens[i];\n      const distributorSupplySpeedsForCToken: string[] = supplySpeeds[i]; //this a 1d array of\n      const distributorBorrowSpeedsForCToken: string[] = borrowSpeeds[i];\n\n      for (let j = 0; j < distributorBorrowSpeedsForCToken.length; j++) {\n        // j contains the index of the current rewardsDistributor.\n        // Even if a CToken has no RewardsDistributor assigned to it, there will still be a value in this array for it. We will handle this discrepancy below\n        const rewardsDistributorAddress = rewardsDistributors[j];\n        if (isRDExcluded(rewardsDistributorAddress)) {\n          continue;\n        }\n        const rewardToken = rewardTokens[j];\n        const supplySpeed = parseFloat(distributorSupplySpeedsForCToken[j]);\n        const borrowSpeed = parseFloat(distributorBorrowSpeedsForCToken[j]);\n\n        const obj: CTokenRewardsDistributorIncentives = {\n          supplySpeed,\n          borrowSpeed,\n          rewardToken,\n          rewardsDistributorAddress,\n        };\n\n        // if a Ctoken has no supply or borrow speed set, skip adding it\n        if (supplySpeed || borrowSpeed) {\n          if (!poolIncentives[cTokenAddress]) {\n            // Update the Mapping of CToken => CTokenRewardsDistributorIncentives[]\n            poolIncentives[cTokenAddress] = [obj];\n          } else poolIncentives[cTokenAddress].push(obj);\n\n          //   Update the map of rewardsDistributorAddress => CToken[]\n          if (!rewardsDistributorCTokensMap[rewardsDistributorAddress]) {\n            rewardsDistributorCTokensMap[rewardsDistributorAddress] = [\n              cTokenAddress,\n            ];\n          } else\n            rewardsDistributorCTokensMap[rewardsDistributorAddress].push(\n              cTokenAddress\n            );\n        }\n      }\n    }\n\n    return [poolIncentives, rewardsDistributorCTokensMap];\n  }, [cTokens, rewardsDistributors, rewardTokens, supplySpeeds, borrowSpeeds]);\n\n  const hasIncentives = useMemo(\n    () => !!Object.keys(incentives).length,\n    [incentives]\n  );\n\n  const incentivesWithRates = useIncentivesWithRates(\n    incentives,\n    rewardTokens,\n    rewardTokensData,\n    comptroller!\n  );\n\n  if (hasIncentives) {\n    console.log({ incentives });\n  }\n\n  return {\n    hasIncentives,\n    incentives: incentivesWithRates,\n    rewardTokensData,\n    rewardsDistributorCtokens,\n  };\n}\n\nexport interface CTokensUnderlyingMap {\n  [cTokenAddr: string]: string;\n}\n\nexport const useCTokensUnderlying = (\n  cTokenAddrs: string[]\n): CTokensUnderlyingMap => {\n  const { fuse } = useRari();\n  const { data: cTokensUnderlying } = useQuery(\n    \"CTokens underlying for \" + cTokenAddrs?.join(\",\"),\n    async () => {\n      const _map: CTokensUnderlyingMap = {};\n\n      await Promise.all(\n        cTokenAddrs.map(async (cTokenAddr) => {\n          const ctokenInstance = createCToken(fuse, cTokenAddr);\n          const underlying = await ctokenInstance.methods.underlying().call();\n          _map[cTokenAddr] = underlying;\n        })\n      );\n\n      return _map;\n    }\n  );\n\n  return cTokensUnderlying ?? {};\n};\n\nconst rdExcludeList = [\n  \"0x12336b4c2d7884AA9BBB86dC00cf202BdEc355d3\",\n  \"0xeb06873efBceb36f442ece56de618E073AfCA450\" // TXJP RD \n];\n\nexport const isRDExcluded = (rD: string) => rdExcludeList.includes(rD);\nexport const stripExcludedRDs = (RDs: string[]) =>\n  RDs.filter((rd) => !rdExcludeList.includes(rd));\n"
  },
  {
    "path": "src/hooks/rewards/useRewardAPY.ts",
    "content": "// for supply-side rewards apy:\n// export const\n\nimport { useQuery } from \"react-query\";\nimport {\n  ETH_TOKEN_DATA,\n  TokensDataMap,\n  useTokensDataAsMap,\n} from \"hooks/useTokenData\";\nimport {\n  createComptroller,\n  createCToken,\n  createERC20,\n  createMasterPriceOracle,\n  createOracle,\n} from \"utils/createComptroller\";\nimport Fuse from \"fuse-sdk\";\nimport { useRari } from \"context/RariContext\";\nimport { USDPricedFuseAsset } from \"utils/fetchFusePoolData\";\nimport { toBN } from \"utils/bigUtils\";\nimport {\n  CTokenIncentivesMap,\n  CTokenRewardsDistributorIncentives,\n} from \"./usePoolIncentives\";\nimport { convertMantissaToAPR, convertMantissaToAPY } from \"utils/apyUtils\";\n\n// ( ( rewardSupplySpeed * rewardEthPrice ) / ( underlyingTotalSupply * underlyingEthPrice / 1e18 / 1e18 ) )\n// (\n//     rewardSpeed: number,  // getRewardsSpeedsByPool\n//     rewardEthPrice: number,  // useAssetPricesInEth + the rewardtoken -- price of the rewardToken in ETH\n//     underlyingTotalSupply: number, // (CToken.totalSupply() * CToken.exchangeRateCurrent())\n//     underlyingEthPrice: number // useAssetPricesInEth + the CToken underlying price in ETH\n// )\n\nexport interface CTokenRewardsDistributorIncentivesWithRates\n  extends CTokenRewardsDistributorIncentives {\n  supplyAPY: number;\n  borrowAPY: number;\n  supplyAPR: number;\n  borrowAPR: number;\n}\n\nexport interface CTokenRewardsDistributorIncentivesWithRatesMap {\n  [cTokenAddress: string]: CTokenRewardsDistributorIncentivesWithRates[];\n}\n\ninterface RewardsDataForMantissa {\n  cTokenAddress: string;\n  rewardSpeed: number;\n  rewardEthPrice: number;\n  underlyingTotalSupply: number;\n  underlyingEthPrice: number;\n  rewardDecimals: number;\n  underlyingDecimals: number;\n}\n\nexport const useIncentivesWithRates = (\n  incentives: CTokenIncentivesMap,\n  rewardTokenAddrs: string[],\n  rewardTokensData: TokensDataMap,\n  comptroller: string\n) => {\n  // this is what we return\n  const incentivesWithRates: CTokenRewardsDistributorIncentivesWithRatesMap =\n    {};\n\n  const ctokenAddrs = Object.keys(incentives);\n\n  const cTokensDataMap = useCTokensDataForRewards(ctokenAddrs);\n\n  // return speed;\n\n  // Reduce CTokens Array to Underlying, using same indices\n  const underlyings = Object.keys(cTokensDataMap).map(\n    (key) => cTokensDataMap[key].underlyingToken\n  );\n\n  // const rewardTokens = Object.keys(ctokensRewardsMap).map(\n  //   (key) => ctokensRewardsMap[key].rewardTOk\n  // );\n\n  // Then we need to get underlying prices\n  const tokenPrices = useAssetPricesInEth(\n    [...underlyings, ...rewardTokenAddrs],\n    comptroller\n  );\n  // console.log({ incentives, cTokensDataMap, underlyings, tokenPrices });\n\n  // This shit is bananas\n  if (!tokenPrices || !ctokenAddrs) return {};\n\n  // Each CToken has an array of incentives data\n  for (let cTokenAddress of ctokenAddrs) {\n    const incentivesForCToken = incentives[cTokenAddress];\n    const cTokenData = cTokensDataMap[cTokenAddress];\n\n    const incentivesForCTokenWithRates: CTokenRewardsDistributorIncentivesWithRates[] =\n      incentivesForCToken.length && !!cTokenData\n        ? incentivesForCToken.map((incentiveForCToken) => {\n            const { rewardToken, borrowSpeed, supplySpeed } =\n              incentiveForCToken;\n\n            const supplyMantissaData: RewardsDataForMantissa = {\n              cTokenAddress,\n              rewardSpeed: supplySpeed,\n              rewardEthPrice: tokenPrices.tokenPrices[rewardToken].ethPrice,\n              underlyingTotalSupply: cTokenData.totalSupply,\n              underlyingEthPrice:\n                tokenPrices.tokenPrices[cTokenData.underlyingToken].ethPrice,\n              rewardDecimals: rewardTokensData[rewardToken].decimals ?? 18,\n              underlyingDecimals: cTokenData.underlyingDecimals,\n            };\n\n            const borrowMantissaData: RewardsDataForMantissa = {\n              cTokenAddress,\n              rewardSpeed: borrowSpeed,\n              rewardEthPrice: tokenPrices.tokenPrices[rewardToken].ethPrice,\n              underlyingTotalSupply: cTokenData.totalSupply,\n              underlyingEthPrice:\n                tokenPrices.tokenPrices[cTokenData.underlyingToken].ethPrice,\n              rewardDecimals: rewardTokensData[rewardToken].decimals ?? 18,\n              underlyingDecimals: cTokenData.underlyingDecimals,\n            };\n\n            const supplyMantissa = constructMantissa(\n              supplyMantissaData.rewardSpeed,\n              supplyMantissaData.rewardEthPrice,\n              supplyMantissaData.underlyingTotalSupply,\n              supplyMantissaData.underlyingEthPrice,\n              supplyMantissaData.rewardDecimals,\n              supplyMantissaData.underlyingDecimals\n            );\n\n            const borrowMantissa = constructMantissa(\n              borrowMantissaData.rewardSpeed,\n              borrowMantissaData.rewardEthPrice,\n              borrowMantissaData.underlyingTotalSupply,\n              borrowMantissaData.underlyingEthPrice,\n              borrowMantissaData.rewardDecimals,\n              borrowMantissaData.underlyingDecimals\n            );\n\n            const supplyAPY = convertMantissaToAPY(supplyMantissa, 365);\n            const supplyAPR = convertMantissaToAPR(supplyMantissa);\n            const borrowAPY = convertMantissaToAPY(borrowMantissa, 365);\n            const borrowAPR = convertMantissaToAPR(borrowMantissa);\n\n            const cTokenIncentiveDataWithAPYs = {\n              ...incentiveForCToken,\n              supplyAPY,\n              supplyAPR,\n              borrowAPY,\n              borrowAPR,\n            };\n\n            return cTokenIncentiveDataWithAPYs;\n          })\n        : [];\n\n    // this is what we return\n    incentivesWithRates[cTokenAddress] = incentivesForCTokenWithRates;\n  }\n\n  return incentivesWithRates;\n};\n\nconst constructMantissa = (\n  rewardSpeed: number,\n  rewardEthPrice: number,\n  underlyingTotalSupply: number,\n  underlyingEthPrice: number,\n  rewardDecimals: number = 18,\n  underlyingDecimals: number = 18\n) => {\n  const newRewardETHPerBlock =\n    rewardEthPrice * (rewardSpeed / 10 ** rewardDecimals);\n\n  const newUnderlyingTotalSupplyETH =\n    underlyingEthPrice * (underlyingTotalSupply / 10 ** underlyingDecimals);\n\n  const newMantissa =\n    (newRewardETHPerBlock * 1e18) / newUnderlyingTotalSupplyETH;\n\n  return newMantissa;\n};\n\nexport interface CTokensDataForRewardsMap {\n  [cTokenAddr: string]: CTokenDataForRewards;\n}\n\nexport type CTokenDataForRewards = Pick<\n  USDPricedFuseAsset,\n  | \"underlyingToken\"\n  | \"cToken\"\n  | \"totalSupply\"\n  | \"underlyingPrice\"\n  | \"underlyingDecimals\"\n>;\n\nexport const useCTokensDataForRewards = (\n  cTokenAddrs: string[]\n): CTokensDataForRewardsMap => {\n  const { fuse } = useRari();\n  const { data: cTokensMap } = useQuery(\n    \"CTokens underlying for \" + cTokenAddrs?.join(\",\"),\n    async () => {\n      const _map: CTokensDataForRewardsMap = {};\n\n      const cTokensArray = await Promise.all(\n        cTokenAddrs.map(async (cTokenAddr) => {\n          const ctokenInstance = createCToken(fuse, cTokenAddr);\n\n          const underlying = await ctokenInstance.methods.underlying().call();\n\n          const underlyingInstance = createERC20(fuse, underlying);\n\n          const underlyingDecimals = await underlyingInstance.methods\n            .decimals()\n            .call();\n\n          const cTokenTotalSupply = await ctokenInstance.methods\n            .totalSupply()\n            .call();\n\n          const exchangeRateCurrent = await ctokenInstance.methods\n            .exchangeRateCurrent()\n            .call();\n\n          const underlyingTotalSupply2 =\n            (parseFloat(cTokenTotalSupply) * parseFloat(exchangeRateCurrent)) /\n            1e18;\n\n          // const underlyingTotalSupply =\n          //   parseFloat(\n          //     toBN(cTokenTotalSupply).mul(toBN(exchangeRateCurrent)).toString()\n          //   ) /\n          //   10 ** 18;\n\n          // console.log({\n          //   cTokenAddr,\n          //   cTokenTotalSupply,\n          //   exchangeRateCurrent,\n          //   underlyingTotalSupply2,\n          // });\n\n          const obj: CTokenDataForRewards = {\n            underlyingToken: underlying,\n            underlyingPrice: 0,\n            cToken: cTokenAddr,\n            totalSupply: underlyingTotalSupply2 ?? 0,\n            underlyingDecimals: parseFloat(underlyingDecimals),\n          };\n\n          _map[cTokenAddr] = obj;\n\n          return obj;\n        })\n      );\n\n      return _map;\n    }\n  );\n\n  return cTokensMap ?? {};\n};\n\ninterface TokenPricesMap {\n  [x: string]: {\n    ethPrice: number;\n    usdPrice: number;\n  };\n}\n\ninterface TokenPrices {\n  tokenPrices: TokenPricesMap;\n  ethUSDPrice: number;\n}\n\n// Fetches price from pool oracle then from Rari DAO MasterPriceOracle if fail\nexport const getPriceFromOracles = async (\n  tokenAddress: string,\n  comptroller: string,\n  fuse: Fuse\n) => {\n  // Rari MPO\n  const masterPriceOracle = createMasterPriceOracle(fuse);\n\n  // Pool's MPO\n  const comptrollerInstance = createComptroller(comptroller, fuse);\n  const oracleAddress: string = await comptrollerInstance.methods\n    .oracle()\n    .call();\n  // const oracleModel: string | undefined = await fuse.getPriceOracle(oracle);\n  const oracleContract = createOracle(oracleAddress, fuse, \"MasterPriceOracle\");\n\n  let price;\n\n  try {\n    if (tokenAddress === ETH_TOKEN_DATA.address) {\n      price = toBN(1);\n    } else {\n      try {\n        price = await oracleContract.methods.price(tokenAddress).call();\n      } catch {\n        console.log(tokenAddress, \": err fetching price. trying MPO\");\n        price = await masterPriceOracle.methods.price(tokenAddress).call();\n      }\n    }\n  } catch (err) {}\n\n  return price;\n};\n\n// Todo - handle situation where oracle cant find the price\n// Todo 2 - make sure that you are always using the Fuse Pool's oracle and that the Fuse Pool's Oracle supports this asset\nexport const useAssetPricesInEth = (\n  tokenAddresses: string[],\n  comptroller: string\n): TokenPrices | undefined => {\n  const { fuse } = useRari();\n  const masterPriceOracle = createMasterPriceOracle(fuse);\n\n  const tokensData = useTokensDataAsMap(tokenAddresses);\n\n  const { data } = useQuery(\n    \"asset prices for \" +\n      tokenAddresses.join(\",\") +\n      \" \" +\n      Object.keys(tokensData).join(\",\"),\n    async () => {\n      const [ethUSDBN, ...tokenPricesInEth] = await Promise.all([\n        fuse.getEthUsdPriceBN(),\n        ...tokenAddresses.map(\n          async (t) => await getPriceFromOracles(t, comptroller, fuse)\n        ),\n      ]);\n\n      const ethUSDPrice = parseFloat(ethUSDBN.toString()) / 1e18;\n      const tokenUSDPrices: number[] = [];\n\n      // Calc usd prices\n      for (let i = 0; i < tokenAddresses.length; i++) {\n        const priceInEth = parseFloat(tokenPricesInEth[i]);\n        const tokenData = tokensData[tokenAddresses[i]];\n        const decimals = tokenData.decimals;\n\n        const price = (priceInEth / 10 ** (decimals ?? 18)) * ethUSDPrice;\n\n        tokenUSDPrices.push(price);\n      }\n\n      // construct map\n      const tokenPrices: {\n        [x: string]: {\n          ethPrice: number;\n          usdPrice: number;\n        };\n      } = {};\n\n      for (let i = 0; i < tokenAddresses.length; i++) {\n        const tokenAddress = tokenAddresses[i];\n        const usdPrice = tokenUSDPrices[i];\n        const ethPrice = parseFloat(tokenPricesInEth[i]);\n        tokenPrices[tokenAddress] = {\n          ethPrice,\n          usdPrice,\n        };\n      }\n\n      return { tokenPrices, ethUSDPrice };\n    }\n  );\n\n  return data;\n};\n"
  },
  {
    "path": "src/hooks/rewards/useRewardsDistributorsForPool.ts",
    "content": "import { useRari } from \"context/RariContext\";\nimport { useQuery } from \"react-query\";\nimport { createComptroller } from \"utils/createComptroller\";\n\nexport interface RewardsDistributor {\n  address: string;\n  rewardToken: string;\n  admin: string;\n}\n\nexport const useRewardsDistributorsForPool = (\n  comptrollerAddress?: string\n): RewardsDistributor[] => {\n  const { fuse } = useRari();\n\n  const { data, error } = useQuery(\n    comptrollerAddress + \" rewardsDistributors\",\n    async () => {\n      if (!comptrollerAddress) return [];\n      const comptroller = createComptroller(comptrollerAddress, fuse);\n\n      const rewardsDistributors: string[] = await comptroller.methods\n        .getRewardsDistributors()\n        .call();\n\n      console.log({ rewardsDistributors });\n\n      if (!rewardsDistributors.length) return [];\n\n      const distributors: RewardsDistributor[] = await Promise.all(\n        rewardsDistributors.map(async (addr) => {\n          const distributor = new fuse.web3.eth.Contract(\n            JSON.parse(\n              fuse.compoundContracts[\n                \"contracts/RewardsDistributorDelegate.sol:RewardsDistributorDelegate\"\n              ].abi\n            ),\n            addr\n          );\n\n          const ret = {\n            address: addr,\n            rewardToken: await distributor.methods.rewardToken().call(),\n            admin: await await distributor.methods.admin().call(),\n          };\n          return ret;\n        })\n      );\n\n      return distributors;\n    }\n  );\n  return data ?? [];\n};\n"
  },
  {
    "path": "src/hooks/rewards/useUnclaimedFuseRewards.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"../../context/RariContext\";\nimport { createRewardsDistributor } from \"utils/createComptroller\";\nimport { isRDExcluded, stripExcludedRDs } from \"./usePoolIncentives\";\n\nexport interface RewardsDistributorToPoolsMap {\n  [rD: string]: {\n    [comptroller: string]: number;\n  };\n}\n\n/**\n *\n * Unclaimed Rewards won't tell you the APY, only the unclaimed amt.\n *\n * **/\n\nexport function useUnclaimedFuseRewards() {\n  const { fuse, address } = useRari();\n\n  // 1. Fetch all Fuse Pools User has supplied to + their Rewards Distribs.\n  const { data: _rewardsDistributorsByFusePool, error } = useQuery(\n    \"unclaimedRewards for \" + address,\n    async () => {\n      // fetchTokenBalance(tokenAddress, rari.web3, addressToCheck)\n\n      const rewardsDistributorsByFusePool =\n        await fuse.contracts.FusePoolLensSecondary.methods\n          .getRewardsDistributorsBySupplier(address)\n          .call();\n\n      return rewardsDistributorsByFusePool ?? [];\n    }\n  );\n\n  const poolIndices: string[] = _rewardsDistributorsByFusePool?.[0] ?? [];\n  const poolComptrollers: string[] = _rewardsDistributorsByFusePool?.[1] ?? [];\n  const rewardsDistributorsByFusePool: string[][] =\n    _rewardsDistributorsByFusePool?.[2] ?? [];\n\n  const rewardsDistributorsToPoolsMap: RewardsDistributorToPoolsMap = {};\n\n  // 1.a Construct a map of rewardsDistributors to fuse pools\n  rewardsDistributorsByFusePool.forEach((rDs, i) => {\n    // rDs, poolIndex, comptroller all refer to the same fuse pool\n    const poolIndex = poolIndices[i];\n    const comptroller = poolComptrollers[i];\n    if (rDs.length) {\n      rDs.forEach((rD) => {\n        // If Rd doesnt exist in top level of map, set it and the nested first value\n        if (!rewardsDistributorsToPoolsMap[rD]) {\n          rewardsDistributorsToPoolsMap[rD] = {\n            [comptroller]: parseFloat(poolIndex),\n          };\n        } else {\n          // It exists already in the map\n          rewardsDistributorsToPoolsMap[rD][comptroller] =\n            parseFloat(poolIndex);\n        }\n      });\n    }\n  });\n\n  // 2. Reduce this 2D array into a single deduped array of RewardsDistributors\n  const uniqueRDs: string[] = stripExcludedRDs([\n    ...new Set(\n      rewardsDistributorsByFusePool?.reduce(function (prev, curr) {\n        return prev.concat(curr);\n      }, []) ?? []\n    ),\n  ]);\n\n  console.log({ uniqueRDs });\n\n  // 3. Create map of {[rewardToken: string] : RewardDistributor[] }\n\n  // 3a. Query all individual RewardsDistributors for their rewardTokens\n  const { data: _rewardsDistributors, error: _rdError } = useQuery(\n    \"rewardsDistributor data for \" + address,\n    async () => {\n      const rewardDistributors = await Promise.all(\n        uniqueRDs.map(async (rewardsDistributorAddress) => {\n          const instance = createRewardsDistributor(\n            rewardsDistributorAddress,\n            fuse\n          );\n          const rewardToken = await instance.methods.rewardToken().call();\n          const _markets = await instance.methods.getAllMarkets().call();\n\n          //   const markets = _markets.length\n          //     ? await Promise.all(\n          //         _markets.map((cTokenAddr: string) => {\n          //           const cTokeninstance = createCToken(fuse, cTokenAddr);\n          //         })\n          //       )\n          //     : [];\n\n          return {\n            rewardToken,\n            rewardsDistributorAddress,\n            markets: _markets,\n            pools: Object.values(\n              rewardsDistributorsToPoolsMap[rewardsDistributorAddress]\n            ),\n            comptrollers: Object.keys(\n              rewardsDistributorsToPoolsMap[rewardsDistributorAddress]\n            ),\n          };\n        })\n      );\n\n      return rewardDistributors;\n    }\n  );\n\n  // This is an array of RewardsDistributors we care about for this user\n  const rewardsDistributors =\n    _rewardsDistributors as RewardsDistributorUnclaimed[];\n\n  // This is a one-to-one map of RewardsDistributors by rD address {rDaddress: RewardsDistributor}\n  const rewardsDistributorsMap: RewardsDistributorMap = {};\n\n  rewardsDistributors?.length &&\n    rewardsDistributors.forEach((rD) => {\n      rewardsDistributorsMap[rD.rewardsDistributorAddress] = rD;\n    });\n\n  //   3b. Construct a one-to-many map of rewardTokenAddr => RewardDistributorUnclaimed[]\n  const rewardTokensMap: RewardsTokenMap = {};\n  rewardsDistributors?.length &&\n    rewardsDistributors.forEach((rD) => {\n      const key = rD.rewardToken;\n      // if value doesnt exist create it as array\n      if (!rewardTokensMap[key]) {\n        rewardTokensMap[key] = [rD];\n      } else {\n        // else append to array\n        rewardTokensMap[key].push(rD);\n      }\n    });\n\n  //  4.  getUnclaimedRewardsByDistributors\n  const { data: _unclaimed, error: unclaimedErr } = useQuery(\n    \"unclaimed for \" + address + \" \" + uniqueRDs.join(\",\"),\n    async () => {\n      const unclaimedResults =\n        await fuse.contracts.FusePoolLensSecondary.methods\n          .getUnclaimedRewardsByDistributors(address, uniqueRDs)\n          .call();\n\n      console.log({ address, uniqueRDs, unclaimedResults });\n\n      const rewardTokens = unclaimedResults[0];\n      const unclaimedAmounts = unclaimedResults[1];\n\n      console.log({ unclaimedAmounts });\n\n      const results: { rewardToken: string; unclaimed: number }[] = [];\n\n      if (rewardTokens.length)\n        for (let i = 0; i < rewardTokens.length; i++) {\n          const rewardToken = rewardTokens[i];\n          const unclaimed = parseFloat(unclaimedAmounts[i]);\n          const x = {\n            rewardToken,\n            unclaimed,\n          };\n\n          results.push(x);\n        }\n\n      return results;\n    }\n  );\n\n  // Filter by claimable balances greater than 0\n  const unclaimed: UnclaimedReward[] =\n    _unclaimed?.filter((fuseUnclaimed) => {\n      if (parseFloat(fuseUnclaimed.unclaimed.toString()) > 0) {\n        return true;\n      }\n    }) ?? [];\n\n  console.log({ _unclaimed, unclaimed });\n\n  //   console.log(\"rewards2\", {\n  //     rewardsDistributorsByFusePool,\n  //     uniqueRDs,\n  //     rewardsDistributors,\n  //     rewardsDistributorsMap,\n  //     rewardTokensMap,\n  //     unclaimed,\n  //   });\n\n  //   handle generic err\n  const oopsie = error || _rdError || unclaimedErr;\n  if (oopsie) console.log({ oopsie });\n\n  //   return uniqueRDs;\n\n  return {\n    rewardsDistributorsMap,\n    rewardTokensMap,\n    unclaimed,\n    rewardsDistributorsToPoolsMap,\n  };\n}\n\n// maps a rewardTtoken to an array of RD addresses\nexport type RewardsTokenMap = {\n  [rewardToken: string]: RewardsDistributorUnclaimed[];\n};\n\nexport interface RewardsDistributorUnclaimed {\n  rewardToken: string;\n  rewardsDistributorAddress: string;\n  markets: string[];\n  pools: number[];\n  comptrollers: string[];\n}\n\nexport interface RewardsDistributorMap {\n  [rewardsDistributorAddr: string]: RewardsDistributorUnclaimed;\n}\n\nexport interface UnclaimedReward {\n  rewardToken: string;\n  unclaimed: number;\n}\n\n// const fetchTokenPriceFromOracleWithFallback = async (oracleInstance: any, tokenAddress: string) => {\n//   const tokenPrice = await oracleInstance.methods.price(tokenAddress).call()\n\n// }\n"
  },
  {
    "path": "src/hooks/rewards/useUnclaimedRGT.ts",
    "content": "import { useMemo } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { useRari } from \"../../context/RariContext\";\n\nexport function useUnclaimedRGT() {\n  const { rari, address } = useRari();\n\n  const { data: unclaimedRGT } = useQuery(\n    address + \" unclaimed RGT\",\n    async () => {\n      return parseFloat(\n        (\n          await rari.governance.rgt.distributions.getUnclaimed(address)\n        ).toString()\n      );\n    }\n  );\n\n  const { data: privateUnclaimedRGT } = useQuery(\n    address + \" privateUnclaimed RGT\",\n    async () => {\n      return parseFloat(\n        (await rari.governance.rgt.vesting.getUnclaimed(address)).toString()\n      );\n    }\n  );\n\n  const { data: pool2UnclaimedRGT } = useQuery(\n    address + \" pool2Unclaimed RGT\",\n    async () => {\n      return parseFloat(\n        (\n          await rari.governance.rgt.sushiSwapDistributions.getUnclaimed(address)\n        ).toString()\n      );\n    }\n  );\n\n  return useMemo(\n    () => ({\n      pool2UnclaimedRGT,\n      privateUnclaimedRGT,\n      unclaimedRGT,\n    }),\n    [pool2UnclaimedRGT, privateUnclaimedRGT, unclaimedRGT]\n  );\n}\n"
  },
  {
    "path": "src/hooks/tranches/useSFIDistributions.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport { useSaffronData } from \"./useSaffronData\";\n\nimport { tranchePoolIndex, TranchePool } from \"./useSaffronData\";\n\nexport const useSFIDistributions = () => {\n  const { rari } = useRari();\n  const { saffronStrategy } = useSaffronData();\n\n  const { data: sfiDistributions } = useQuery(\"sfiDistributions\", async () => {\n    const DAI = rari.web3.utils.fromWei(\n      await saffronStrategy.methods\n        .pool_SFI_rewards(tranchePoolIndex(TranchePool.DAI))\n        .call()\n    );\n    const USDC = rari.web3.utils.fromWei(\n      await saffronStrategy.methods\n        .pool_SFI_rewards(tranchePoolIndex(TranchePool.USDC))\n        .call()\n    );\n    return { DAI, USDC };\n  });\n\n  return sfiDistributions;\n};\n"
  },
  {
    "path": "src/hooks/tranches/useSFIEarnings.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useSaffronData } from \"./useSaffronData\";\n\nexport const useSFIEarnings = () => {\n  const { saffronPool } = useSaffronData();\n\n  const { data } = useQuery(\"sfiEarnings\", async () => {\n    const {\n      S,\n      AA,\n      A,\n    } = await saffronPool.methods.TRANCHE_SFI_MULTIPLIER().call();\n\n    return { S: S / 1000, AA: AA / 1000, A: A / 1000 };\n  });\n\n  return data;\n};\n"
  },
  {
    "path": "src/hooks/tranches/useSaffronData.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport { useSaffronContracts } from \"components/pages/Tranches/SaffronContext\";\n\nimport { smallUsdFormatter, smallStringUsdFormatter } from \"utils/bigUtils\";\nimport ERC20ABI from \"rari-sdk/abi/ERC20.json\";\n\nexport enum TranchePool {\n  DAI = \"DAI\",\n  USDC = \"USDC\",\n}\n\nexport enum TrancheRating {\n  S = \"S\",\n  AA = \"AA\",\n  A = \"A\",\n}\n\n// Return data from Saffron API\ntype SaffronData = {\n  SFI: { USD: number };\n  pools: SaffronTranchePool[];\n};\n\nexport interface SaffronTranchePool {\n  name: string;\n  tranches: SaffronTranches;\n  tvl: number;\n}\n\ntype SaffronTranches = {\n  [key in TrancheRating]?: {\n    \"total-apy\": number;\n    \"sfi-apy\": number;\n    \"dai-apy\": number;\n    tvl: number;\n  };\n};\n\nexport interface UseEstimatedSFIReturn {\n  aPoolSFIEarned: number;\n  sPoolSFIEarned: number;\n  totalSFIEarned: number;\n  formattedAPoolSFIEarned: string;\n  formattedSPoolSFIEarned: string;\n  formattedTotalSFIEarned: string;\n}\n\n// Constants\ntype SupportedTranchePool = {\n  pool: TranchePool;\n  ratings: TrancheRating[];\n};\n\nconst SUPPORTED_TRANCHEPOOLS: SupportedTranchePool[] = [\n  {\n    pool: TranchePool.DAI,\n    ratings: [TrancheRating.S, TrancheRating.A],\n  },\n];\n\nexport const tranchePoolIndex = (tranchePool: TranchePool): number => {\n  // TODO: CHANGE USDC TO WHATEVER IT BECOMES LATER\n  return tranchePool === TranchePool.DAI ? 9 : 0;\n};\n\nexport const trancheRatingIndex = (trancheRating: TrancheRating): number => {\n  return trancheRating === TrancheRating.S\n    ? 0\n    : trancheRating === TrancheRating.AA\n    ? 1\n    : 2;\n};\n\nexport const useSaffronData = () => {\n  const { data } = useQuery(\"saffronData\", async () => {\n    return (await fetch(\"https://api.spice.finance/apy\")).json();\n  });\n\n  const contracts = useSaffronContracts();\n\n  const fetchCurrentEpoch = async () => {\n    const currentEpoch = await contracts.saffronPool.methods\n      .get_current_epoch()\n      .call();\n\n    return currentEpoch;\n  };\n\n  return {\n    saffronData: data as SaffronData,\n    fetchCurrentEpoch,\n    ...contracts,\n  };\n};\n\nexport const usePrincipal = (\n  tranchePool: TranchePool,\n  trancheRating: TrancheRating\n) => {\n  const { rari, address } = useRari();\n  const { saffronPool, fetchCurrentEpoch } = useSaffronData();\n\n  const { data: principal } = useQuery(\n    tranchePool + trancheRating + \" principal \" + address,\n    async () => {\n      //TODO: ADD USDC POOL\n\n      const currentEpoch = await fetchCurrentEpoch();\n\n      const tranchePToken = new rari.web3.eth.Contract(\n        ERC20ABI as any,\n        await saffronPool.methods\n          .principal_token_addresses(\n            currentEpoch,\n            trancheRatingIndex(trancheRating)\n          )\n          .call()\n      );\n\n      return smallUsdFormatter(\n        parseInt(await tranchePToken.methods.balanceOf(address).call()) / 1e18\n      ).replace(\"$\", \"\");\n    }\n  );\n\n  return principal;\n};\n\nexport const usePrincipalBalance = () => {\n  const { rari, address } = useRari();\n  const { saffronPool, fetchCurrentEpoch } = useSaffronData();\n\n  const { data: principal } = useQuery(\n    \"principalBalance \" + address,\n    async () => {\n      const currentEpoch = await fetchCurrentEpoch();\n\n      const sTranchePToken = new rari.web3.eth.Contract(\n        ERC20ABI as any,\n        await saffronPool.methods\n          .principal_token_addresses(currentEpoch, 0)\n          .call()\n      );\n\n      const aTranchePToken = new rari.web3.eth.Contract(\n        ERC20ABI as any,\n        await saffronPool.methods\n          .principal_token_addresses(currentEpoch, 2)\n          .call()\n      );\n\n      return smallStringUsdFormatter(\n        rari.web3.utils.fromWei(\n          rari.web3.utils\n            .toBN(await sTranchePToken.methods.balanceOf(address).call())\n            .add(\n              rari.web3.utils.toBN(\n                await aTranchePToken.methods.balanceOf(address).call()\n              )\n            )\n        )\n      );\n    }\n  );\n\n  return principal;\n};\n\nexport const useEpochEndDate = () => {\n  const { saffronPool, fetchCurrentEpoch } = useSaffronData();\n\n  return useQuery(\"epochEndDate\", async () => {\n    const currentEpoch = await fetchCurrentEpoch();\n\n    const endDate = new Date(\n      (await saffronPool.methods.get_epoch_end(currentEpoch).call()) * 1000\n    );\n\n    return { currentEpoch, endDate };\n  });\n};\n\nexport const useEstimatedSFI = (): UseEstimatedSFIReturn | undefined => {\n  const { rari, address } = useRari();\n  const { saffronPool, saffronStrategy, fetchCurrentEpoch } = useSaffronData();\n\n  const { data: estimatedSFI } = useQuery(\n    \"estimatedSFI \" + address,\n    async () => {\n      // TODO: ADD USDC\n\n      const DAI_SFI_REWARDS =\n        parseInt(\n          await saffronStrategy.methods\n            .pool_SFI_rewards(tranchePoolIndex(TranchePool.DAI))\n            .call()\n        ) / 1e18;\n\n      const SFI_multipliers = await saffronPool.methods\n        .TRANCHE_SFI_MULTIPLIER()\n        .call();\n\n      const currentEpoch = await fetchCurrentEpoch();\n\n      const dsecSToken = new rari.web3.eth.Contract(\n        ERC20ABI as any,\n        await saffronPool.methods\n          .principal_token_addresses(\n            currentEpoch,\n            trancheRatingIndex(TrancheRating.S)\n          )\n          .call()\n      );\n\n      // TODO ADD AA POOL\n\n      const dsecSSupply = await dsecSToken.methods.totalSupply().call();\n\n      const sPoolSFIEarned =\n        DAI_SFI_REWARDS *\n        (SFI_multipliers[trancheRatingIndex(TrancheRating.S)] / 100000) *\n        // If supply is zero we will get NaN for dividing by zero\n        (dsecSSupply === \"0\"\n          ? 0\n          : (await dsecSToken.methods.balanceOf(address).call()) / dsecSSupply);\n\n      const dsecAToken = new rari.web3.eth.Contract(\n        ERC20ABI as any,\n        await saffronPool.methods\n          .principal_token_addresses(\n            currentEpoch,\n            trancheRatingIndex(TrancheRating.A)\n          )\n          .call()\n      );\n\n      const dsecASupply = await dsecAToken.methods.totalSupply().call();\n\n      const aPoolSFIEarned =\n        DAI_SFI_REWARDS *\n        (SFI_multipliers[trancheRatingIndex(TrancheRating.A)] / 100000) *\n        // If supply is zero we will get NaN for dividing by zero\n        (dsecASupply === \"0\"\n          ? 0\n          : (await dsecAToken.methods.balanceOf(address).call()) / dsecASupply);\n\n      const formatSFI = (num: number) =>\n        smallUsdFormatter(num).replace(\"$\", \"\") + \" SFI\";\n\n      return {\n        aPoolSFIEarned,\n        sPoolSFIEarned,\n        totalSFIEarned: aPoolSFIEarned + sPoolSFIEarned,\n        formattedAPoolSFIEarned: formatSFI(aPoolSFIEarned),\n        formattedSPoolSFIEarned: formatSFI(sPoolSFIEarned),\n        formattedTotalSFIEarned: formatSFI(aPoolSFIEarned + sPoolSFIEarned),\n      };\n    }\n  );\n\n  return estimatedSFI;\n};\n\nexport const useMySaffronData = (): SaffronTranchePool[] => {\n  const { saffronData } = useSaffronData();\n\n  const currentPools: SaffronTranchePool[] = saffronData?.pools;\n\n  // Filter out the Saffron API data by the tranches and ratings Rari currently supports\n  const supportedPools: SaffronTranchePool[] = currentPools\n    ? SUPPORTED_TRANCHEPOOLS.map(\n        (supportedTranchePool: SupportedTranchePool) => {\n          // Get the DAI-RARI Pool by filtering API data against pre-defined constants\n\n          const currentPool: SaffronTranchePool =\n            currentPools[tranchePoolIndex(supportedTranchePool.pool)];\n\n          // For each supported Saffron Pool, filter for the supported tranches\n          const availableTrancheRatings: string[] = Object.keys(\n            currentPool.tranches\n          );\n          const supportedTranches: string[] = availableTrancheRatings.filter(\n            (item: string) =>\n              supportedTranchePool.ratings.includes(\n                (TrancheRating as any)[item]\n              )\n          );\n\n          const tranches: SaffronTranches = {};\n          supportedTranches.forEach((key: string) => {\n            tranches[key as TrancheRating] =\n              currentPool.tranches[key as TrancheRating];\n          });\n\n          const finalPool: SaffronTranchePool = {\n            ...currentPool,\n            tranches,\n          };\n\n          return finalPool;\n        }\n      )\n    : [];\n\n  return supportedPools;\n};\n"
  },
  {
    "path": "src/hooks/useAssetsMap.ts",
    "content": "import { useMemo } from \"react\";\n\n// Utils\nimport {\n  createAssetsMap,\n  AssetHash,\n  createTokensDataMap,\n  TokensDataHash,\n} from \"utils/tokenUtils\";\nimport {\n  USDPricedFuseAsset,\n  USDPricedFuseAssetWithTokenData,\n} from \"utils/fetchFusePoolData\";\n\n// Hooks\nimport { useTokensData } from \"hooks/useTokenData\";\n\nexport const useAssetsMap = (\n  assetsArray: USDPricedFuseAsset[][] | null\n): AssetHash | null => {\n  return useMemo(\n    () => (assetsArray ? createAssetsMap(assetsArray) : null),\n    [assetsArray]\n  );\n};\n\ntype AssetsMapWithTokenDataReturn = {\n  assetsArrayWithTokenData: USDPricedFuseAssetWithTokenData[][] | null; // Fuse Asset with additional info about the token appended on\n  tokensDataMap: TokensDataHash; // hashmap of unique assets and their token data\n};\n\n// This returns a Hashmap\nexport const useAssetsMapWithTokenData = (\n  assetsArray: USDPricedFuseAsset[][] | null\n): AssetsMapWithTokenDataReturn => {\n  const assetsMap: AssetHash | null = useAssetsMap(assetsArray);\n  const tokensAddresses: string[] = assetsMap ? Object.keys(assetsMap) : [];\n  const tokensData = useTokensData(tokensAddresses);\n\n  const tokensDataMap: TokensDataHash = useMemo(\n    () => (tokensData ? createTokensDataMap(tokensData) : {}),\n    [tokensData]\n  );\n\n  // Returns the original 2D assets Array but with tokenData filled in \n  const assetsArrayWithTokenData: USDPricedFuseAssetWithTokenData[][] | null =\n    useMemo(\n      () =>\n        assetsArray?.map((assets: USDPricedFuseAsset[]) =>\n          assets.map((asset: USDPricedFuseAsset) => ({\n            ...asset,\n            tokenData: tokensDataMap[asset.underlyingToken],\n          }))\n        ) ?? null,\n      [tokensDataMap, assetsArray]\n    );\n\n  return { assetsArrayWithTokenData, tokensDataMap };\n};\n"
  },
  {
    "path": "src/hooks/useAuthedCallback.ts",
    "content": "import { useRari } from \"../context/RariContext\";\n\nexport const useAuthedCallback = (callback: () => any) => {\n  const { login, isAuthed } = useRari();\n\n  const authedCallback = () => {\n    if (isAuthed) {\n      return callback();\n    } else {\n      return login();\n    }\n  };\n\n  return authedCallback;\n};\n"
  },
  {
    "path": "src/hooks/useBorrowLimit.ts",
    "content": "import { useMemo } from \"react\";\nimport { USDPricedFuseAsset } from \"utils/fetchFusePoolData\";\n\nexport const useBorrowLimit = (\n  assets: USDPricedFuseAsset[],\n  options?: { ignoreIsEnabledCheckFor: string }\n) => {\n  const maxBorrow = useMemo(() => {\n    let maxBorrow = 0;\n    for (let i = 0; i < assets.length; i++) {\n      let asset = assets[i];\n\n      if (\n        options?.ignoreIsEnabledCheckFor === asset.cToken ||\n        asset.membership\n      ) {\n        maxBorrow += asset.supplyBalanceUSD * (asset.collateralFactor / 1e18);\n      }\n    }\n    return maxBorrow;\n  }, [assets, options?.ignoreIsEnabledCheckFor]);\n\n  return maxBorrow;\n};\n\nexport const useBorrowLimits = (\n  assetsArray: USDPricedFuseAsset[][] | null,\n  options?: { ignoreIsEnabledCheckFor: string }\n) => {\n  const maxBorrows = useMemo(() => {\n    return assetsArray?.map((assets) => {\n      let maxBorrow = 0;\n      for (let i = 0; i < assets.length; i++) {\n        let asset = assets[i];\n\n        if (\n          options?.ignoreIsEnabledCheckFor === asset.cToken ||\n          asset.membership\n        ) {\n          maxBorrow += asset.supplyBalanceUSD * (asset.collateralFactor / 1e18);\n        }\n      }\n      return maxBorrow;\n    });\n  }, [assetsArray, options?.ignoreIsEnabledCheckFor]);\n\n  return maxBorrows;\n};\n"
  },
  {
    "path": "src/hooks/useFusePoolData.ts",
    "content": "import { useMemo } from \"react\";\nimport { useQuery, useQueries } from \"react-query\";\n\nimport { useRari } from \"../context/RariContext\";\nimport {\n  fetchFusePoolData,\n  FusePoolData,\n  USDPricedFuseAsset,\n  USDPricedFuseAssetWithTokenData,\n} from \"../utils/fetchFusePoolData\";\nimport { useAssetsMapWithTokenData } from \"./useAssetsMap\";\n\nexport const useFusePoolData = (\n  poolId: string | undefined\n): FusePoolData | undefined => {\n  const { fuse, rari, address } = useRari();\n\n\n  const { data } = useQuery(poolId + \" poolData \" + address, () => {\n    return fetchFusePoolData(poolId, address, fuse, rari);\n  });\n\n  return data;\n};\n\n// Fetch APYs for all pools\nexport const useFusePoolsData = (poolIds: number[]): FusePoolData[] | null => {\n  const { fuse, rari, address } = useRari();\n\n  const poolsData = useQueries(\n    poolIds.map((id: number) => {\n      return {\n        queryKey: id + \" apy\",\n        queryFn: () => {\n          return fetchFusePoolData(id.toString(), address, fuse, rari);\n        },\n      };\n    })\n  );\n\n  // Get Fuse Pools Data\n  const fusePoolsData: FusePoolData[] | null = useMemo(() => {\n    // todo - use type FusePoolData\n    const ret: any[] = [];\n\n    if (!poolsData.length) return null;\n\n    poolsData.forEach(({ data }, i) => {\n      if (!data) return null;\n      const _data = data as FusePoolData;\n      ret.push({\n        ..._data,\n        id: poolIds[i],\n      });\n    });\n\n    if (!ret.length) return null;\n\n    return ret;\n  }, [poolsData, poolIds]);\n\n  // Get all the asset arrays for each pool\n  const assetsArray: USDPricedFuseAsset[][] | null =\n    fusePoolsData?.map((pool) => pool?.assets) ?? null;\n\n  // Construct a hashmap of all the unique assets and their respective tokendata\n  const {\n    assetsArrayWithTokenData,\n  }: {\n    assetsArrayWithTokenData: USDPricedFuseAssetWithTokenData[][] | null;\n  } = useAssetsMapWithTokenData(assetsArray);\n\n  return useMemo(() => {\n    if (assetsArrayWithTokenData && fusePoolsData) {\n      return fusePoolsData.map((fusePoolData, i) => ({\n        ...fusePoolData,\n        assets: assetsArrayWithTokenData[i],\n      }));\n    }\n\n    return fusePoolsData;\n  }, [fusePoolsData, assetsArrayWithTokenData]);\n};\n"
  },
  {
    "path": "src/hooks/useIsSemiSmallScreen.tsx",
    "content": "import { useWindowSize } from \"utils/chakraUtils\";\n\nexport const useIsSemiSmallScreen = () => {\n  const { width } = useWindowSize();\n\n  return width < 1180;\n};\n"
  },
  {
    "path": "src/hooks/useIsSmallScreen.tsx",
    "content": "import { useWindowSize } from \"utils/chakraUtils\";\n\nexport const useIsSmallScreen = () => {\n  const { width } = useWindowSize();\n  return width < 1030;\n};\n"
  },
  {
    "path": "src/hooks/useIsUpgradable.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"context/RariContext\";\nimport { createComptroller } from \"utils/createComptroller\";\n\nexport const useIsUpgradeable = (comptrollerAddress: string) => {\n    const { fuse } = useRari();\n  \n    const { data } = useQuery(comptrollerAddress + \" isUpgradeable\", async () => {\n      const comptroller = createComptroller(comptrollerAddress, fuse);\n  \n      const isUpgradeable: boolean = await comptroller.methods\n        .adminHasRights()\n        .call();\n  \n      return isUpgradeable;\n    });\n  \n    return data;\n  };"
  },
  {
    "path": "src/hooks/useMaxWithdraw.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { usePoolType } from \"../context/PoolContext\";\nimport { Pool } from \"../utils/poolUtils\";\nimport { useRari } from \"../context/RariContext\";\nimport Rari from \"../rari-sdk/index\";\nimport { BN } from \"../utils/bigUtils\";\nimport { getSDKPool } from \"../utils/poolUtils\";\nimport { fetchPoolBalance } from \"./usePoolBalance\";\n\nexport const fetchMaxWithdraw = async ({\n  rari,\n  address,\n  poolType,\n  symbol,\n}: {\n  rari: Rari;\n  address: string;\n  symbol: string;\n  poolType: Pool;\n}) => {\n  const bigBalance = await fetchPoolBalance({\n    pool: poolType,\n    rari,\n    address,\n  });\n\n  const [amount] = await getSDKPool({\n    rari,\n    pool: poolType,\n  }).withdrawals.getMaxWithdrawalAmount(symbol, bigBalance);\n\n  return amount as BN;\n};\n\nexport const useMaxWithdraw = (symbol: string) => {\n  const { rari, address } = useRari();\n\n  const poolType = usePoolType();\n\n  const { data: max, isLoading: isMaxLoading } = useQuery(\n    address + \" max \" + symbol,\n    async () => {\n      return fetchMaxWithdraw({ rari, address, symbol, poolType });\n    }\n  );\n\n  return { max, isMaxLoading };\n};\n"
  },
  {
    "path": "src/hooks/useMaybeResponsiveProp.ts",
    "content": "import { useIsMobile } from \"utils/chakraUtils\";\n\nexport function useMaybeResponsiveProp<T, A>(\n  data: { md: T; base: A } | string\n) {\n  const mobile = useIsMobile();\n\n  if (typeof data === \"object\") {\n    if (mobile) {\n      return data.base;\n    } else {\n      return data.md;\n    }\n  } else {\n    return data;\n  }\n}\n"
  },
  {
    "path": "src/hooks/useNoSlippageCurrencies.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { Pool } from \"../utils/poolUtils\";\nimport { useRari } from \"../context/RariContext\";\nimport { getSDKPool } from \"../utils/poolUtils\";\n\nexport const useNoSlippageCurrencies = (pool: Pool) => {\n  const { rari } = useRari();\n\n  const { data } = useQuery(pool + \" noSlippageCurrencies\", async () => {\n    let noSlippageCurrencies: string[];\n\n    if (pool === Pool.ETH) {\n      noSlippageCurrencies = [\"ETH\"];\n    } else {\n      noSlippageCurrencies = await getSDKPool({\n        rari,\n        pool,\n      }).deposits.getDirectDepositCurrencies();\n    }\n\n    if (noSlippageCurrencies.length === 0) {\n      return [\"None\"];\n    }\n\n    return noSlippageCurrencies;\n  });\n\n  return data;\n};\n"
  },
  {
    "path": "src/hooks/usePoolAPY.ts",
    "content": "import { useQuery, useQueries, UseQueryResult } from \"react-query\";\nimport { Pool } from \"../utils/poolUtils\";\nimport { useRari } from \"../context/RariContext\";\n\nimport { fetchRGTAPR, fetchPoolAPY } from \"../utils/fetchPoolAPY\";\nimport { useMemo } from \"react\";\nimport { PoolInterface } from \"constants/pools\";\n\nexport const useRGTAPR = () => {\n  const { rari } = useRari();\n\n  const { data: rgtAPR } = useQuery(\"rgtAPR\", async () => fetchRGTAPR(rari));\n\n  return rgtAPR;\n};\n\nexport const usePoolAPY = (pool: Pool | undefined) => {\n  const { rari } = useRari();\n\n  const { data: poolAPY } = useQuery(pool + \" apy\", () => {\n    return fetchPoolAPY(rari, pool);\n  });\n\n  return poolAPY;\n};\n\n// Fetch APYs for all pools\nexport const usePoolsAPY = (pools: PoolInterface[]) => {\n  const { rari } = useRari();\n\n  const poolAPYs: UseQueryResult[] = useQueries(\n    pools.map(({ type: poolType }) => {\n      return {\n        queryKey: poolType + \" apy\",\n        queryFn: () => fetchPoolAPY(rari, poolType),\n      };\n    })\n  );\n\n  return useMemo(() => {\n    return !poolAPYs.length ? [] : poolAPYs.map(({ data: poolAPY }) => poolAPY);\n  }, [poolAPYs]);\n};\n"
  },
  {
    "path": "src/hooks/usePoolBalance.ts",
    "content": "import { useMemo } from \"react\";\nimport { useQuery, useQueries } from \"react-query\";\nimport { Pool } from \"../utils/poolUtils\";\nimport { useRari } from \"../context/RariContext\";\nimport Rari from \"../rari-sdk/index\";\nimport { BN } from \"../utils/bigUtils\";\nimport { getSDKPool } from \"../utils/poolUtils\";\nimport { PoolInterface } from \"constants/pools\";\n\ninterface UseQueryResponse {\n  data: any;\n  isLoading: boolean;\n  error: any;\n}\n\nexport const fetchPoolBalance = async ({\n  pool,\n  rari,\n  address,\n}: {\n  pool: Pool;\n  rari: Rari;\n  address: string;\n}): Promise<BN> => {\n  const balance = await getSDKPool({ rari, pool }).balances.balanceOf(address);\n  return balance;\n};\n\nexport const usePoolBalance = (pool: Pool): UseQueryResponse => {\n  const { address, rari } = useRari();\n\n  const { data, isLoading, error } = useQuery(\n    address + \" \" + pool + \" balance\",\n    async () => {\n      return fetchPoolBalance({ pool, rari, address });\n    }\n  );\n\n  return { data, isLoading, error };\n};\n\nexport const usePoolBalances = (pools: PoolInterface[]): UseQueryResponse[] => {\n  const { rari, address } = useRari();\n\n  // Fetch APYs for all pools\n  const poolBalances = useQueries(\n    pools.map(({ type: pool }) => {\n      return {\n        queryKey: address + \" \" + pool + \" balance\",\n        queryFn: () => fetchPoolBalance({ pool, rari, address }),\n      };\n    })\n  );\n\n  return useMemo(\n    () =>\n      !poolBalances.length\n        ? []\n        : poolBalances.map(({ isLoading, error, data }) => ({\n            isLoading,\n            error,\n            data,\n          })),\n    [poolBalances]\n  );\n};\n\nexport const useTotalPoolsBalance = (): UseQueryResponse => {\n  const { rari, address } = useRari();\n\n  const { isLoading, data, error } = useQuery(\n    address + \" allPoolBalance\",\n    async () => {\n      const [stableBal, yieldBal, ethBalInETH, daiBal, ethPriceBN] =\n        await Promise.all([\n          rari.pools.stable.balances.balanceOf(address),\n          rari.pools.yield.balances.balanceOf(address),\n          rari.pools.ethereum.balances.balanceOf(address),\n          rari.pools.dai.balances.balanceOf(address),\n          rari.getEthUsdPriceBN(),\n        ]);\n\n      const ethBal = ethBalInETH.mul(\n        ethPriceBN.div(rari.web3.utils.toBN(1e18))\n      );\n\n      return parseFloat(\n        rari.web3.utils.fromWei(stableBal.add(yieldBal).add(daiBal).add(ethBal))\n      );\n    }\n  );\n\n  return { isLoading, data, error };\n};\n"
  },
  {
    "path": "src/hooks/usePoolInfo.ts",
    "content": "import { useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { usePoolType } from \"context/PoolContext\";\nimport { Pool, getPoolName, getPoolCaption } from \"utils/poolUtils\";\nimport { formatBalanceBN } from \"utils/format\";\n\n// Constants\nimport { pools, PoolInterface } from \"constants/pools\";\nimport { usePoolsAPY } from \"./usePoolAPY\";\nimport { usePoolBalances, useTotalPoolsBalance } from \"./usePoolBalance\";\nimport { usePoolInterestEarned } from \"./usePoolInterest\";\nimport { useRari } from \"context/RariContext\";\nimport { BN, shortUsdFormatter } from \"utils/bigUtils\";\nimport { PoolInterestEarned } from \"utils/fetchPoolInterest\";\nimport { getPoolLogo } from \"utils/poolIconUtils\";\n\nexport const usePoolInfo = (poolType: Pool) => {\n  const { t } = useTranslation();\n\n  const poolData = useMemo(() => {\n    const poolName = getPoolName(poolType, t);\n    const poolCaption = getPoolCaption(poolType, t);\n    const poolLogo = getPoolLogo(poolType);\n    return { poolCaption, poolName, poolLogo };\n  }, [poolType, t]);\n\n  return {\n    ...poolData,\n    poolType,\n  };\n};\n\nexport const usePoolInfoFromContext = () => {\n  const poolType = usePoolType();\n  return usePoolInfo(poolType);\n};\n\nexport const usePoolInfos = (): PoolInterface[] => {\n  const { t } = useTranslation();\n\n  return useMemo(\n    () =>\n      pools.map((pool: PoolInterface) => ({\n        ...pool,\n        title: t(pool.title),\n        name: t(pool.name),\n        caption: t(pool.caption),\n      })),\n    [t]\n  );\n};\n\nexport type AggregatePoolInfo = {\n  poolInfo: PoolInterface;\n  poolAPY: number | null;\n  poolBalance: BN | null;\n  formattedPoolBalance: string | null;\n  poolInterestEarned: BN | null;\n  formattedPoolInterestEarned: string | null;\n  poolGrowth: number;\n  formattedPoolGrowth: string | null;\n};\n\nexport type PoolTotals = {\n  balance: number;\n  balanceFormatted: string;\n  interestEarned: string | null;\n  apy: string;\n  growth: string;\n};\n\nexport type AggregatePoolsInfoReturn = {\n  aggregatePoolsInfo: AggregatePoolInfo[];\n  totals: PoolTotals;\n};\n\nexport const useAggregatePoolInfos = () => {\n  const { rari } = useRari();\n  const {\n    web3: {\n      utils: { toBN },\n    },\n  } = rari;\n  const poolInfos = usePoolInfos();\n  const poolAPYs = usePoolsAPY(poolInfos);\n  const poolBalances = usePoolBalances(poolInfos);\n  const poolsInterestEarned: PoolInterestEarned | undefined =\n    usePoolInterestEarned();\n\n  // Totals\n  const { data: totalPoolsBalance } = useTotalPoolsBalance();\n\n  const aggregatePoolsInfo = useMemo(\n    () =>\n      poolInfos.map((poolInfo: PoolInterface, index: number) => {\n        // @ts-ignore\n        const poolAPY: number | null = poolAPYs[index] ?? null;\n        const poolBalance: BN = poolBalances[index]?.data ?? toBN(0);\n\n        const formattedPoolBalance: string | null = formatBalanceBN(\n          rari,\n          poolBalance,\n          poolInfo.type === Pool.ETH\n        );\n\n        // Right now we handle interest earned a little differently\n        let poolInterestEarned;\n        switch (poolInfo.type) {\n          case Pool.USDC:\n            poolInterestEarned =\n              poolsInterestEarned?.stablePoolInterestEarned ?? null;\n            break;\n          case Pool.YIELD:\n            poolInterestEarned =\n              poolsInterestEarned?.yieldPoolInterestEarned ?? null;\n            break;\n          default:\n            poolInterestEarned =\n              poolsInterestEarned?.ethPoolInterestEarnedInETH ?? null;\n            break;\n        }\n\n        const formattedPoolInterestEarned = formatBalanceBN(\n          rari,\n          poolInterestEarned,\n          poolInfo.type === Pool.ETH\n        );\n\n        // Growth for a pool = % increase between balance & (balance - interest earned)\n        const poolGrowth: BN =\n          poolBalance && poolInterestEarned\n            ? !poolBalance.isZero()\n              ? toBN(1).sub(\n                  poolBalance.sub(poolInterestEarned).div(poolBalance)\n                )\n              : toBN(0)\n            : toBN(0);\n\n        const formattedPoolGrowth = poolGrowth\n          ? (parseFloat(poolGrowth.toString()) / 1e18).toFixed(2)\n          : null;\n\n        return {\n          poolInfo,\n          poolAPY: poolAPY ? parseFloat(poolAPY.toString()) : null,\n          poolBalance,\n          formattedPoolBalance,\n          poolInterestEarned,\n          formattedPoolInterestEarned,\n          poolGrowth: parseFloat(poolGrowth.toString()) / 1e18,\n          formattedPoolGrowth,\n        };\n      }),\n    [rari, poolInfos, poolAPYs, poolBalances, poolsInterestEarned, toBN]\n  );\n\n  const totals = useMemo(\n    () => ({\n      balance: totalPoolsBalance ?? null,\n      balanceFormatted: shortUsdFormatter(totalPoolsBalance) ?? null,\n      interestEarned: formatBalanceBN(\n        rari,\n        poolsInterestEarned?.totalEarnings ?? null\n      ),\n      apy: \"50%\",\n      growth: \"50%\",\n    }),\n    [totalPoolsBalance, poolsInterestEarned, rari]\n  );\n\n  return { totals, aggregatePoolsInfo };\n};\n"
  },
  {
    "path": "src/hooks/usePoolInterest.ts",
    "content": "import { useQuery } from \"react-query\";\nimport { useRari } from \"../context/RariContext\";\nimport {\n  fetchPoolInterestEarned,\n  PoolInterestEarned,\n} from \"../utils/fetchPoolInterest\";\n\nexport const usePoolInterestEarned = (): PoolInterestEarned | undefined => {\n  const { rari, address } = useRari();\n\n  const { data } = useQuery(address + \" interest earned\", () => {\n    return fetchPoolInterestEarned(rari, address);\n  });\n\n  return data;\n};\n"
  },
  {
    "path": "src/hooks/useRSS.ts",
    "content": "import { useQuery } from \"react-query\";\n\nexport const useAssetRSS = (address: string) => {\n  const { data } = useQuery(\n    address + \" rss\",\n    () => {\n      return fetch(\n        // Since running the vercel functions requires a Vercel account and is super slow,\n        // just fetch this data from the live site in development:\n        (process.env.NODE_ENV === \"development\"\n          ? \"https://app.rari.capital\"\n          : \"\") +\n          \"/api/rss?address=\" +\n          address\n      )\n        .then((res) => res.json())\n        .catch((e) => {\n          console.log(\"Could not fetch RSS!\");\n          console.log(e);\n        }) as Promise<{\n        mcap: number;\n        volatility: number;\n        liquidity: number;\n        swapCount: number;\n        coingeckoMetadata: number;\n        exchanges: number;\n        transfers: number;\n\n        lastUpdated: string;\n        totalScore: number;\n      }>;\n    },\n    {\n      refetchOnMount: false,\n      refetchOnWindowFocus: false,\n      refetchOnReconnect: false,\n      // 1 day\n      cacheTime: 8.64e7,\n    }\n  );\n\n  return data;\n};\n\nexport const letterScore = (totalScore: number) => {\n  if (totalScore >= 95) {\n    return \"A++\";\n  }\n\n  if (totalScore >= 90) {\n    return \"A+\";\n  }\n\n  if (totalScore >= 80) {\n    return \"A\";\n  }\n\n  if (totalScore >= 70) {\n    return \"A-\";\n  }\n\n  if (totalScore >= 60) {\n    return \"B\";\n  }\n\n  if (totalScore >= 50) {\n    return \"C\";\n  }\n\n  if (totalScore >= 40) {\n    return \"D\";\n  }\n\n  if (totalScore >= 30) {\n    return \"F\";\n  } else {\n    return \"UNSAFE\";\n  }\n};\n\nexport const usePoolRSS = (poolId: string | number) => {\n  const { data } = useQuery(\n    poolId + \" rss\",\n    () => {\n      return fetch(\n        // Since running the vercel functions requires a Vercel account and is super slow,\n        // just fetch this data from the live site in development:\n        (process.env.NODE_ENV === \"development\"\n          ? \"https://app.rari.capital\"\n          : \"\") +\n          \"/api/rss?poolID=\" +\n          poolId\n      )\n        .then((res) => res.json())\n        .catch((e) => {\n          console.log(\"Could not fetch RSS!\");\n          console.log(e);\n        }) as Promise<{\n        liquidity: number;\n        collateralFactor: number;\n        reserveFactor: number;\n        utilization: number;\n        averageRSS: number;\n        upgradeable: number;\n        mustPass: number;\n        totalScore: number;\n        lastUpdated: string;\n      }>;\n    },\n    {\n      refetchOnMount: false,\n      refetchOnWindowFocus: false,\n      refetchOnReconnect: false,\n      // 1 day\n      cacheTime: 8.64e7,\n    }\n  );\n\n  return data;\n};\n"
  },
  {
    "path": "src/hooks/useTVL.ts",
    "content": "import { useCallback } from \"react\";\nimport { useRari } from \"../context/RariContext\";\nimport { fetchTVL } from \"../utils/fetchTVL\";\n\nexport const useTVLFetchers = () => {\n  const { rari, fuse } = useRari();\n\n  const getTVL = useCallback(() => fetchTVL(rari, fuse), [rari, fuse]);\n\n  const getNumberTVL = useCallback(async () => {\n    return parseFloat(rari.web3.utils.fromWei(await getTVL()));\n  }, [rari, getTVL]);\n\n  return { getNumberTVL, getTVL };\n};\n"
  },
  {
    "path": "src/hooks/useTokenBalance.ts",
    "content": "import { useQuery } from \"react-query\";\n\nimport { useRari } from \"../context/RariContext\";\nimport ERC20ABI from \"../rari-sdk/abi/ERC20.json\";\nimport { ETH_TOKEN_DATA } from \"./useTokenData\";\nimport Web3 from \"web3\";\n\nexport const fetchTokenBalance = async (\n  tokenAddress: string,\n  web3: Web3,\n  address: string\n) => {\n  let stringBalance;\n\n  if (\n    tokenAddress === ETH_TOKEN_DATA.address ||\n    tokenAddress === \"NO_ADDRESS_HERE_USE_WETH_FOR_ADDRESS\"\n  ) {\n    stringBalance = await web3.eth.getBalance(address);\n  } else {\n    const contract = new web3.eth.Contract(ERC20ABI as any, tokenAddress);\n\n    stringBalance = await contract.methods.balanceOf(address).call();\n  }\n\n  return web3.utils.toBN(stringBalance);\n};\n\nexport function useTokenBalance(tokenAddress: string, customAddress?: string) {\n  const { rari, address } = useRari();\n\n  const addressToCheck = customAddress ?? address;\n\n  return useQuery(tokenAddress + \" balanceOf \" + addressToCheck, () =>\n    fetchTokenBalance(tokenAddress, rari.web3, addressToCheck)\n  );\n}"
  },
  {
    "path": "src/hooks/useTokenData.ts",
    "content": "import { useMemo } from \"react\";\n\nimport { useQuery, useQueries } from \"react-query\";\nimport ERC20ABI from \"../../src/rari-sdk/abi/ERC20.json\";\nimport { useRari } from \"../context/RariContext\";\n\nexport const ETH_TOKEN_DATA = {\n  symbol: \"ETH\",\n  address: \"0x0000000000000000000000000000000000000000\",\n  name: \"Ethereum Network Token\",\n  decimals: 18,\n  color: \"#627EEA\",\n  overlayTextColor: \"#fff\",\n  logoURL:\n    \"https://icons.iconarchive.com/icons/cjdowner/cryptocurrency-flat/64/Ethereum-ETH-icon.png\",\n};\n\nexport interface TokenData {\n  name: string | null;\n  symbol: string | null;\n  address: string | null;\n  decimals: number | null;\n  color: string | null;\n  overlayTextColor: string | null;\n  logoURL: string | null;\n}\n\nexport const useTokenDataWithContract = (address: string) => {\n  const { rari } = useRari();\n\n  const tokenData = useTokenData(address);\n\n  const contract = useMemo(\n    () => new rari.web3.eth.Contract(ERC20ABI as any, address),\n    [address, rari.web3.eth.Contract]\n  );\n\n  return { tokenData, contract };\n};\n\nexport const fetchTokenData = async (address: string) => {\n  let data;\n\n  if (address !== ETH_TOKEN_DATA.address) {\n    try {\n      data = {\n        ...(await fetch(\n          // Since running the vercel functions requires a Vercel account and is super slow,\n          // just fetch this data from the live site in development:\n          (process.env.NODE_ENV === \"development\"\n            ? \"https://v2.rari.capital\"\n            : \"\") +\n            \"/api/tokenData?address=\" +\n            address\n        ).then((res) => res.json())),\n        address: address,\n      };\n    } catch (e) {\n      data = {\n        name: null,\n        address: null,\n        symbol: null,\n        decimals: null,\n        color: null,\n        overlayTextColor: null,\n        logoURL: null,\n      };\n    }\n  } else {\n    data = ETH_TOKEN_DATA;\n  }\n\n  return data as TokenData;\n};\n\nexport const useTokenData = (address: string) => {\n  const { data: tokenData } = useQuery(\n    address + \" tokenData\",\n    async () => await fetchTokenData(address)\n  );\n  return tokenData;\n};\n\nexport const useTokensData = (addresses: string[]) => {\n  const tokensData = useQueries(\n    addresses.map((address: string) => {\n      return {\n        queryKey: address + \" tokenData\",\n        queryFn: async () => await fetchTokenData(address),\n      };\n    })\n  );\n\n  return useMemo(() => {\n    const ret: any[] = [];\n\n    if (!tokensData.length) return [];\n\n    // Return null altogether\n    tokensData.forEach(({ data }) => {\n      if (!data) return [];\n      ret.push(data);\n    });\n\n    if (!ret.length) return [];\n\n    return ret;\n  }, [tokensData]);\n};\n\nexport interface TokensDataMap {\n  [address: string]: TokenData;\n}\n\nexport const useTokensDataAsMap = (addresses: string[] = []): TokensDataMap => {\n  const tokensData = useQueries(\n    addresses.map((address: string) => {\n      return {\n        queryKey: address + \" tokenData\",\n        queryFn: async () => await fetchTokenData(address),\n      };\n    })\n  );\n\n  return useMemo(() => {\n    const ret: TokensDataMap = {};\n    if (!tokensData.length) return {};\n    tokensData.forEach(({ data }) => {\n      const _data = data as TokenData;\n      if (_data && _data.address) {\n        ret[_data.address] = _data;\n      }\n    });\n\n    return ret;\n  }, [tokensData]);\n};\n"
  },
  {
    "path": "src/index.css",
    "content": "/* The !important styles below break the Coinbase WalletLink extension, so we use `:not` to fix */\nbody:not(.-walletlink-extension-dialog-box-top-description-text):not(.-walletlink-extension-dialog-box-bottom-description),\nhtml {\n  margin: 0 !important;\n  /*\n  Remove below if you want to be able to scroll on the site (aka if it's not emulating a mobile app)\n  More info here: https://stackoverflow.com/questions/7768269/ipad-safari-disable-scrolling-and-bounce-effect\n  */\n\n  width: 100%;\n  height: 100% !important;\n\n  background-color: #000000 !important;\n  overflow-x: hidden;\n}\n\n* {\n  -webkit-overflow-scrolling: touch;\n\n  scrollbar-width: none;\n  -ms-overflow-style: none;\n}\n\n.apexcharts-tooltip,\n.apexcharts-tooltip.active,\n.apexcharts-xaxistooltip,\n.apexcharts-xaxistooltip.active,\n.apexcharts-marker {\n  transition: none !important;\n}\n\n*::-webkit-scrollbar {\n  display: none;\n}\n\n.js-focus-visible :focus:not([data-focus-visible-added]) {\n  outline: none;\n  box-shadow: none;\n}\n\n.web3modal-modal-lightbox {\n  z-index: 9999 !important;\n}\n\n.hover-row:hover {\n  background-color: #282727;\n}\n\n/* \nThese fonts only have ASCII glyphs. \nIf you want to add some more glyphs but still remove useless ones go to: https://transfonter.org/ \nHere's the symbols we currently support: \" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\"\n*/\n@font-face {\n  font-family: \"Avenir Next\";\n  src: url(AvenirNext-Bold.woff2) format(\"woff2\"),\n    url(AvenirNext-Bold.woff) format(\"woff\");\n  font-weight: bold;\n  font-style: normal;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: \"Avenir Next\";\n  src: url(AvenirNext-Regular.woff2) format(\"woff2\"),\n    url(AvenirNext-Regular.woff) format(\"woff\");\n  font-weight: normal;\n  font-style: normal;\n  font-display: swap;\n}\n\n@-webkit-keyframes GradientBackgroundAnimation {\n  0% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n  100% {\n    background-position: 0% 50%;\n  }\n}\n@-moz-keyframes GradientBackgroundAnimation {\n  0% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n  100% {\n    background-position: 0% 50%;\n  }\n}\n@keyframes GradientBackgroundAnimation {\n  0% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n  100% {\n    background-position: 0% 50%;\n  }\n}\n\n/* \nThis fixes these weird white borders around loading base64 images.\n\nMore info here: https://stackoverflow.com/questions/13151340/how-to-remove-borders-around-broken-images-in-webkit/33387257\n*/\nimg:not([src]) {\n  display: none;\n}\n\n.blinking {\n  animation: blinker 2s linear infinite;\n}\n\n@keyframes blinker {\n  80% {\n    opacity: 1;\n  }\n  90% {\n    opacity: 0.2;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n\n.bn-notify-custom .bn-notify-dark-mode {\n  background-color: #121212 !important;\n  border: 1px solid #272727;\n}\n\n.bn-notify-custom .bn-notify-notification-info {\n  background-color: #121212 !important;\n}\n\n.black-bg-option {\n  background-color: #121212 !important;\n}\n\n.no-underline:focus,\n.no-underline:hover,\n.no-underline:visited,\n.no-underline:link,\n.no-underline:active {\n  text-decoration: none !important;\n}\n\n.hide-bottom-tooltip .apexcharts-xaxistooltip-bottom {\n  display: none !important;\n}\n\n.black-switch > .chakra-switch__track[data-checked] {\n  background-color: #282727 !important;\n}\n\n.underline-on-hover:hover {\n  text-decoration: underline;\n}\n\n.confirm-button-disable-font-size-scale {\n  transition: font-size 0s !important;\n  transition: transform 250ms !important;\n}\n\n/* React Responsive Carousel */\n\n.carousel-root {\n  width: 100%;\n  padding: 20px;\n  /* background-color: pink; */\n}\n\n.carousel-slider {\n  width: 100%;\n  height: 100%;\n  padding: 20px;\n}\n\n.slider-wrapper {\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n\n.dot {\n  background-color: green;\n}\n\n/* Chakra UI sm breakpoint */\n@media only screen and (min-width: 30em) {\n  .carousel-root {\n    /* background-color: pink; */\n  }\n}\n\n/* Chakra UI md breakpoint */\n@media only screen and (min-width: 48em) {\n  .carousel-root {\n    /* background-color: purple; */\n  }\n}\n\n/* Chakra UI lg breakpoint */\n@media only screen and (min-width: 62em) {\n  .carousel-root {\n    /* background-color: orange; */\n    height: 100%;\n    padding: 20px;\n  }\n}\n"
  },
  {
    "path": "src/index.tsx",
    "content": "/* istanbul ignore file */\nimport { useEffect } from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport App from \"./components/App\";\n\nimport \"./index.css\";\n\n// Remove this ignore when TypeScript PR gets merged.\n// @ts-ignore\nimport PWAPrompt from \"react-ios-pwa-prompt\";\n\nimport { QueryClient, QueryClientProvider } from \"react-query\";\nimport { ReactQueryDevtools } from \"react-query/devtools\";\n\nimport { ChakraProvider, theme } from \"@chakra-ui/react\";\n\nimport ErrorPage from \"./components/pages/ErrorPage\";\n\nimport { RariProvider } from \"./context/RariContext\";\n\nimport \"focus-visible\";\n\nimport \"./utils/i18n.ts\";\nimport { BrowserRouter, useLocation } from \"react-router-dom\";\n\nimport LogRocket from \"logrocket\";\n\nimport { ErrorBoundary } from \"react-error-boundary\";\n\nimport { version } from \"../package.json\";\nexport { version };\n\nif (process.env.NODE_ENV === \"production\") {\n  console.log(\"Connecting to LogRocket...\");\n  LogRocket.init(\"eczu2e/rari-capital\", {\n    console: {\n      shouldAggregateConsoleErrors: true,\n    },\n    release: version,\n  });\n}\n\nconsole.log(\"Version \" + version);\n\nconst customTheme = {\n  ...theme,\n  fonts: {\n    ...theme.fonts,\n    body: `'Avenir Next', ${theme.fonts.body}`,\n    heading: `'Avenir Next', ${theme.fonts.heading}`,\n  },\n};\n\n// Scrolls to the top of the new page when we switch pages\nfunction ScrollToTop() {\n  const { pathname } = useLocation();\n\n  useEffect(() => {\n    window.scrollTo(0, 0);\n  }, [pathname]);\n\n  return null;\n}\n\nconst queryClient = new QueryClient();\n\nReactDOM.render(\n  <>\n    <PWAPrompt\n      timesToShow={2}\n      permanentlyHideOnDismiss={false}\n      copyTitle=\"Add Rari to your homescreen!\"\n      copyBody=\"The Rari Portal works best when added to your homescreen. Without doing this, you may have a degraded experience.\"\n      copyClosePrompt=\"Close\"\n    />\n    <ChakraProvider theme={customTheme}>\n      <ErrorBoundary FallbackComponent={ErrorPage}>\n        <QueryClientProvider client={queryClient}>\n          <ReactQueryDevtools initialIsOpen={false} />\n          <BrowserRouter>\n            <RariProvider>\n              <ScrollToTop />\n              <App />\n            </RariProvider>\n          </BrowserRouter>\n        </QueryClientProvider>\n      </ErrorBoundary>\n    </ChakraProvider>\n  </>,\n  document.getElementById(\"root\")\n);\n"
  },
  {
    "path": "src/locales/en.json",
    "content": "{\n  \"Assets:\": \"Assets:\",\n  \"Whitelist\": \"Whitelist\",\n  \"Add Asset\": \"Add Asset\",\n  \"Collateral Factor\": \"Collateral Factor\",\n  \"Reserve Factor\": \"Reserve Factor\",\n  \"Oracle\": \"Oracle\",\n  \"Interest Model\": \"Interest Model\",\n  \"Pool {{num}} Info\": \"Pool {{num}} Info\",\n  \"Total Supplied\": \"Total Supplied\",\n  \"Total Borrowed\": \"Total Borrowed\",\n  \"Current Utilization\": \"Current Utilization\",\n  \"Asset\": \"Asset\",\n  \"Balance\": \"Balance\",\n  \"Collateral\": \"Collateral\",\n  \"Borrow Balance:\": \"Borrow Balance:\",\n  \"Liquidity\": \"Liquidity\",\n  \"Pool Assets\": \"Pool Assets\",\n  \"Pool Number\": \"Pool Number\",\n  \"Fuse\": \"Fuse\",\n  \"Your Supply Balance\": \"Your Supply Balance\",\n  \"Your Borrow Balance\": \"Your Borrow Balance\",\n  \"Search:\": \"Search:\",\n  \"My Pools\": \"My Pools\",\n  \"Pool #{{poolId}}\": \"Pool #{{poolId}}\",\n  \"New Pool\": \"New Pool\",\n  \"Whoops! Looks like something went wrong!\": \"Whoops! Looks like something went wrong!\",\n  \"You can either reload the page, or report this error to us on our\": \"You can either reload the page, or report this error to us on our\",\n  \"Create\": \"Create\",\n  \"Access\": \"Access\",\n  \"Confirm\": \"Confirm\",\n  \"Loading your balance of {{token}}...\": \"Loading your balance of {{token}}...\",\n  \"You don't have enough {{token}}.\": \"You don't have enough {{token}}.\",\n  \"Check your wallet to submit the transactions\": \"Check your wallet to submit the transactions\",\n  \"Do not close this tab until you submit all transactions!\": \"Do not close this tab until you submit all transactions!\",\n  \"Review\": \"Review\",\n  \"Borrow Limit\": \"Borrow Limit\",\n  \"MAX\": \"MAX\",\n  \"You will deposit {{amount}}. Click confirm to approve.\": \"You will deposit {{amount}}. Click confirm to approve.\",\n  \"Options\": \"Options\",\n  \"Want to withdraw?\": \"Want to withdraw?\",\n  \"Rari Governance Token Price\": \"Rari Governance Token Price\",\n  \"RGT Supply\": \"RGT Supply\",\n  \"RGT Balance (Claimed)\": \"RGT Balance (Claimed)\",\n  \"Total Value Locked\": \"Total Value Locked\",\n  \"Account Balance\": \"Account Balance\",\n  \"Your balance in this pool\": \"Your balance in this pool\",\n  \"Extra returns from $RGT\": \"Extra returns from $RGT\",\n  \"You may experience divergence loss when depositing stablecoins into the Yield Pool that are above their peg at the time of deposit. The Yield Pool is composed of various stablecoins which shift in value, causing your balance to fluctuate.\": \"You may experience divergence loss when depositing stablecoins into the Yield Pool that are above their peg at the time of deposit. The Yield Pool is composed of various stablecoins which shift in value, causing your balance to fluctuate.\",\n  \"Interest Earned\": \"Interest Earned\",\n  \"Latest Rari News\": \"Latest Rari News\",\n  \"Currently earning\": \"Currently earning\",\n  \"Week\": \"Week\",\n  \"Month\": \"Month\",\n  \"ETH Pool\": \"ETH Pool\",\n  \"Yield Pool\": \"Yield Pool\",\n  \"High risk, high reward\": \"High risk, high reward\",\n  \"Extra yield from $RGT\": \"Extra yield from $RGT\",\n  \"Claim RGT\": \"Claim RGT\",\n  \"Year\": \"Year\",\n  \"Max\": \"Max\",\n  \"Current APY\": \"Current APY\",\n  \"You may experience divergence loss in this pool. Click for more info.\": \"You may experience divergence loss in this pool. Click for more info.\",\n  \"You cannot withdraw this much {{token}}.\": \"You cannot withdraw this much {{token}}.\",\n  \"Prices and/or slippage have changed. Please reload the page and try again. If the problem persists, please contact us.\": \"Prices and/or slippage have changed. Please reload the page and try again. If the problem persists, please contact us.\",\n  \"Choose which token you want to deposit.\": \"Choose which token you want to deposit.\",\n  \"Choose which token you want to withdraw.\": \"Choose which token you want to withdraw.\",\n  \"Check your wallet to submit the transaction\": \"Check your wallet to submit the transaction\",\n  \"Do not close this tab until you submit both transactions!\": \"Do not close this tab until you submit both transactions!\",\n  \"You may close this tab after submitting the transaction.\": \"You may close this tab after submitting the transaction.\",\n  \"Click review + confirm to withdraw!\": \"Click review + confirm to withdraw!\",\n  \"You will withdraw {{amount}}. Click confirm to approve.\": \"You will withdraw {{amount}}. Click confirm to approve.\",\n  \"1 Year of Returns Simulated Using Current Yields\": \"1 Year of Returns Simulated Using Current Yields\",\n  \"APY Based On Returns From\": \"APY Based On Returns From\",\n  \"This Month\": \"This Month\",\n  \"This Week\": \"This Week\",\n  \"Strategy Allocation\": \"Strategy Allocation\",\n  \"Compare Returns\": \"Compare Returns\",\n  \"Token Allocation\": \"Token Allocation\",\n  \"Recent Trades\": \"Recent Trades\",\n  \"Moved\": \"Moved\",\n  \"View Transaction History\": \"View Transaction History\",\n  \"Deposit\": \"Deposit\",\n  \"Enter a valid amount to deposit.\": \"Enter a valid amount to deposit.\",\n  \"Enter a valid amount to withdraw.\": \"Enter a valid amount to withdraw.\",\n  \"High slippage of {{formattedSlippage}} for {{token}}, do you still wish to continue with this transaction?\": \"High slippage of {{formattedSlippage}} for {{token}}, do you still wish to continue with this transaction?\",\n  \"This chart is generated using the APYs of each pool (shown at the bottom of this page). It introduces a random variance in the APY each day, with a max of 2x the current pool APY, and a minimum of 0% APY. It does not account for large changes in APY (greater than 2x), divergence loss in the Yield Pool, or take into account ETH price. The ETH Pool simulation is not denominated in ETH, instead it simulates returns on USD using the current APY of the ETH Pool. In the ETH pool you are exposed to the price movements of ETH (which is not shown or accounted for in this simulation).\": \"This chart is generated using the APYs of each pool (shown at the bottom of this page). It introduces a random variance in the APY each day, with a max of 2x the current pool APY, and a minimum of 0% APY. It does not account for large changes in APY (greater than 2x), divergence loss in the Yield Pool, or take into account ETH price. The ETH Pool simulation is not denominated in ETH, instead it simulates returns on USD using the current APY of the ETH Pool. In the ETH pool you are exposed to the price movements of ETH (which is not shown or accounted for in this simulation).\",\n  \"Overview\": \"Overview\",\n  \"Forums\": \"Forums\",\n  \"Do not increase the price of gas more than 1.5x the prefilled amount!\": \"Do not increase the price of gas more than 1.5x the prefilled amount!\",\n  \"Withdraw\": \"Withdraw\",\n  \"Want to deposit?\": \"Want to deposit?\",\n  \"Select A Token\": \"Select A Token\",\n  \"Try searching for 'USDC'\": \"Try searching for 'USDC'\",\n  \"You need {{sfiMissing}} more SFI to deposit (1 SFI : {{sfiRatio}} {{tranchePool}})\": \"You need {{sfiMissing}} more SFI to deposit (1 SFI : {{sfiRatio}} {{tranchePool}})\",\n  \"{{trancheRating}} Tranche Deposit\": \"{{trancheRating}} Tranche Deposit\",\n  \"Tranches\": \"Tranches\",\n  \"Saffron Finance has not been fully audited. Take caution when entering these tranches and do not deposit more than you are comfortable losing.\": \"Saffron Finance has not been fully audited. Take caution when entering these tranches and do not deposit more than you are comfortable losing.\",\n  \"Access Saffron Finance tranches through the Rari Capital interface!\": \"Access Saffron Finance tranches through the Rari Capital interface!\",\n  \"Tranche Details\": \"Tranche Details\",\n  \"Deposits are locked until the end of each 2 week epoch.\": \"Deposits are locked until the end of each 2 week epoch.\",\n  \"SFI staking is required to enter the A tranche!\": \"SFI staking is required to enter the A tranche!\",\n  \"SFI and interest is distributed to LPs proportionally at the end of each epoch.\": \"SFI and interest is distributed to LPs proportionally at the end of each epoch.\",\n  \"Learn More\": \"Learn More\",\n  \"Tranche\": \"Tranche\",\n  \"Liquidity added to other tranches as needed.\": \"Liquidity added to other tranches as needed.\",\n  \"Reduced interest earned. Covered in case of failure by A tranche.\": \"Reduced interest earned. Covered in case of failure by A tranche.\",\n  \"10x interest earned. Cover provided to AA tranche in case of failure.\": \"10x interest earned. Cover provided to AA tranche in case of failure.\",\n  \"Pool\": \"Pool\",\n  \"Your balance in this tranche\": \"Your balance in this tranche\",\n  \"Epoch {{epoch}} Redemption Date\": \"Epoch {{epoch}} Redemption Date\",\n  \"Withdraw From Past Epochs\": \"Withdraw From Past Epochs\",\n  \"Principal Amount\": \"Principal Amount\",\n  \"Estimated SFI Earnings\": \"Estimated SFI Earnings\",\n  \"Current SFI Price\": \"Current SFI Price\",\n  \"SFI Pool Distributions\": \"SFI Pool Distributions\",\n  \"Account\": \"Account\",\n  \"Switch Wallet\": \"Switch Wallet\",\n  \"Connect with a browser extension\": \"Connect with a browser extension\",\n  \"Scan with a wallet to connect\": \"Scan with a wallet to connect\",\n  \"Supply Balance:\": \"Supply Balance:\",\n  \"Enter a valid amount to supply.\": \"Enter a valid amount to supply.\",\n  \"Enter a valid amount to borrow.\": \"Enter a valid amount to borrow.\",\n  \"Enter a valid amount to repay.\": \"Enter a valid amount to repay.\",\n  \"Supply\": \"Supply\",\n  \"Borrow\": \"Borrow\",\n  \"Repay\": \"Repay\",\n  \"This pool has performance fees. Click to learn more.\": \"This pool has performance fees. Click to learn more.\",\n  \"This pool has withdrawal & interest fees. Click to learn more.\": \"This pool has withdrawal & interest fees. Click to learn more.\",\n  \"You will withdraw {{amount}} before fees. Click confirm to approve.\": \"You will withdraw {{amount}} before fees. Click confirm to approve.\",\n  \"Sushiswap LP Rewards\": \"Sushiswap LP Rewards\",\n  \"Earn additional rewards for providing RGT liquidity on Sushiswap!\": \"Earn additional rewards for providing RGT liquidity on Sushiswap!\",\n  \"Pool2\": \"Pool2\",\n  \"RGT-ETH Pool\": \"RGT-ETH Pool\",\n  \"Bonus Rewards End\": \"Bonus Rewards End\",\n  \"Bonus Rewards Begin\": \"Bonus Rewards Begin\",\n  \"Deposit your LP tokens here to earn bonus RGT rewards!\": \"Deposit your LP tokens here to earn bonus RGT rewards!\",\n  \"Total Staked (USD)\": \"Total Staked (USD)\",\n  \"RGT Earned\": \"RGT Earned\",\n  \"Provide liquidity to the RGT-ETH pool to acquire LP tokens\": \"Provide liquidity to the RGT-ETH pool to acquire LP tokens\",\n  \"here\": \"here\",\n  \"and stake them for extra rewards!\": \"and stake them for extra rewards!\",\n  \"Your Balance\": \"Your Balance\",\n  \"Click confirm to continue!\": \"Click confirm to continue!\",\n  \"Keep this bar from filling up to avoid being liquidated!\": \"Keep this bar from filling up to avoid being liquidated!\",\n  \"If your borrow amount reaches this value, you will be liquidated.\": \"If your borrow amount reaches this value, you will be liquidated.\",\n  \"Supply Balance\": \"Supply Balance\",\n  \"Debt Balance\": \"Debt Balance\",\n  \"Supply APY\": \"Supply APY\",\n  \"Borrow APY\": \"Borrow APY\",\n  \"Available Liquidity\": \"Available Liquidity\",\n  \"Upgradeable\": \"Upgradeable\",\n  \"Admin (copied!)\": \"Admin (copied!)\",\n  \"Admin (click to copy)\": \"Admin (click to copy)\",\n  \"Platform Fee\": \"Platform Fee\",\n  \"Average Admin Fee\": \"Average Admin Fee\",\n  \"Unrecognized Oracle\": \"Unrecognized Oracle\",\n  \"No graph is available for this asset's interest curves.\": \"No graph is available for this asset's interest curves.\",\n  \"Edit\": \"Edit\",\n  \"Create Pool\": \"Create Pool\",\n  \"Name\": \"Name\",\n  \"If enabled you will be able to limit the ability to supply to the pool to a select group of addresses. The pool will not show up on the 'all pools' list.\": \"If enabled you will be able to limit the ability to supply to the pool to a select group of addresses. The pool will not show up on the 'all pools' list.\",\n  \"Whitelisted\": \"Whitelisted\",\n  \"The percent, ranging from 0% to 100%, of a liquidatable account's borrow that can be repaid in a single liquidate transaction. If a user has multiple borrowed assets, the closeFactor applies to any single borrowed asset, not the aggregated value of a user’s outstanding borrowing. Compound's close factor is 50%.\": \"The percent, ranging from 0% to 100%, of a liquidatable account's borrow that can be repaid in a single liquidate transaction. If a user has multiple borrowed assets, the closeFactor applies to any single borrowed asset, not the aggregated value of a user’s outstanding borrowing. Compound's close factor is 50%.\",\n  \"Close Factor\": \"Close Factor\",\n  \"The additional collateral given to liquidators as an incentive to perform liquidation of underwater accounts. For example, if the liquidation incentive is 10%, liquidators receive an extra 10% of the borrowers collateral for every unit they close. Compound's liquidation incentive is 8%.\": \"The additional collateral given to liquidators as an incentive to perform liquidation of underwater accounts. For example, if the liquidation incentive is 10%, liquidators receive an extra 10% of the borrowers collateral for every unit they close. Compound's liquidation incentive is 8%.\",\n  \"Liquidation Incentive\": \"Liquidation Incentive\",\n  \"There are no assets in this pool.\": \"There are no assets in this pool.\",\n  \"Created Pools\": \"Created Pools\",\n  \"Already added:\": \"Already added:\",\n  \"Pool {{num}} Configuration\": \"Pool {{num}} Configuration\",\n  \"Assets Configuration\": \"Assets Configuration\",\n  \"Save\": \"Save\",\n  \"None\": \"None\",\n  \"Collateral factor can range from 0-90%, and represents the proportionate increase in liquidity (borrow limit) that an account receives by depositing the asset.\": \"Collateral factor can range from 0-90%, and represents the proportionate increase in liquidity (borrow limit) that an account receives by depositing the asset.\",\n  \"The fraction of interest generated on a given asset that is routed to the asset's Reserve Pool. The Reserve Pool protects lenders against borrower default and liquidation malfunction.\": \"The fraction of interest generated on a given asset that is routed to the asset's Reserve Pool. The Reserve Pool protects lenders against borrower default and liquidation malfunction.\",\n  \"The fraction of interest generated on a given asset that is routed to the asset's admin address as a fee.\": \"The fraction of interest generated on a given asset that is routed to the asset's admin address as a fee.\",\n  \"Admin Fee\": \"Admin Fee\",\n  \"The interest rate model chosen for an asset defines the rates of interest for borrowers and suppliers at different utilization levels.\": \"The interest rate model chosen for an asset defines the rates of interest for borrowers and suppliers at different utilization levels.\",\n  \"Token Address: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\": \"Token Address: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n  \"Pool Risk Score\": \"Pool Risk Score\",\n  \"Total Value Supplied Across Fuse\": \"Total Value Supplied Across Fuse\",\n  \"Pool Utilization\": \"Pool Utilization\",\n  \"Enable As Collateral\": \"Enable As Collateral\",\n  \"Pool #{{poolId}} Info\": \"Pool #{{poolId}} Info\",\n  \"Metrics\": \"Metrics\",\n  \"Liquidity is the amount of this asset that is available to borrow (unborrowed). To see how much has been supplied and borrowed in total, navigate to the Pool Info tab.\": \"Liquidity is the amount of this asset that is available to borrow (unborrowed). To see how much has been supplied and borrowed in total, navigate to the Pool Info tab.\",\n  \"You don't have enough {{token}}!\": \"You don't have enough {{token}}!\",\n  \"You don't have enough {{token}} or are over-repaying!\": \"You don't have enough {{token}} or are over-repaying!\",\n  \"You cannot withdraw this much!\": \"You cannot withdraw this much!\",\n  \"You cannot borrow this much!\": \"You cannot borrow this much!\",\n  \"Pool Directory\": \"Pool Directory\",\n  \"Pool {{num}}'s {{token}} Stats\": \"Pool {{num}}'s {{token}} Stats\",\n  \"Utilization\": \"Utilization\",\n  \"Admin\": \"Admin\",\n  \"Become Admin\": \"Become Admin\",\n  \"Disconnect\": \"Disconnect\",\n  \"Connect\": \"Connect\",\n  \"Positions\": \"Positions\",\n  \"APY\": \"APY\",\n  \"Total\": \"Total\",\n  \"Deposits\": \"Deposits\",\n  \"Interest\": \"Interest\",\n  \"Growth\": \"Growth\",\n  \"Borrows\": \"Borrows\",\n  \"Lend APY\": \"Lend APY\",\n  \"Net Balance\": \"Net Balance\",\n  \"Est. SFI Earnings\": \"Est. SFI Earnings\",\n  \"DAI-S\": \"DAI-S\",\n  \"DAI\": \"DAI\",\n  \"N/A\": \"N/A\",\n  \"DAI-A\": \"DAI-A\",\n  \"RGT-ETH\": \"RGT-ETH\",\n  \"RGT\": \"RGT\",\n  \"Version\": \"Version\",\n  \"Debt\": \"Debt\",\n  \"Product\": \"Product\",\n  \"Snapshot\": \"Snapshot\",\n  \"This is how much you have borrowed.\": \"This is how much you have borrowed.\",\n  \"Recent Liquidations\": \"Recent Liquidations\",\n  \"Collateral Seized\": \"Collateral Seized\",\n  \"Borrow Repaid\": \"Borrow Repaid\",\n  \"Timestamp\": \"Timestamp\",\n  \"Liquidated\": \"Liquidated\",\n  \"View More\": \"View More\",\n  \"View Less\": \"View Less\",\n  \"View All\": \"View All\",\n  \"Collapse All\": \"Collapse All\",\n  \"USDC Pool\": \"USDC Pool\",\n  \"DAI Pool\": \"DAI Pool\",\n  \"Safe returns on USDC\": \"Safe returns on USDC\",\n  \"Safe returns on DAI\": \"Safe returns on DAI\",\n  \"Returns on ETH\": \"Returns on ETH\",\n  \"Revoke Rights\": \"Revoke Rights\",\n  \"USDC, DAI\": \"USDC, DAI\",\n  \"If enabled borrowing this asset will be disabled.\": \"If enabled borrowing this asset will be disabled.\",\n  \"Pause Borrowing\": \"Pause Borrowing\",\n  \"Enable Borrowing\": \"Enable Borrowing\",\n  \"APY/LTV\": \"APY/LTV\",\n  \"The Loan to Value (LTV) ratio defines the maximum amount of tokens in the pool that can be borrowed with a specific collateral. It’s expressed in percentage: if in a pool ETH has 75% LTV, for every 1 ETH worth of collateral, borrowers will be able to borrow 0.75 ETH worth of other tokens in the pool.\": \"The Loan to Value (LTV) ratio defines the maximum amount of tokens in the pool that can be borrowed with a specific collateral. It’s expressed in percentage: if in a pool ETH has 75% LTV, for every 1 ETH worth of collateral, borrowers will be able to borrow 0.75 ETH worth of other tokens in the pool.\",\n  \"APY/TVL\": \"APY/TVL\",\n  \"Total Value Lent (TVL) measures how much of this asset has been supplied in total. TVL does not account for how much of the lent assets have been borrowed, use 'liquidity' to determine the total unborrowed assets lent.\": \"Total Value Lent (TVL) measures how much of this asset has been supplied in total. TVL does not account for how much of the lent assets have been borrowed, use 'liquidity' to determine the total unborrowed assets lent.\",\n  \"Governance\": \"Governance\",\n  \"Interest Rates\": \"Interest Rates\",\n  \"Pools\": \"Pools\",\n  \"This page is currently in beta. If you notice any issues, please\": \"This page is currently in beta. If you notice any issues, please\",\n  \"let us know!\": \"let us know!\",\n  \"This page is not optimized for use on smaller screens. Sorry for the inconvenience!\": \"This page is not optimized for use on smaller screens. Sorry for the inconvenience!\",\n  \"No assets match your search.\": \"No assets match your search.\",\n  \"Lending Rates\": \"Lending Rates\",\n  \"Borrowing Rates\": \"Borrowing Rates\",\n  \"Search Assets\": \"Search Assets\",\n  \"Utilities\": \"Utilities\",\n  \"Audits\": \"Audits\",\n  \"Developer Docs\": \"Developer Docs\",\n  \"Learn\": \"Learn\",\n  \"Unverified Pools\": \"Unverified Pools\",\n  \"Previous\": \"Previous\",\n  \"Next\": \"Next\",\n  \"Choose the best price oracle for this BaseToken.\": \"Choose the best price oracle for this BaseToken.\",\n  \"BaseToken Price Oracle\": \"BaseToken Price Oracle\",\n  \"Choose Oracle\": \"Choose Oracle\",\n  \"Choose the best price oracle for the asset.\": \"Choose the best price oracle for the asset.\",\n  \"Price Oracle\": \"Price Oracle\",\n  \"Update\": \"Update\",\n  \"This field will determine which pool your oracle reads from. Its safer with more liquidity.\": \"This field will determine which pool your oracle reads from. Its safer with more liquidity.\",\n  \"Pool:\": \"Pool:\",\n  \"Choose Pool\": \"Choose Pool\",\n  \"TVL in pool as of this moment.\": \"TVL in pool as of this moment.\",\n  \"Liquidity:\": \"Liquidity:\",\n  \"The fee percentage for the pool on Uniswap (0.05%, 0.3%, 1%)\": \"The fee percentage for the pool on Uniswap (0.05%, 0.3%, 1%)\",\n  \"Fee Tier:\": \"Fee Tier:\",\n  \"Reward Token:\": \"Reward Token:\",\n  \"Active CTokens:\": \"Active CTokens:\",\n  \"Balance:\": \"Balance:\",\n  \"Admin?\": \"Admin?\",\n  \"There are no RewardsDistributors for this pool.\": \"There are no RewardsDistributors for this pool.\",\n  \"Add Rewards Distributor\": \"Add Rewards Distributor\",\n  \"Verified Pools\": \"Verified Pools\",\n  \"Deploy Rewards Distributor\": \"Deploy Rewards Distributor\",\n  \"Edit Rewards Distributor\": \"Edit Rewards Distributor\",\n  \"Claim\": \"Claim\",\n  \"Claim Rewards\": \"Claim Rewards\",\n  \"Claim All\": \"Claim All\",\n  \"Liquidations\": \"Liquidations\",\n  \"RewardsDistributor Address:\": \"RewardsDistributor Address:\",\n  \"Deploy RewardsDistributor\": \"Deploy RewardsDistributor\",\n  \"Add RewardsDistributor\": \"Add RewardsDistributor\"\n}\n"
  },
  {
    "path": "src/locales/zh-CN.json",
    "content": "{\n  \"Deposit\": \"储值\",\n  \"Withdraw\": \"提款\",\n  \"Loading your balance of {{token}}...\": \"正在加载您的{{token}}余额...\",\n  \"You don't have enough {{token}}.\": \"您没有足够的{{token}}。\",\n  \"Enter a valid amount to deposit.\": \"输入有效的储值金额。\",\n  \"Enter a valid amount to withdraw.\": \"输入有效的提款金额。\",\n  \"Confirm\": \"确认\",\n  \"MAX\": \"最大\",\n  \"Options\": \"选件\",\n  \"Want to withdraw?\": \"要提款吗？\",\n  \"Want to deposit?\": \"要储值吗？\",\n  \"Select A Token\": \"选择一个代币\",\n  \"Try searching for 'USDC'\": \"尝试搜索“ USDC”\",\n  \"Whoops! Looks like something went wrong!\": \"哎呀！ 好像出了点问题！\",\n  \"You can either reload the page, or report this error to us on our\": \"您可以重新加载页面，也可以在我们的页面上向我们报告此错误\",\n  \"Account Balance\": \"账户余额\",\n  \"Interest Earned\": \"利息\",\n  \"Month\": \"月\",\n  \"Week\": \"周\",\n  \"Strategy Allocation\": \"策略分配\",\n  \"Account\": \"帐户\",\n  \"Switch Wallet\": \"调换钱包\",\n  \"Connect with a browser extension\": \"连接浏览器扩展\",\n  \"Scan with a wallet to connect\": \"用钱包扫描以进行连接\",\n  \"Latest Rari News\": \"最新Rari新闻\",\n  \"ETH Pool\": \"ETH池\",\n  \"Yield Pool\": \"收益池\",\n  \"High risk, high reward\": \"高风险，高回报\",\n  \"Total Value Locked\": \"总锁定价值\",\n  \"Your balance in this pool\": \"您在此池中的余额\",\n  \"RGT Supply\": \"RGT供给\",\n  \"Extra yield from $RGT\": \"RGT带来的额外收益\",\n  \"Claim RGT\": \"索取RGT\",\n  \"Rari Governance Token Price\": \"Rari Governance Token价格\",\n  \"Year\": \"年\",\n  \"Max\": \"最高\",\n  \"Current APY\": \"当前APY\",\n  \"RGT Balance (Claimed)\": \"RGT余额（已索取）\",\n  \"Extra returns from $RGT\": \"$RGT带来的额外收益\",\n  \"You may experience divergence loss in this pool. Click for more info.\": \"您可能会在此池中遇到差异损失。单击以获取更多信息。\",\n  \"You cannot withdraw this much {{token}}.\": \"不能提取这么多{{token}}。\",\n  \"Prices and/or slippage have changed. Please reload the page and try again. If the problem persists, please contact us.\": \"价格和/或滑点已更变。请刷新页面，然后再试一次。如果问题仍然存在，请与我们联系。\",\n  \"Choose which token you want to deposit.\": \"选择您要储值的代币。\",\n  \"Choose which token you want to withdraw.\": \"选择您要提取的代币。\",\n  \"Check your wallet to submit the transactions\": \"检查您的钱包以提交交易\",\n  \"Check your wallet to submit the transaction\": \"检查您的钱包以提交交易\",\n  \"Do not close this tab until you submit both transactions!\": \"在提交所有交易之前不要关闭此页签！\",\n  \"You may close this tab after submitting the transaction.\": \"您可以在提交交易后关闭此页签。\",\n  \"Review\": \"复查\",\n  \"You will deposit {{amount}}. Click confirm to approve.\": \"您将存入{{amount}}。 点击批准。\",\n  \"Click review + confirm to withdraw!\": \"点击查看+确认得以提款！\",\n  \"You will withdraw {{amount}}. Click confirm to approve.\": \"您将提取{{amount}}。 点击确认得以批准。\",\n  \"1 Year of Returns Simulated Using Current Yields\": \"以当前收益率模拟1年的收益\",\n  \"You may experience divergence loss when depositing stablecoins into the Yield Pool that are above their peg at the time of deposit. The Yield Pool is composed of various stablecoins which shift in value, causing your balance to fluctuate.\": \"当将稳定币存入收益池中高于钉住汇率时，您可能会遇到发散损失。收益池是由各种稳定币组成的，这些稳定币的价值会发生变化，从而导致您的余额有所波动。\",\n  \"Currently earning\": \"目前收入\",\n  \"APY Based On Returns From\": \"APY基于过去的回报\",\n  \"This Month\": \"这个月\",\n  \"This Week\": \"这一周\",\n  \"Compare Returns\": \"比较回报\",\n  \"Token Allocation\": \"代币分配\",\n  \"Recent Trades\": \"最新交易\",\n  \"View Transaction History\": \"查看交易记录\",\n  \"This chart is generated using the APYs of each pool (shown at the bottom of this page). It introduces a random variance in the APY each day, with a max of 2x the current pool APY, and a minimum of 0% APY. It does not account for large changes in APY (greater than 2x), divergence loss in the Yield Pool, or take into account ETH price. The ETH Pool simulation is not denominated in ETH, instead it simulates returns on USD using the current APY of the ETH Pool. In the ETH pool you are exposed to the price movements of ETH (which is not shown or accounted for in this simulation).\": \"该图表是由用每个池的APY生成的（显示在此页面的底部）。 它每天在APY中引入随机变量的方差，最限度会有当前池的APY的2倍，最小有0％APY。 它不考虑APY的较大变化（大于2倍），收益池中的差异损失，或ETH价格。 ETH池模拟不是以ETH计价，而是模拟ETH池的当前APY以美元为单位的收益。 在ETH池中，您会面临ETH的价格变动（在此模拟中未显示和计量）。\",\n  \"Overview\": \"总览\",\n  \"Moved\": \"转移\",\n  \"Access\": \"访问\",\n  \"Forums\": \"论坛\",\n  \"Do not increase the price of gas more than 1.5x the prefilled amount!\": \"油价不要增加超过预充量的1.5倍！\",\n  \"Tranches\": \"分档\",\n  \"Access Saffron Finance tranches through the Rari Capital interface!\": \"通过Rari Capital界面访问Saffron Finance的分档！\",\n  \"Current SFI Price\": \"当前SFI价格\",\n  \"SFI Pool Distributions\": \"SFI池分配\",\n  \"Pool\": \"池\",\n  \"Tranche\": \"档\",\n  \"Learn More\": \"更多资讯\",\n  \"Tranche Details\": \"分档详细信息\",\n  \"Deposits are locked until the end of each 2 week epoch.\": \"存款将被锁定直到每个2周时期结束。\",\n  \"SFI staking is required to enter the A tranche!\": \"必须进行SFI质押才能进入A档！\",\n  \"SFI and interest is distributed to LPs proportionally at the end of each epoch.\": \"SFI和利息收入在每个时期结束时按比例分配给LP。\",\n  \"Liquidity added to other tranches as needed.\": \"流动资金可根据需要添加到其他分档。\",\n  \"Epoch {{epoch}} Redemption Date\": \"时期{{epoch}}兑换日期\",\n  \"Principal Amount\": \"本金\",\n  \"You need {{sfiMissing}} more SFI to deposit (1 SFI : {{sfiRatio}} {{tranchePool}})\": \"您需要另外{{sfiMissing}}個SFI才能進行存款（1個SFI：{{sfiRatio}} {{tranchePool}}）\",\n  \"Do not close this tab until you submit all transactions!\": \"提交所有交易之前，请不要关闭此页签！\",\n  \"Your balance in this tranche\": \"您在个分档中的余额\",\n  \"High slippage of {{formattedSlippage}} for {{token}}, do you still wish to continue with this transaction?\": \"{{token}}有{{formattedSlippage}}高的滑点，您是否仍然希望继续进行此交易？\",\n  \"Saffron Finance has not been fully audited. Take caution when entering these tranches and do not deposit more than you are comfortable losing.\": \"Saffron Finance尚未经过全面审核。 使用这些分档时要小心，不要冒险超过您可以承受的损失金额。\",\n  \"Reduced interest earned. Covered in case of failure by A tranche.\": \"减少得取的利息。 A档失败将提供保障。\",\n  \"10x interest earned. Cover provided to AA tranche in case of failure.\": \"赚取10倍的利息。 如果发生失利，将提供给AA档保障。\",\n  \"Estimated SFI Earnings\": \"SFI预估收益\",\n  \"Withdraw From Past Epochs\": \"从过去的时期退出\",\n  \"{{trancheRating}} Tranche Deposit\": \"{{trancheRating}}分档存款\",\n  \"Assets:\": \"资产:\",\n  \"Whitelist\": \"白名单\",\n  \"Add Asset\": \"添加资产\",\n  \"Collateral Factor\": \"抵押因子\",\n  \"Reserve Factor\": \"备用金因子\",\n  \"Oracle\": \"预言机\",\n  \"Interest Model\": \"利率模型\",\n  \"Pool {{num}} Info\": \"池{{num}}信息\",\n  \"Total Supplied\": \"总供应量\",\n  \"Total Borrowed\": \"借取总额\",\n  \"Current Utilization\": \"当前利用率\",\n  \"Asset\": \"资产\",\n  \"Balance\": \"余额\",\n  \"Collateral\": \"抵押品\",\n  \"Borrow Balance:\": \"借款余额:\",\n  \"Liquidity\": \"流动性\",\n  \"Pool Assets\": \"池中资产\",\n  \"Pool Number\": \"池号\",\n  \"Fuse\": \"Fuse\",\n  \"Your Supply Balance\": \"您的供应额\",\n  \"Your Borrow Balance\": \"您的借款额\",\n  \"Search:\": \"搜索\",\n  \"My Pools\": \"我的池\",\n  \"Pool #{{poolId}}\": \"池＃{{poolId}}\",\n  \"New Pool\": \"新池\",\n  \"Create\": \"创造\",\n  \"Borrow Limit\": \"借款限额\",\n  \"Supply Balance:\": \"供应余额：\",\n  \"Enter a valid amount to supply.\": \"输入要供应的有效金额。\",\n  \"Enter a valid amount to borrow.\": \"输入要借入的有效金额。\",\n  \"Enter a valid amount to repay.\": \"输入要还款的有效金额。\",\n  \"Supply\": \"供应\",\n  \"Borrow\": \"借\",\n  \"Repay\": \"偿还\",\n  \"This pool has performance fees. Click to learn more.\": \"该池收取表现费。 点击了解更多。\",\n  \"This pool has withdrawal & interest fees. Click to learn more.\": \"该池有提款和利息费用。 点击了解更多。\",\n  \"You will withdraw {{amount}} before fees. Click confirm to approve.\": \"您将在收费前提取{{amount}}。 点击确认以批准。\",\n  \"Sushiswap LP Rewards\": \"Sushiswap流动性提供者奖励\",\n  \"Earn additional rewards for providing RGT liquidity on Sushiswap!\": \"在Sushiswap上提供RGT流动性可获得更多奖励！\",\n  \"Pool2\": \"池2\",\n  \"RGT-ETH Pool\": \"RGT-ETH池\",\n  \"Bonus Rewards End\": \"额外奖励结束\",\n  \"Bonus Rewards Begin\": \"额外奖励开始\",\n  \"Deposit your LP tokens here to earn bonus RGT rewards!\": \"将您的LP代币存入此处，以获得额外RGT奖励！\",\n  \"Total Staked (USD)\": \"抵押總額（美元）\",\n  \"RGT Earned\": \"获得的RGT\",\n  \"Provide liquidity to the RGT-ETH pool to acquire LP tokens\": \"向RGT-ETH池提供流动性以获取LP代币\",\n  \"here\": \"这里\",\n  \"and stake them for extra rewards!\": \"并抵押它们以获得额外的奖励！\",\n  \"Your Balance\": \"您的余额\",\n  \"Click confirm to continue!\": \"点击确认继续！\",\n  \"Keep this bar from filling up to avoid being liquidated!\": \"请避免填充此栏，以免被強行清算！\",\n  \"If your borrow amount reaches this value, you will be liquidated.\": \"如果您的借款金额达到此值，您将被強行清算。\",\n  \"Supply Balance\": \"供应额\",\n  \"Debt Balance\": \"债务额\",\n  \"Supply APY\": \"供应年收益\",\n  \"Borrow APY\": \"借款年利率\",\n  \"Available Liquidity\": \"可用的流动性\",\n  \"Upgradeable\": \"可升级\",\n  \"Admin (copied!)\": \"管理员（已复制！）\",\n  \"Admin (click to copy)\": \"管理员（点击复制）\",\n  \"Platform Fee\": \"平台费\",\n  \"Average Admin Fee\": \"平均管理费\",\n  \"Unrecognized Oracle\": \"无法识别的预言机\",\n  \"No graph is available for this asset's interest curves.\": \"该资产的利息曲线目前没有可用的图表。\",\n  \"Edit\": \"编辑\",\n  \"Create Pool\": \"创建池\",\n  \"Name\": \"姓名\",\n  \"If enabled you will be able to limit the ability to supply to the pool to a select group of addresses. The pool will not show up on the 'all pools' list.\": \"如果启用，您将能限定提供一组地址在该池供应。 该池不会显示在“所有池”列表中。\",\n  \"Whitelisted\": \"白名单\",\n  \"The percent, ranging from 0% to 100%, of a liquidatable account's borrow that can be repaid in a single liquidate transaction. If a user has multiple borrowed assets, the closeFactor applies to any single borrowed asset, not the aggregated value of a user’s outstanding borrowing. Compound's close factor is 50%.\": \"可強行清算账户的百分比，范围从0％到100％，可以在一次清算交易中偿还。 如果用户拥有多个借入资产，则closeFactor会应用于任何单个借入资产，而不是用户未偿还借贷的总价值。 Compound的关闭因子为50％。\",\n  \"Close Factor\": \"关闭因子\",\n  \"The additional collateral given to liquidators as an incentive to perform liquidation of underwater accounts. For example, if the liquidation incentive is 10%, liquidators receive an extra 10% of the borrowers collateral for every unit they close. Compound's liquidation incentive is 8%.\": \"为清算人提供的额外抵押品，以激励他们进行水下账户清算。 例如，如果清算激励为10％，清算人关闭的每个单位将额外获得借款人抵押品的10％。 Compound的清算激励为8％。\",\n  \"Liquidation Incentive\": \"清算激励\",\n  \"There are no assets in this pool.\": \"此池中没有任何资产。\",\n  \"Created Pools\": \"创建的池\",\n  \"Already added:\": \"已经加入：\",\n  \"Pool {{num}} Configuration\": \"池{{num}}配置\",\n  \"Assets Configuration\": \"资产配置\",\n  \"Save\": \"保存\",\n  \"None\": \"沒有\",\n  \"Collateral factor can range from 0-90%, and represents the proportionate increase in liquidity (borrow limit) that an account receives by depositing the asset.\": \"抵押因子可以在0-90％的範圍內，代表帳戶通過存入資產而獲得的流動性（借款限額）的成比例增長。\",\n  \"The fraction of interest generated on a given asset that is routed to the asset's Reserve Pool. The Reserve Pool protects lenders against borrower default and liquidation malfunction.\": \"在給定資產上產生的利息部分，將其转移到該資產的儲備庫。 儲備池可保護供应方免受借款方違約和清算故障的影響。\",\n  \"The fraction of interest generated on a given asset that is routed to the asset's admin address as a fee.\": \"在給定資產上產生的利息部分，作為費用被转移到該資產的管理地址。\",\n  \"Admin Fee\": \"管理費\",\n  \"The interest rate model chosen for an asset defines the rates of interest for borrowers and suppliers at different utilization levels.\": \"為資產選擇的利率模型将定義不同利用率下借款方和供應方的利率。\",\n  \"Token Address: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\": \"代币地址: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n  \"Pool Risk Score\": \"该池风险评分\",\n  \"Total Value Supplied Across Fuse\": \"Fuse的总锁定价值\",\n  \"Pool Utilization\": \"池利用率\",\n  \"Enable As Collateral\": \"启用作为抵押\",\n  \"Pool #{{poolId}} Info\": \"池＃{{poolId}}信息\",\n  \"Metrics\": \"指标\",\n  \"Liquidity is the amount of this asset that is available to borrow (unborrowed). To see how much has been supplied and borrowed in total, navigate to the Pool Info tab.\": \"流动性是指该资产可借用（未借用）的数量。 要查看总共提供和借出了多少，请导航至“池信息”分页。\",\n  \"You don't have enough {{token}}!\": \"“您没有足够的{{token}}！\",\n  \"You don't have enough {{token}} or are over-repaying!\": \"您没有足够的{{token}}或还款过多！\",\n  \"You cannot withdraw this much!\": \"您不能提款这么多！\",\n  \"You cannot borrow this much!\": \"您不能借款这么多！\",\n  \"Pool Directory\": \"池目录\",\n  \"Pool {{num}}'s {{token}} Stats\": \"池{{num}}的{{token}}统计信息\",\n  \"Utilization\": \"使用率\",\n  \"Admin\": \"行政\",\n  \"Become Admin\": \"成为管理员\",\n  \"Positions\": \"您的仓位\",\n  \"APY\": \"年收益率\",\n  \"Total\": \"总共\",\n  \"Deposits\": \"存放\",\n  \"Interest\": \"利息\",\n  \"Growth\": \"成长\",\n  \"Borrows\": \"借取\",\n  \"Lend APY\": \"供应年收益\",\n  \"Net Balance\": \"净余额\",\n  \"Est. SFI Earnings\": \"SFI估算收入\",\n  \"DAI-S\": \"DAI-S\",\n  \"DAI\": \"DAI\",\n  \"N/A\": \"N/A\",\n  \"DAI-A\": \"DAI-A\",\n  \"RGT-ETH\": \"RGT-ETH\",\n  \"RGT\": \"RGT\",\n  \"Version\": \"版本\",\n  \"Debt\": \"债务\",\n  \"Product\": \"产品\",\n  \"Connect\": \"连接\",\n  \"Disconnect\": \"断开\",\n  \"Snapshot\": \"Snapshot\",\n  \"This is how much you have borrowed.\": \"这是您总共借的。\",\n  \"Recent Liquidations\": \"最近的清算\",\n  \"Collateral Seized\": \"被扣押的抵押品\",\n  \"Borrow Repaid\": \"借额还款\",\n  \"Timestamp\": \"时间标记\",\n  \"Liquidated\": \"已被清算\",\n  \"View More\": \"查看更多\",\n  \"View Less\": \"查看较少\",\n  \"View All\": \"查看全部\",\n  \"Collapse All\": \"全部收缩\",\n  \"USDC Pool\": \"USDC池\",\n  \"DAI Pool\": \"DAI池\",\n  \"Safe returns on USDC\": \"USDC的安全收益\",\n  \"Safe returns on DAI\": \"DAI的安全收益\",\n  \"Returns on ETH\": \"ETH回报\",\n  \"Revoke Rights\": \"撤销权利\",\n  \"USDC, DAI\": \"USDC, DAI\",\n  \"If enabled borrowing this asset will be disabled.\": \"如果启用借用此资产将被禁用。\",\n  \"Pause Borrowing\": \"暂停借阅\",\n  \"Enable Borrowing\": \"启用借用\",\n  \"APY/LTV\": \"APY/LTV\",\n  \"The Loan to Value (LTV) ratio defines the maximum amount of tokens in the pool that can be borrowed with a specific collateral. It’s expressed in percentage: if in a pool ETH has 75% LTV, for every 1 ETH worth of collateral, borrowers will be able to borrow 0.75 ETH worth of other tokens in the pool.\": \"贷款价值 (LTV) 比率是指池中可以用特定的抵押品来借入最大代币数量。 它以百分比表示：如果池中 ETH 的 LTV 为 75%，则每抵押 1 ETH，借款人将能够借入池中价值 0.75 ETH 的其他代币。\",\n  \"APY/TVL\": \"APY/TVL\",\n  \"Total Value Lent (TVL) measures how much of this asset has been supplied in total. TVL does not account for how much of the lent assets have been borrowed, use 'liquidity' to determine the total unborrowed assets lent.\": \"Total Value Lent (TVL) 衡量该资产的总供应量。 TVL 不计量借出资产的有多少。可以使用“流动性”来确定借出的未借入资产总额。\",\n  \"Governance\": \"治理\",\n  \"Interest Rates\": \"利率\",\n  \"Pools\": \"池\",\n  \"This page is currently in beta. If you notice any issues, please\": \"此页面目前处于测试阶段。 如果您发现任何问题，请\",\n  \"let us know!\": \"让我们知道！\",\n  \"This page is not optimized for use on smaller screens. Sorry for the inconvenience!\": \"此页面未针对在较小的屏幕上使用进行优化。 带来不便敬请谅解！\",\n  \"No assets match your search.\": \"没有资产符合您的搜索条件。\",\n  \"Lending Rates\": \"提供利率\",\n  \"Borrowing Rates\": \"借款利率\",\n  \"Search Assets\": \"搜索资产\",\n  \"Utilities\": \"工具\",\n  \"Audits\": \"审计\",\n  \"Developer Docs\": \"开发文档\",\n  \"Learn\": \"学习\",\n  \"Unverified Pools\": \"未审核借贷池\",\n  \"Previous\": \"上一步\",\n  \"Next\": \"下一步\",\n  \"Choose the best price oracle for this BaseToken.\": \"选择最适合的预言机\",\n  \"BaseToken Price Oracle\": \"预言机\",\n  \"Choose Oracle\": \"选择预言机\",\n  \"Choose the best price oracle for the asset.\": \"选择最适合的预言机\",\n  \"Price Oracle\": \"预言机\",\n  \"Update\": \"更新\",\n  \"This field will determine which pool your oracle reads from. Its safer with more liquidity.\": \"此字段将确定你的预言机会读取的借贷池\",\n  \"Pool:\": \"池\",\n  \"Choose Pool\": \"选择借贷池\",\n  \"TVL in pool as of this moment.\": \"此借贷池目前总锁仓价值\",\n  \"Liquidity:\": \"流动性\",\n  \"The fee percentage for the pool on Uniswap (0.05%, 0.3%, 1%)\": \"此池在Uniswap的费用 (0.05%, 0.3%, 1%)\",\n  \"Fee Tier:\": \"费用等级\",\n  \"Reward Token:\": \"奖励Token\",\n  \"Active CTokens:\": \"活跃CTokens\",\n  \"Balance:\": \"余额\",\n  \"Admin?\": \"管理员?\",\n  \"There are no RewardsDistributors for this pool.\": \"此池没有RewardsDistributors\",\n  \"Add Rewards Distributor\": \"加入Rewards Distributors\",\n  \"Verified Pools\": \"审核过的借贷池\",\n  \"Deploy Rewards Distributor\": \"部署Rewards Distributor\",\n  \"Edit Rewards Distributor\": \"编辑Rewards Distributor\",\n  \"Claim\": \"索取\",\n  \"Claim Rewards\": \"索取奖励\",\n  \"Claim All\": \"索取所有\",\n  \"Liquidations\": \"清算\",\n  \"RewardsDistributor Address:\": \"RewardsDistributor 地址\",\n  \"Deploy RewardsDistributor\": \"部署Rewards Distributors\",\n  \"Add RewardsDistributor\": \"加Rewards Distributors\"\n}\n"
  },
  {
    "path": "src/locales/zh-TW.json",
    "content": "{\n  \"Deposit\": \"儲值\",\n  \"Withdraw\": \"提款\",\n  \"Loading your balance of {{token}}...\": \"正在加載您的{{token}}餘額...\",\n  \"You don't have enough {{token}}.\": \"您沒有足夠的{{token}}。\",\n  \"Enter a valid amount to deposit.\": \"輸入有效的儲值金額。\",\n  \"Enter a valid amount to withdraw.\": \"輸入有效的提款金額。\",\n  \"Confirm\": \"確認\",\n  \"MAX\": \"最大\",\n  \"Options\": \"選件\",\n  \"Want to withdraw?\": \"要提款嗎？\",\n  \"Want to deposit?\": \"要儲值嗎？\",\n  \"Select A Token\": \"選擇一個代幣\",\n  \"Try searching for 'USDC'\": \"嘗試搜索“ USDC”\",\n  \"Whoops! Looks like something went wrong!\": \"哎呀！ 好像出了點問題！\",\n  \"You can either reload the page, or report this error to us on our\": \"您可以重新加載頁面，也可以在我們的頁面上向我們報告此錯誤\",\n  \"Account Balance\": \"賬戶餘額\",\n  \"Interest Earned\": \"利息\",\n  \"Month\": \"月\",\n  \"Week\": \"周\",\n  \"Strategy Allocation\": \"策略分配\",\n  \"Account\": \"帳戶\",\n  \"Switch Wallet\": \"調換錢包\",\n  \"Connect with a browser extension\": \"連接瀏覽器擴展\",\n  \"Scan with a wallet to connect\": \"用錢包掃描以進行連接\",\n  \"Latest Rari News\": \"最新Rari新聞\",\n  \"ETH Pool\": \"ETH池\",\n  \"Yield Pool\": \"收益池\",\n  \"High risk, high reward\": \"高風險，高回報\",\n  \"Total Value Locked\": \"總鎖定價值\",\n  \"Your balance in this pool\": \"您在此池中的餘額\",\n  \"RGT Supply\": \"RGT供給\",\n  \"Extra yield from $RGT\": \"RGT帶來的額外收益\",\n  \"Claim RGT\": \"索取RGT\",\n  \"Rari Governance Token Price\": \"Rari Governance Token價格\",\n  \"Year\": \"年\",\n  \"Max\": \"最高\",\n  \"Current APY\": \"當前APY\",\n  \"RGT Balance (Claimed)\": \"RGT餘額（已索取）\",\n  \"Extra returns from $RGT\": \"$RGT帶來的額外收益\",\n  \"You may experience divergence loss in this pool. Click for more info.\": \"您可能會在此池中遇到差異損失。單擊以獲取更多信息。\",\n  \"You cannot withdraw this much {{token}}.\": \"不能提取這麽多{{token}}。\",\n  \"Prices and/or slippage have changed. Please reload the page and try again. If the problem persists, please contact us.\": \"價格和/或滑點已更變。請刷新頁面，然後再試一次。如果問題仍然存在，請與我們聯系。\",\n  \"Choose which token you want to deposit.\": \"選擇您要儲值的代幣。\",\n  \"Choose which token you want to withdraw.\": \"選擇您要提取的代幣。\",\n  \"Check your wallet to submit the transactions\": \"檢查您的錢包以提交交易\",\n  \"Check your wallet to submit the transaction\": \"檢查您的錢包以提交交易\",\n  \"Do not close this tab until you submit both transactions!\": \"在提交所有交易之前不要關閉此頁簽！\",\n  \"You may close this tab after submitting the transaction.\": \"您可以在提交交易後關閉此頁簽。\",\n  \"Review\": \"復查\",\n  \"You will deposit {{amount}}. Click confirm to approve.\": \"您將存入{{amount}}。 點擊批準。\",\n  \"Click review + confirm to withdraw!\": \"點擊查看+確認得以提款！\",\n  \"You will withdraw {{amount}}. Click confirm to approve.\": \"您將提取{{amount}}。 點擊確認得以批準。\",\n  \"1 Year of Returns Simulated Using Current Yields\": \"以當前收益率模擬1年的收益\",\n  \"You may experience divergence loss when depositing stablecoins into the Yield Pool that are above their peg at the time of deposit. The Yield Pool is composed of various stablecoins which shift in value, causing your balance to fluctuate.\": \"當將穩定幣存入收益池中高於釘住匯率時，您可能會遇到發散損失。收益池是由各種穩定幣組成的，這些穩定幣的價值會發生變化，從而導致您的餘額有所波動。\",\n  \"Currently earning\": \"目前收入\",\n  \"APY Based On Returns From\": \"APY基於過去的回報\",\n  \"This Month\": \"這個月\",\n  \"This Week\": \"這一周\",\n  \"Compare Returns\": \"比較回報\",\n  \"Token Allocation\": \"代幣分配\",\n  \"Recent Trades\": \"最新交易\",\n  \"View Transaction History\": \"查看交易記錄\",\n  \"This chart is generated using the APYs of each pool (shown at the bottom of this page). It introduces a random variance in the APY each day, with a max of 2x the current pool APY, and a minimum of 0% APY. It does not account for large changes in APY (greater than 2x), divergence loss in the Yield Pool, or take into account ETH price. The ETH Pool simulation is not denominated in ETH, instead it simulates returns on USD using the current APY of the ETH Pool. In the ETH pool you are exposed to the price movements of ETH (which is not shown or accounted for in this simulation).\": \"該圖表是由用每個池的APY生成的（顯示在此頁面的底部）。 它每天在APY中引入隨機變量的方差，最限度會有當前池的APY的2倍，最小有0％APY。 它不考慮APY的較大變化（大於2倍），收益池中的差異損失，或ETH價格。 ETH池模擬不是以ETH計價，而是模擬ETH池的當前APY以美元為單位的收益。 在ETH池中，您會面臨ETH的價格變動（在此模擬中未顯示和計量）。\",\n  \"Overview\": \"總覽\",\n  \"Moved\": \"轉移\",\n  \"Access\": \"訪問\",\n  \"Forums\": \"論壇\",\n  \"Do not increase the price of gas more than 1.5x the prefilled amount!\": \"油價不要增加超過預充量的1.5倍！\",\n  \"Tranches\": \"分檔\",\n  \"Access Saffron Finance tranches through the Rari Capital interface!\": \"通過Rari Capital界面訪問Saffron Finance的分檔！\",\n  \"Current SFI Price\": \"當前SFI價格\",\n  \"SFI Pool Distributions\": \"SFI池分配\",\n  \"Pool\": \"池\",\n  \"Tranche\": \"檔\",\n  \"Learn More\": \"更多資訊\",\n  \"Tranche Details\": \"分檔詳細信息\",\n  \"Deposits are locked until the end of each 2 week epoch.\": \"存款將被鎖定直到每個2周時期結束。\",\n  \"SFI staking is required to enter the A tranche!\": \"必須進行SFI質押才能進入A檔！\",\n  \"SFI and interest is distributed to LPs proportionally at the end of each epoch.\": \"SFI和利息收入在每個時期結束時按比例分配給LP。\",\n  \"Liquidity added to other tranches as needed.\": \"流動資金可根據需要添加到其他分檔。\",\n  \"Epoch {{epoch}} Redemption Date\": \"時期{{epoch}}兌換日期\",\n  \"Principal Amount\": \"本金\",\n  \"You need {{sfiMissing}} more SFI to deposit (1 SFI : {{sfiRatio}} {{tranchePool}})\": \"您需要另外{{sfiMissing}}個SFI才能進行存款（1個SFI：{{sfiRatio}} {{tranchePool}}）\",\n  \"Do not close this tab until you submit all transactions!\": \"提交所有交易之前，請不要關閉此頁簽！\",\n  \"Your balance in this tranche\": \"您在個分檔中的餘額\",\n  \"High slippage of {{formattedSlippage}} for {{token}}, do you still wish to continue with this transaction?\": \"{{token}}有{{formattedSlippage}}高的滑點，您是否仍然希望繼續進行此交易？\",\n  \"Saffron Finance has not been fully audited. Take caution when entering these tranches and do not deposit more than you are comfortable losing.\": \"Saffron Finance尚未經過全面審核。 使用這些分檔時要小心，不要冒險超過您可以承受的損失金額。\",\n  \"Reduced interest earned. Covered in case of failure by A tranche.\": \"減少得取的利息。 A檔失敗將提供保障。\",\n  \"10x interest earned. Cover provided to AA tranche in case of failure.\": \"賺取10倍的利息。 如果發生失利，將提供給AA檔保障。\",\n  \"Estimated SFI Earnings\": \"SFI預估收益\",\n  \"Withdraw From Past Epochs\": \"從過去的時期退出\",\n  \"{{trancheRating}} Tranche Deposit\": \"{{trancheRating}}分檔存款\",\n  \"Assets:\": \"資產:\",\n  \"Whitelist\": \"白名單\",\n  \"Add Asset\": \"添加資產\",\n  \"Collateral Factor\": \"抵押因子\",\n  \"Reserve Factor\": \"備用金因子\",\n  \"Oracle\": \"預言機\",\n  \"Interest Model\": \"利率模型\",\n  \"Pool {{num}} Info\": \"池{{num}}信息\",\n  \"Total Supplied\": \"總供應量\",\n  \"Total Borrowed\": \"借取總額\",\n  \"Current Utilization\": \"當前利用率\",\n  \"Asset\": \"資產\",\n  \"Balance\": \"餘額\",\n  \"Collateral\": \"抵押品\",\n  \"Borrow Balance:\": \"借款餘額:\",\n  \"Liquidity\": \"流動性\",\n  \"Pool Assets\": \"池中資產\",\n  \"Pool Number\": \"池號\",\n  \"Fuse\": \"Fuse\",\n  \"Your Supply Balance\": \"您的供應額\",\n  \"Your Borrow Balance\": \"您的借款額\",\n  \"Search:\": \"搜索\",\n  \"My Pools\": \"我的池\",\n  \"Pool #{{poolId}}\": \"池＃{{poolId}}\",\n  \"New Pool\": \"新池\",\n  \"Create\": \"創造\",\n  \"Borrow Limit\": \"借款限額\",\n  \"Supply Balance:\": \"供應餘額：\",\n  \"Enter a valid amount to supply.\": \"輸入要供應的有效金額。\",\n  \"Enter a valid amount to borrow.\": \"輸入要借入的有效金額。\",\n  \"Enter a valid amount to repay.\": \"輸入要還款的有效金額。\",\n  \"Supply\": \"供應\",\n  \"Borrow\": \"借\",\n  \"Repay\": \"償還\",\n  \"This pool has performance fees. Click to learn more.\": \"該池收取表現費。 點擊了解更多。\",\n  \"This pool has withdrawal & interest fees. Click to learn more.\": \"該池有提款和利息費用。 點擊了解更多。\",\n  \"You will withdraw {{amount}} before fees. Click confirm to approve.\": \"您將在收費前提取{{amount}}。 點擊確認以批準。\",\n  \"Sushiswap LP Rewards\": \"Sushiswap流動性提供者獎勵\",\n  \"Earn additional rewards for providing RGT liquidity on Sushiswap!\": \"在Sushiswap上提供RGT流動性可獲得更多獎勵！\",\n  \"Pool2\": \"池2\",\n  \"RGT-ETH Pool\": \"RGT-ETH池\",\n  \"Bonus Rewards End\": \"額外獎勵結束\",\n  \"Bonus Rewards Begin\": \"額外獎勵開始\",\n  \"Deposit your LP tokens here to earn bonus RGT rewards!\": \"將您的LP代幣存入此處，以獲得額外RGT獎勵！\",\n  \"Total Staked (USD)\": \"抵押總額（美元）\",\n  \"RGT Earned\": \"獲得的RGT\",\n  \"Provide liquidity to the RGT-ETH pool to acquire LP tokens\": \"向RGT-ETH池提供流動性以獲取LP代幣\",\n  \"here\": \"這裏\",\n  \"and stake them for extra rewards!\": \"並抵押它們以獲得額外的獎勵！\",\n  \"Your Balance\": \"您的餘額\",\n  \"Click confirm to continue!\": \"點擊確認繼續！\",\n  \"Keep this bar from filling up to avoid being liquidated!\": \"請避免填充此欄，以免被強行清算！\",\n  \"If your borrow amount reaches this value, you will be liquidated.\": \"如果您的借款金額達到此值，您將被強行清算。\",\n  \"Supply Balance\": \"供應額\",\n  \"Debt Balance\": \"債務額\",\n  \"Supply APY\": \"供應年收益\",\n  \"Available Liquidity\": \"可用的流動性\",\n  \"Upgradeable\": \"可升級\",\n  \"Admin (copied!)\": \"管理員（已復製！）\",\n  \"Admin (click to copy)\": \"管理員（點擊復製）\",\n  \"Platform Fee\": \"平臺費\",\n  \"Average Admin Fee\": \"平均管理費\",\n  \"Unrecognized Oracle\": \"無法識別的預言機\",\n  \"No graph is available for this asset's interest curves.\": \"該資產的利息曲線目前沒有可用的圖表。\",\n  \"Edit\": \"編輯\",\n  \"Create Pool\": \"創建池\",\n  \"Name\": \"姓名\",\n  \"If enabled you will be able to limit the ability to supply to the pool to a select group of addresses. The pool will not show up on the 'all pools' list.\": \"如果啟用，您將能限定提供一組地址在該池供應。 該池不會顯示在“所有池”列表中。\",\n  \"Whitelisted\": \"白名單\",\n  \"The percent, ranging from 0% to 100%, of a liquidatable account's borrow that can be repaid in a single liquidate transaction. If a user has multiple borrowed assets, the closeFactor applies to any single borrowed asset, not the aggregated value of a user’s outstanding borrowing. Compound's close factor is 50%.\": \"可強行清算賬戶的百分比，範圍從0％到100％，可以在一次清算交易中償還。 如果用戶擁有多個借入資產，則closeFactor會應用於任何單個借入資產，而不是用戶未償還借貸的總價值。 Compound的關閉因子為50％。\",\n  \"Close Factor\": \"關閉因子\",\n  \"The additional collateral given to liquidators as an incentive to perform liquidation of underwater accounts. For example, if the liquidation incentive is 10%, liquidators receive an extra 10% of the borrowers collateral for every unit they close. Compound's liquidation incentive is 8%.\": \"為清算人提供的額外抵押品，以激勵他們進行水下賬戶清算。 例如，如果清算激勵為10％，清算人關閉的每個單位將額外獲得借款人抵押品的10％。 Compound的清算激勵為8％。\",\n  \"Liquidation Incentive\": \"清算激勵\",\n  \"There are no assets in this pool.\": \"此池中沒有任何資產。\",\n  \"Created Pools\": \"創建的池\",\n  \"Already added:\": \"已經加入：\",\n  \"Pool {{num}} Configuration\": \"池{{num}}配置\",\n  \"Assets Configuration\": \"資產配置\",\n  \"Save\": \"保存\",\n  \"None\": \"沒有\",\n  \"Collateral factor can range from 0-90%, and represents the proportionate increase in liquidity (borrow limit) that an account receives by depositing the asset.\": \"抵押因子可以在0-90％的範圍內，代表帳戶通過存入資產而獲得的流動性（借款限額）的成比例增長。\",\n  \"The fraction of interest generated on a given asset that is routed to the asset's Reserve Pool. The Reserve Pool protects lenders against borrower default and liquidation malfunction.\": \"在給定資產上產生的利息部分，將其轉移到該資產的儲備庫。 儲備池可保護供應方免受借款方違約和清算故障的影響。\",\n  \"The fraction of interest generated on a given asset that is routed to the asset's admin address as a fee.\": \"在給定資產上產生的利息部分，作為費用被轉移到該資產的管理地址。\",\n  \"Admin Fee\": \"管理費\",\n  \"The interest rate model chosen for an asset defines the rates of interest for borrowers and suppliers at different utilization levels.\": \"為資產選擇的利率模型將定義不同利用率下借款方和供應方的利率。\",\n  \"Token Address: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\": \"代幣地址: 0xXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\",\n  \"Pool Risk Score\": \"該池風險評分\",\n  \"Total Value Supplied Across Fuse\": \"Fuse的總鎖定價值\",\n  \"Pool Utilization\": \"池利用率\",\n  \"Enable As Collateral\": \"啟用作為抵押\",\n  \"Pool #{{poolId}} Info\": \"池＃{{poolId}}信息\",\n  \"Metrics\": \"指標\",\n  \"Liquidity is the amount of this asset that is available to borrow (unborrowed). To see how much has been supplied and borrowed in total, navigate to the Pool Info tab.\": \"流動性是指該資產可借用（未借用）的數量。 要查看總共提供和借出了多少，請導航至“池信息”分頁。\",\n  \"You don't have enough {{token}}!\": \"“您沒有足夠的{{token}}！\",\n  \"You don't have enough {{token}} or are over-repaying!\": \"您沒有足夠的{{token}}或還款過多！\",\n  \"You cannot withdraw this much!\": \"您不能提款這麽多！\",\n  \"You cannot borrow this much!\": \"您不能借款這麽多！\",\n  \"Pool Directory\": \"池目錄\",\n  \"Pool {{num}}'s {{token}} Stats\": \"池{{num}}的{{token}}統計信息\",\n  \"Utilization\": \"使用率\",\n  \"Borrow APY\": \"借入年利率\",\n  \"Admin\": \"行政\",\n  \"Become Admin\": \"成為管理員\",\n  \"Positions\": \"您的倉位\",\n  \"APY\": \"年收益率\",\n  \"Total\": \"總共\",\n  \"Deposits\": \"存放\",\n  \"Interest\": \"利息\",\n  \"Growth\": \"成長\",\n  \"Borrows\": \"借取\",\n  \"Lend APY\": \"供應年收益\",\n  \"Net Balance\": \"凈餘額\",\n  \"Est. SFI Earnings\": \"SFI估算收入\",\n  \"DAI-S\": \"DAI-S\",\n  \"DAI\": \"DAI\",\n  \"N/A\": \"N/A\",\n  \"DAI-A\": \"DAI-A\",\n  \"RGT-ETH\": \"RGT-ETH\",\n  \"RGT\": \"RGT\",\n  \"Version\": \"版本\",\n  \"Debt\": \"債務\",\n  \"Product\": \"產品\",\n  \"Connect\": \"連接\",\n  \"Disconnect\": \"斷開\",\n  \"Snapshot\": \"Snapshot\",\n  \"This is how much you have borrowed.\": \"這是您總共借的。\",\n  \"Recent Liquidations\": \"最近的清算\",\n  \"Collateral Seized\": \"被扣押的抵押品\",\n  \"Borrow Repaid\": \"借額還款\",\n  \"Timestamp\": \"時間標記\",\n  \"Liquidated\": \"已被清算\",\n  \"View More\": \"查看更多\",\n  \"View Less\": \"查看較少\",\n  \"View All\": \"查看全部\",\n  \"Collapse All\": \"全部收縮\",\n  \"USDC Pool\": \"USDC池\",\n  \"DAI Pool\": \"DAI池\",\n  \"Safe returns on USDC\": \"USDC的安全收益\",\n  \"Safe returns on DAI\": \"DAI的安全收益\",\n  \"Returns on ETH\": \"ETH回報\",\n  \"Revoke Rights\": \"撤銷權利\",\n  \"USDC, DAI\": \"USDC, DAI\",\n  \"If enabled borrowing this asset will be disabled.\": \"如果啟用借用此資產將被禁用。\",\n  \"Pause Borrowing\": \"暫停借閱\",\n  \"Enable Borrowing\": \"啟用借用\",\n  \"APY/LTV\": \"APY/LTV\",\n  \"The Loan to Value (LTV) ratio defines the maximum amount of tokens in the pool that can be borrowed with a specific collateral. It’s expressed in percentage: if in a pool ETH has 75% LTV, for every 1 ETH worth of collateral, borrowers will be able to borrow 0.75 ETH worth of other tokens in the pool.\": \"貸款價值 (LTV) 比率是指池中可以用特定的抵押品來借入最大代幣數量。 它以百分比表示：如果池中 ETH 的 LTV 為 75%，則每抵押 1 ETH，借款人將能夠借入池中價值 0.75 ETH 的其他代幣。\",\n  \"APY/TVL\": \"APY/TVL\",\n  \"Total Value Lent (TVL) measures how much of this asset has been supplied in total. TVL does not account for how much of the lent assets have been borrowed, use 'liquidity' to determine the total unborrowed assets lent.\": \"Total Value Lent (TVL) 衡量該資產的總供應量。 TVL 不計量借出資產的有多少。可以使用“流動性”來確定借出的未借入資產總額。\",\n  \"Governance\": \"治理\",\n  \"Interest Rates\": \"利率\",\n  \"Pools\": \"池\",\n  \"This page is currently in beta. If you notice any issues, please\": \"此頁面目前處於測試階段。 如果您發現任何問題，請\",\n  \"let us know!\": \"讓我們知道！\",\n  \"This page is not optimized for use on smaller screens. Sorry for the inconvenience!\": \"此頁面未針對在較小的屏幕上使用進行優化。 帶來不便敬請諒解！\",\n  \"No assets match your search.\": \"沒有資產符合您的搜索條件。\",\n  \"Lending Rates\": \"提供利率\",\n  \"Borrowing Rates\": \"借款利率\",\n  \"Search Assets\": \"搜索資產\",\n  \"Utilities\": \"工具\",\n  \"Audits\": \"審計\",\n  \"Developer Docs\": \"開發文檔\",\n  \"Learn\": \"學習\",\n  \"Unverified Pools\": \"未審核借貸池\",\n  \"Previous\": \"上一步\",\n  \"Next\": \"下一步\",\n  \"Choose the best price oracle for this BaseToken.\": \"選擇最適合的預言機\",\n  \"BaseToken Price Oracle\": \"預言機\",\n  \"Choose Oracle\": \"選擇預言機\",\n  \"Choose the best price oracle for the asset.\": \"選擇最適合的預言機\",\n  \"Price Oracle\": \"預言機\",\n  \"Update\": \"更新\",\n  \"This field will determine which pool your oracle reads from. Its safer with more liquidity.\": \"此字段將確定你的預言機會讀取的借貸池\",\n  \"Pool:\": \"池\",\n  \"Choose Pool\": \"選擇借貸池\",\n  \"TVL in pool as of this moment.\": \"此借貸池目前總鎖倉價值\",\n  \"Liquidity:\": \"流動性\",\n  \"The fee percentage for the pool on Uniswap (0.05%, 0.3%, 1%)\": \"此池在Uniswap的費用 (0.05%, 0.3%, 1%)\",\n  \"Fee Tier:\": \"費用等級\",\n  \"Reward Token:\": \"獎勵Token\",\n  \"Active CTokens:\": \"活躍CTokens\",\n  \"Balance:\": \"餘額\",\n  \"Admin?\": \"管理員?\",\n  \"There are no RewardsDistributors for this pool.\": \"此池沒有RewardsDistributors\",\n  \"Add Rewards Distributor\": \"加入Rewards Distributors\",\n  \"Verified Pools\": \"審核過的借貸池\",\n  \"Deploy Rewards Distributor\": \"部署Rewards Distributor\",\n  \"Edit Rewards Distributor\": \"编辑Rewards Distributor\",\n  \"Claim\": \"索取\",\n  \"Claim Rewards\": \"索取獎勵\",\n  \"Claim All\": \"索取所有\",\n  \"Liquidations\": \"清算\",\n  \"RewardsDistributor Address:\": \"RewardsDistributor 地址\",\n  \"Deploy RewardsDistributor\": \"部署Rewards Distributors\",\n  \"Add RewardsDistributor\": \"加Rewards Distributors\"\n}\n"
  },
  {
    "path": "src/rari-sdk/0x.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\n\nexport const get0xSwapOrders = function (\n  inputTokenAddress,\n  outputTokenAddress,\n  maxInputAmountBN,\n  maxMakerAssetFillAmountBN\n) {\n  return new Promise(async function (resolve, reject) {\n    try {\n      var decoded = (\n        await axios.get(\n          \"https://api.0x.org/swap/v0/quote?affiliateAddress=0x10dB6Bce3F2AE1589ec91A872213DAE59697967a&excludedSources=mStable&sellToken=\" +\n            inputTokenAddress +\n            \"&buyToken=\" +\n            outputTokenAddress +\n            (maxMakerAssetFillAmountBN !== undefined &&\n            maxMakerAssetFillAmountBN !== null\n              ? \"&buyAmount=\" + maxMakerAssetFillAmountBN.toString()\n              : \"&sellAmount=\" + maxInputAmountBN.toString())\n        )\n      ).data;\n    } catch (error) {\n      if (\n        error.response &&\n        error.response.data.validationErrors &&\n        error.response.data.validationErrors[0].reason ===\n          \"INSUFFICIENT_ASSET_LIQUIDITY\"\n      )\n        return reject(\"Insufficient liquidity\");\n      return reject(\n        \"Error requesting quote from 0x swap API: \" + error.message\n      );\n    }\n\n    if (!decoded) return reject(\"Failed to decode quote from 0x swap API\");\n    if (!decoded.orders) return reject(\"No orders found on 0x swap API\");\n\n    decoded.orders.sort((a, b) =>\n      a.makerAssetAmount / (a.takerAssetAmount + a.takerFee) <\n      b.makerAssetAmount / (b.takerAssetAmount + b.takerFee)\n        ? 1\n        : -1\n    );\n\n    var orders = [];\n    var inputFilledAmountBN = Web3.utils.toBN(0);\n    var takerAssetFilledAmountBN = Web3.utils.toBN(0);\n    var makerAssetFilledAmountBN = Web3.utils.toBN(0);\n\n    for (var i = 0; i < decoded.orders.length; i++) {\n      if (\n        decoded.orders[i].takerFee > 0 &&\n        decoded.orders[i].takerFeeAssetData.toLowerCase() !==\n          \"0xf47261b0000000000000000000000000\" + inputTokenAddress.toLowerCase()\n      )\n        continue;\n      var takerAssetAmountBN = Web3.utils.toBN(\n        decoded.orders[i].takerAssetAmount\n      );\n      var takerFeeBN = Web3.utils.toBN(decoded.orders[i].takerFee);\n      var orderInputAmountBN = takerAssetAmountBN.add(takerFeeBN); // Maximum amount we can send to this order including the taker fee\n      var makerAssetAmountBN = Web3.utils.toBN(\n        decoded.orders[i].makerAssetAmount\n      );\n\n      if (\n        maxMakerAssetFillAmountBN !== undefined &&\n        maxMakerAssetFillAmountBN !== null\n      ) {\n        // maxMakerAssetFillAmountBN is specified, so use it\n        if (\n          maxMakerAssetFillAmountBN\n            .sub(makerAssetFilledAmountBN)\n            .lte(makerAssetAmountBN)\n        ) {\n          // Calculate orderTakerAssetFillAmountBN and orderInputFillAmountBN from maxMakerAssetFillAmountBN\n          var orderMakerAssetFillAmountBN = maxMakerAssetFillAmountBN.sub(\n            makerAssetFilledAmountBN\n          );\n          var orderTakerAssetFillAmountBN = orderMakerAssetFillAmountBN\n            .mul(takerAssetAmountBN)\n            .div(makerAssetAmountBN);\n          var orderInputFillAmountBN = orderMakerAssetFillAmountBN\n            .mul(orderInputAmountBN)\n            .div(makerAssetAmountBN);\n\n          var tries = 0;\n          while (\n            makerAssetAmountBN\n              .mul(orderInputFillAmountBN)\n              .div(orderInputAmountBN)\n              .lt(orderMakerAssetFillAmountBN)\n          ) {\n            if (tries >= 1000)\n              return reject(\n                \"Failed to get increment order input amount to achieve desired output amount\"\n              );\n            orderInputFillAmountBN.iadd(Web3.utils.toBN(1)); // Make sure we have enough input fill amount to achieve this maker asset fill amount\n            tries++;\n          }\n        } else {\n          // Fill whole order\n          var orderMakerAssetFillAmountBN = makerAssetAmountBN;\n          var orderTakerAssetFillAmountBN = takerAssetAmountBN;\n          var orderInputFillAmountBN = orderInputAmountBN;\n        }\n\n        // If this order input amount is higher than the remaining input, calculate orderTakerAssetFillAmountBN and orderMakerAssetFillAmountBN from the remaining maxInputAmountBN as usual\n        if (\n          maxInputAmountBN !== undefined &&\n          maxInputAmountBN !== null &&\n          orderInputFillAmountBN.gt(maxInputAmountBN.sub(inputFilledAmountBN))\n        ) {\n          orderInputFillAmountBN = maxInputAmountBN.sub(inputFilledAmountBN);\n          orderTakerAssetFillAmountBN = orderInputFillAmountBN\n            .mul(takerAssetAmountBN)\n            .div(orderInputAmountBN);\n          orderMakerAssetFillAmountBN = orderInputFillAmountBN\n            .mul(makerAssetAmountBN)\n            .div(orderInputAmountBN);\n        }\n      } else {\n        // maxMakerAssetFillAmountBN is not specified, so use maxInputAmountBN\n        if (\n          maxInputAmountBN !== undefined &&\n          maxInputAmountBN !== null &&\n          maxInputAmountBN.sub(inputFilledAmountBN).lte(orderInputAmountBN)\n        ) {\n          // Calculate orderInputFillAmountBN and orderTakerAssetFillAmountBN from the remaining maxInputAmountBN as usual\n          var orderInputFillAmountBN = maxInputAmountBN.sub(\n            inputFilledAmountBN\n          );\n          var orderTakerAssetFillAmountBN = orderInputFillAmountBN\n            .mul(takerAssetAmountBN)\n            .div(orderInputAmountBN);\n          var orderMakerAssetFillAmountBN = orderInputFillAmountBN\n            .mul(makerAssetAmountBN)\n            .div(orderInputAmountBN);\n        } else {\n          // Fill whole order\n          var orderInputFillAmountBN = orderInputAmountBN;\n          var orderTakerAssetFillAmountBN = takerAssetAmountBN;\n          var orderMakerAssetFillAmountBN = makerAssetAmountBN;\n        }\n      }\n\n      // Add order to returned array\n      orders.push(decoded.orders[i]);\n\n      // Add order fill amounts to total fill amounts\n      inputFilledAmountBN.iadd(orderInputFillAmountBN);\n      takerAssetFilledAmountBN.iadd(orderTakerAssetFillAmountBN);\n      makerAssetFilledAmountBN.iadd(orderMakerAssetFillAmountBN);\n\n      // Check if we have hit maxInputAmountBN or maxTakerAssetFillAmountBN\n      if (\n        (maxInputAmountBN !== undefined &&\n          maxInputAmountBN !== null &&\n          inputFilledAmountBN.gte(maxInputAmountBN)) ||\n        (maxMakerAssetFillAmountBN !== undefined &&\n          maxMakerAssetFillAmountBN !== null &&\n          makerAssetFilledAmountBN.gte(maxMakerAssetFillAmountBN))\n      )\n        break;\n    }\n\n    if (takerAssetFilledAmountBN.isZero())\n      return reject(\"No orders found on 0x swap API\");\n    resolve([\n      orders,\n      inputFilledAmountBN,\n      decoded.protocolFee,\n      takerAssetFilledAmountBN,\n      makerAssetFilledAmountBN,\n      decoded.gasPrice,\n    ]);\n  });\n};\n"
  },
  {
    "path": "src/rari-sdk/abi/ERC20.json",
    "content": "[\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"name\": \"_spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"name\": \"_value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"name\": \"_from\",\n        \"type\": \"address\"\n      },\n      {\n        \"name\": \"_to\",\n        \"type\": \"address\"\n      },\n      {\n        \"name\": \"_value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      {\n        \"name\": \"_owner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [\n      {\n        \"name\": \"balance\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"string\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"name\": \"_to\",\n        \"type\": \"address\"\n      },\n      {\n        \"name\": \"_value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"bool\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      {\n        \"name\": \"_owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"name\": \"_spender\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [\n      {\n        \"name\": \"\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"fallback\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/cache.js",
    "content": "/* eslint-disable */\nexport default class Cache {\n  _raw = {};\n\n  constructor(timeouts) {\n    for (const key of Object.keys(timeouts))\n      this._raw[key] = { value: null, lastUpdated: 0, timeout: timeouts[key] };\n  }\n\n  async getOrUpdate(key, asyncMethod) {\n    var now = new Date().getTime() / 1000;\n\n    if (\n      this._raw[key].value == null ||\n      now > this._raw[key].lastUpdated + this._raw[key].timeout\n    ) {\n      var self = this;\n      if (this._raw[key].updating)\n        return await new Promise(async function (resolve) {\n          if (typeof self._raw[key].onUpdate === \"undefined\")\n            self._raw[key].onUpdate = [];\n          self._raw[key].onUpdate.push(resolve);\n        });\n      this._raw[key].updating = true;\n      this._raw[key].value = await asyncMethod();\n      this._raw[key].lastUpdated = now;\n      this._raw[key].updating = false;\n      if (\n        typeof this._raw[key].onUpdate !== \"undefined\" &&\n        this._raw[key].onUpdate.length > 0\n      ) {\n        for (const onUpdate of this._raw[key].onUpdate)\n          onUpdate(this._raw[key].value);\n        this._raw[key].onUpdate = [];\n      }\n    }\n\n    return this._raw[key].value;\n  }\n\n  update(key, value) {\n    var now = new Date().getTime() / 1000;\n    this._raw[key].value = value;\n    this._raw[key].lastUpdated = now;\n    return this._raw[key].value;\n  }\n\n  clear(key) {\n    this._raw[key].value = null;\n    this._raw[key].lastUpdated = 0;\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/docs/governance.md",
    "content": "# Rari SDK: Governance\n\nThe SDK's `Rari.governance` object includes `web3.eth.Contract` objects for each contract as well as wrapper methods and constants for easy implementation.\n\n## **Wrapper APIs**\n\nThe following wrapper APIs are available via the `governance` object:\n\n- `governance.rgt`: See [**RGT (Rari Governance Token)**](#rgt-rari-governance-token) section below.\n- `governance.rgt.distributions`: See [**Claiming RGT**](#claiming-rgt), [**Get Unclaimed RGT**](#get-unclaimed-rgt), [**RGT Distribution APY**](#get-unclaimed-rgt), [**Distribution Constants**](#distribution-constants), [**Total RGT Distributed**](#total-rgt-distributed), and [**Refresh Distribution Speeds**](#get-unclaimed-rgt) section below.\n\nThe wrapper APIs use [BN.js](https://github.com/indutny/bn.js) for large integer support. Most SDK wrapper methods accept `BN` instances as parameters and return BN instances as well. You can find BN.js available at `Rari.BN`.\n\n## **Raw Smart Contract APIs**\n\nAll smart contracts are available under `governance.contracts` as [`web3.eth.Contract` objects](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html). The following `Contract` objects are available:\n\n- `governance.contracts.RariGovernanceToken`: The contract behind the Rari Governance Token (RGT), an ERC20 token accounting for the ownership of Rari Stable Pool, Yield Pool, and Ethereum Pool.\n- `governance.contracts.RariGovernanceTokenDistributor`: Distributes RGT (Rari Governance Token) to Rari Stable Pool, Yield Pool, and Ethereum Pool holders.\n- `governance.contracts.RariGovernanceTokenVesting`: Distributes private RGT (Rari Governance Token) allocations to team/advisors/etc. with a vesting schedule.\n\nSee [`API.md` of the `rari-contracts` repository](https://github.com/Rari-Capital/rari-contracts/blob/master/API.md) for a full reference on the contracts' raw functions. As for the standard ERC20 token functions available in `contracts.RariGovernanceToken.methods` (like `totalSupply`, `transfer`, `transferFrom`, `approve`, `allowance`, etc.), see [EIP-20: ERC-20 Token Standard](https://eips.ethereum.org/EIPS/eip-20) for reference on common functions of ERC20 tokens like RSPT.\n\nNote that you can access deployed contract addresses at `Contract.options.address`. See [the web3.js documentation](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html) for more information on `web3.eth.Contract` objects. Use [`Contract.methods.myMethod.call(options)`](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-call) when reading data and [`Contract.methods.myMethod.send(options)`](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send) when changing the state. Note that the `options` object is optional when using `call`, and the `from` parameter is required in the `options` object when using `send`.\n\n## **RGT (Rari Governance Token)**\n\nRGT (Rari Governance Token) is an ERC20 token accounting for the ownership of Rari Stable Pool, Yield Pool, and Ethereum Pool.\n\n### **Get RGT exchange rate:** `governance.rgt.getExchangeRate()`\n\nReturns the exchange rate of RGT in USD as a `BN` (scaled by 1e18).\n\n- Price retrieved via CoinGecko.\n\n### **Get my RGT balance:** `governance.rgt.balanceOf(account)`\n\nReturns the amount of RGT owned by `account` (scaled by 1e18).\n\n- This wrapper function is an alias for `contracts.RariGovernanceToken.methods.balanceOf(account).call()`.\n- Parameters:\n  - `account`: A string indicating the Ethereum account address in question.\n- Return value: A `BN` (scaled by 1e18) indicating the RSPT balance of `account`.\n\n### **Transfer RGT:** `governance.rgt.transfer(recipient, amount, options)`\n\nTransfers RGT in the amount of `amount` to `recipient`.\n\n- This wrapper function is an alias for `contracts.RariGovernanceToken.methods.transfer(recipient, value).send(options)`\n- Parameters:\n  - `recipient`: A string indicating the recipient Ethereum address of the transfer.\n  - `amount`: A `BN` (scaled by 1e18) indicating the RFT amount to transfer.\n  - `options`: An object specifying `from` (required) and, optionally, `gas`, and/or `gasPrice` ([see the web3.js docs for details](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send)).\n\n### **Other standard ERC20 token functions:** `totalSupply`, `transferFrom`, `approve`, `allowance`, etc. (available in `contracts.RariFundToken.methods`)\n\nSee [EIP-20: ERC-20 Token Standard](https://eips.ethereum.org/EIPS/eip-20) for reference on common functions of ERC20 tokens like RSPT. (As described above, use `myMethod.call()` when reading data and `myMethod.send({ from: sender })` when changing the state.)\n\n## **Claiming RGT**\n\n### **Claim unclaimed RGT:** `governance.rgt.distributions.claim(amount, options)`\n\nClaims `amount` unclaimed RGT earned by the sender via liquidity mining across all pools.\n\n- Parameters:\n  - `amount`: The amount of RGT to claim (as a `BN` scaled by 1e18).\n  - `options`: An object specifying `from` (required) and, optionally, `gas`, and/or `gasPrice` ([see the web3.js docs for details](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send)).\n\n### **Claim all unclaimed RGT:** `governance.rgt.distributions.claimAll(options)`\n\nClaims all unclaimed RGT earned by the sender via liquidity mining across all pools.\n\n- Parameters:\n  - `options`: An object specifying `from` (required) and, optionally, `gas`, and/or `gasPrice` ([see the web3.js docs for details](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send)).\n\n## **Get Unclaimed RGT**\n\n### **Get all unclaimed RGT:** `governance.rgt.distributions.getUnclaimed(holder)`\n\nReturns the quantity of unclaimed RGT earned by `holder` via liquidity mining across all pools.\n\n- Parameters:\n  - `holder`: A string indicating the Ethereum address to check.\n- Return value: The quantity of unclaimed RGT (as a `BN` scaled by 1e18).\n\n## **RGT Claim Fee**\n\n### **Get RGT claim fee:** `governance.rgt.distributions.getClaimFee(blockNumber)`\n\nReturns the fee rate (proportion of RGT claimed to be burned scaled by 1e18) when claiming RGT at `blockNumber`.\n\n- Parameters:\n  - `blockNumber`: The block number at which to check the claim fee.\n- Return value: The RGT claim fee rate (as a `BN` scaled by 1e18).\n\n## **RGT Distribution APY**\n\n### **Get current RGT distribution APY:** `governance.rgt.distributions.getCurrentApy()`\n\nReturns the APY currently earned by all Rari Stable Pool, Yield Pool, and Ethereum Pool holders from RGT distributions (as a `BN` scaled by 1e18).\n\n## **Distribution Constants**\n\n- **Distribution start block number:** `governance.rgt.distributions.DISTRIBUTION_START_BLOCK` returns the starting block number of RGT distributions.\n- **Distribution period length:** `governance.rgt.distributions.DISTRIBUTION_PERIOD` returns `345600`.\n- **Distribution end block number:** `governance.rgt.distributions.DISTRIBUTION_END_BLOCK` returns the ending block number of RGT distributions.\n- **Total RGT (to be) distributed via liquidity mining:** `governance.rgt.distributions.FINAL_RGT_DISTRIBUTION` returns a `BN` equal to `8750000e18`.\n\n## **Total RGT Distributed**\n\n### **Get total RGT distributed:** `governance.rgt.distributions.getDistributedAtBlock(blockNumber)`\n\nReturns the amount of RGT earned via liquidity mining at the given `blockNumber`.\n\n- [See this graph for a visualization of RGT distributed via liquidity mining vs. blocks since distribution started.](https://www.desmos.com/calculator/2yvnflg4ir)\n\n## **Refresh Distribution Speeds**\n\n### **Refresh all distribution speeds:** `governance.rgt.distributions.refreshDistributionSpeeds(options)`\n\nUpdates RGT distribution speeds for each pool.\n\n- Warning: This function uses a large quantity of gas (around 1.5 million on average).\n- Parameters:\n  - `options`: An object specifying `from` (required) and, optionally, `gas`, and/or `gasPrice` ([see the web3.js docs for details](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send)).\n\n### **Refresh one pool's distribution speeds:** `governance.rgt.distributions.refreshDistributionSpeedsByPool(pool, options)`\n\nUpdates RGT distribution speeds for each pool given the `pool` whose balance should be refreshed.\n\n- Warning: This function uses a large quantity of gas (around 500k on average).\n- Parameters:\n  - `pool`: A `Number` indicating the `RariGovernanceTokenDistributor.RariPool` to refresh.\n    - `Stable = 0`\n    - `Yield = 1`\n    - `Ethereum = 2`\n  - `options`: An object specifying `from` (required) and, optionally, `gas`, and/or `gasPrice` ([see the web3.js docs for details](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send)).\n"
  },
  {
    "path": "src/rari-sdk/docs/pools/ethereum.md",
    "content": "# Rari SDK: Ethereum Pool\n\nThe SDK's `Rari.pools.ethereum` object is identical to [the `Rari.pools.stable` object](stable.md), with the exception of all contract addresses as well as the following changes:\n\n- No USD quantities are accepted or returned: all of these quantities are based in ETH, unless the user is depositing or withdrawing another currency.\n- `pools.ethereum.contracts.RariFundPriceConsumer` does not exist: the Ethereum Pool does not make use of a `RariFundPriceConsumer` because the pool is based only in ETH.\n- `pools.ethereum.rept`: wrapper functions for the Rari Ethereum Pool Token.\n- `pools.ethereum.rept.getExchangeRate([blockNumber])` returns the ETH price of REPT.\n- `pools.ethereum.allocations.CURRENCIES` does not exist: the only currency allocated to by the Ethereum Pool is ETH.\n- `pools.ethereum.allocations.POOLS = [\"dYdX\", \"Compound\", \"KeeperDAO\", \"Aave\"]`\n- `pools.yield.allocations.POOLS_BY_CURRENCY` does not exist: the only currency allocated to by the Ethereum Pool is ETH.\n- `pools.ethereum.allocations.getAllocationsByCurrency()` does not exist: instead, `pools.ethereum.balances.getTotalSupply()` returns the quantity of ETH (as a `BN`, scaled by 1e18) supplied to the fund and available for direct withdrawal.\n- `pools.ethereum.allocations.getRawPoolAllocations` returns ETH quantities, not USD quantities.\n- `pools.ethereum.allocations.getRawAllocations` does not exist.\n- `pools.ethereum.allocations.getCurrencyUsdPrices()` does not exist: the Ethereum Pool does not make use of USD prices because the pool is based only in ETH.\n- `pools.ethereum.balances.transfer(recipient, amount, options)` transfers an ETH quantity, not a USD quantity.\n- `pools.ethereum.deposits.getDirectDepositCurrencies()` does not exist: the only currency accepted for direct deposit to the Ethereum Pool is Ethereum (ETH).\n- `pools.ethereum.deposits.validateDeposit(currencyCode, amount, sender)` returns the ETH amount (scaled by 1e18) actually added to the sender's REP balance.\n- `pools.ethereum.deposits.deposit(currencyCode, amount, minEthAmount, options)` accepts `minEthAmount`, not `minUsdAmount`.\n- `pools.ethereum.withdrawals.validateWithdrawal(currencyCode, amount, sender)` returns the ETH amount (scaled by 1e18) actually removed from the sender's REP balance.\n- `pools.ethereum.withdrawals.withdraw(currencyCode, amount, maxEthAmount, options)` accepts `maxEthAmount`, not `maxUsdAmount`.\n- `pools.ethereum.history.getCurrencyExchangeHistory` returns `RariFundController.CompToEthTrade` events.\n- `pools.ethereum.history.getPoolAllocationHistory` returns events without `currencyCode` parameters.\n- `pools.ethereum.history.getReptExchangeRateHistory`\n- `pools.ethereum.history.getReptTransferHistory`\n"
  },
  {
    "path": "src/rari-sdk/docs/pools/stable.md",
    "content": "# Rari SDK: Stable Pool\n\nThe SDK's `Rari.pools.stable` object includes `web3.eth.Contract` objects for each contract as well as wrapper methods and constants for easy implementation.\n\n## **Wrapper APIs**\n\nThe following wrapper APIs are available via the `pools.stable` object:\n\n- `pools.stable.apy`: See [**Stable Pool APY**](#stable-pool-apy) section below.\n- `pools.stable.balances`: See [**My USD Balance and Interest**](#my-usd-balance-and-interest) and [**Total Supply and Interest**](#total-supply-and-interest) sections below.\n- `pools.stable.deposits`: See [**Deposits**](#deposits) section below.\n- `pools.stable.withdrawals`: See [**Withdrawals**](#withdrawals) section below.\n- `pools.stable.rspt`: See [**RSPT (Rari Stable Pool Token)**](#rspt-rari-stable-pool-token) section below.\n- `pools.stable.fees`: See [**Fees on Interest**](#fees-on-interest) section below.\n- `pools.stable.allocations`: See [**Raw Allocations**](#raw-allocations) and [**Internal Stablecoin Pricing**](#internal-stablecoin-pricing) sections below.\n- `pools.stable.history`: See [**Historical Data**](#historical-data) section below.\n\nThe wrapper APIs use [BN.js](https://github.com/indutny/bn.js) for large integer support. Most SDK wrapper methods accept `BN` instances as parameters and return BN instances as well. You can find BN.js available at `Rari.BN`.\n\nNote that many of the API methods rely on `pools.stable.cache`. You can modify the cache timeouts (in seconds) via `pools.stable.cache._raw[\"key\"].timeout`.\n\n## **Raw Smart Contract APIs**\n\nAll smart contracts are available under `pools.stable.contracts` as [`web3.eth.Contract` objects](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html). The following `Contract` objects are available:\n\n- `pools.stable.contracts.RariFundController`: Holds Rari Stable Pool funds and is used by the rebalancer to deposit and withdraw from pools and make exchanges.\n- `pools.stable.contracts.RariFundManager`: The Rari Stable Pool's main contract: it handles deposits, withdrawals, USD balances, interest, fees, etc.\n- `pools.stable.contracts.RariFundToken`: The Rari Stable Pool Token (RSPT) is an ERC20 token used to internally account for ownership of assets under management (AUM).\n- `pools.stable.contracts.RariFundPriceConsumer`: Retrieves stablecoin prices from Chainlink's public price feeds (used by `RariFundManager` and `RariFundController`).\n- `pools.stable.contracts.RariFundProxy`: Includes wrapper functions built on top of `RariFundManager`: exchange and deposit, withdraw and exchange, deposit without paying gas via the Gas Station Network (GSN).\n\nSee [`API.md` of the `rari-contracts` repository](https://github.com/Rari-Capital/rari-contracts/blob/master/API.md) for a full reference on the contracts' raw functions. As for the standard ERC20 token functions available in `contracts.RariFundToken.methods` (like `totalSupply`, `transfer`, `transferFrom`, `approve`, `allowance`, etc.), see [EIP-20: ERC-20 Token Standard](https://eips.ethereum.org/EIPS/eip-20) for reference on common functions of ERC20 tokens like RSPT.\n\nNote that you can access deployed contract addresses at `Contract.options.address`. See [the web3.js documentation](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html) for more information on `web3.eth.Contract` objects. Use [`Contract.methods.myMethod.call(options)`](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-call) when reading data and [`Contract.methods.myMethod.send(options)`](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send) when changing the state. Note that the `options` object is optional when using `call`, and the `from` parameter is required in the `options` object when using `send`.\n\n## **Stable Pool APY**\n\n### **Get current raw APY (before fees):** `pools.stable.apy.getCurrentRawApy()`\n\nReturns the current raw APY (before fees) of the Rari Stable Pool.\n\n- Return value: A `BN` (where 100% = 1e18) indicating the current raw APY (before fees).\n\n### **Get current APY (after fees):** `pools.stable.apy.getCurrentApy()`\n\nReturns the current APY (after fees) of the Rari Stable Pool.\n\n- Return value: A `BN` (where 100% = 1e18) indicating the current APY (after fees).\n\n### **Calculate APY over time range (after fees):** `pools.stable.apy.calculateApy(startTimestamp, startRsptExchangeRate, endTimestamp, endRsptExchangeRate)`\n\nReturns an APY given a time range and the RSPT exchange rates at the beginning and end of the time range.\n\n- Parameters:\n  - `startTimestamp`: A Unix epoch timestamp (in seconds) indicating the beginning of the time range.\n  - `startRsptExchangeRate`: A `BN` indicating the RSPT exchange rate at the beginning of the time range (see `rspt.getExchangeRate`).\n  - `endTimestamp`: A Unix epoch timestamp (in seconds) indicating the end of the time range.\n  - `endRsptExchangeRate`: A `BN` indicating the RSPT exchange rate at the end of the time range (see `rspt.getExchangeRate`).\n- Return value: A `BN` (where 100% = 1e18) indicating the APY over the time range.\n\n### **Get APY over block range (after fees):** `pools.stable.apy.getApyOverBlocks([fromBlock[, toBlock]])`\n\nReturns an APY given a block range (by retrieving the RSPT exchange rates at `fromBlock` and `toBlock`).\n\n- Please note that accessing historical data may require a Web3 provider with archive data.\n- Parameters:\n  - `fromBlock`: A `Number` indicating the beginning of the block range. Defaults to 0.\n  - `toBlock`: A `Number` (or the string `\"latest\"`) indicating the end of the block range. Defaults to `\"latest\"`.\n- Return value: A `BN` (where 100% = 1e18) indicating the APY over the block range.\n\n### **Get APY over time range (after fees):** `pools.stable.apy.getApyOverTime([fromTimestamp[, toTimestamp]])`\n\nReturns an APY given a time range (by retrieving the RSPT exchange rates at `fromTimestamp` and `toTimestamp`).\n\n- Please note that this method makes use of the [Rari API](https://github.com/Rari-Capital/rari-api).\n- Parameters:\n  - `startTimestamp`: A Unix epoch timestamp (in seconds) indicating the beginning of the time range. Defaults to 0.\n  - `endTimestamp`: A Unix epoch timestamp (in seconds) or the string `\"latest\"` indicating the end of the time range. Defaults to `\"latest\"`.\n- Return value: A `BN` (where 100% = 1e18) indicating the APY over the time range.\n\n## **My USD Balance and Interest**\n\n### **Get my USD balance supplied:** `pools.stable.balances.balanceOf(account)`\n\nReturns the total balance supplied to the Rari Stable Pool by `account` in USD (scaled by 1e18).\n\n- Parameters:\n  - `account`: A string indicating the Ethereum account address in question.\n- Return value: A `BN` (scaled by 1e18) indicating the balance supplied by `account` in USD.\n\n### **Get my interest accrued:** `pools.stable.balances.interestAccruedBy(account[, startTimestamp[, endTimestamp]])`)`\n\nReturns the total amount of interest accrued by `account` in USD (scaled by 1e18).\n\n- Please note that this method makes use of the [Rari API](https://github.com/Rari-Capital/rari-api).\n- Parameters:\n  - `account`: A string indicating the Ethereum account address in question.\n  - `startTimestamp`: A Unix epoch timestamp (in seconds) indicating the beginning of the time range. Defaults to 0.\n  - `endTimestamp`: A Unix epoch timestamp (in seconds) or the string `\"latest\"` indicating the end of the time range. Defaults to `\"latest\"`.\n- Return value: A `BN` (scaled by 1e18) indicating the amount of interest accrued by `account` in USD.\n\n### **Transfer my USD holdings:** `pools.stable.balances.transfer(recipient, amount, options)`\n\nTransfers `amount` USD of your Rari Stable Pool holdings to `recipient`.\n\n- Under the hood, transfers the RFT amount equivalent to this USD `amount`.\n- Parameters:\n  - `recipient`: A string indicating the Ethereum account address to recieve the funds.\n  - `amount`: A `BN` (scaled by 1e18) indicating the USD amount to be transferred.\n  - `options`: An object specifying `from` (required) and, optionally, `gas`, and/or `gasPrice` ([see the web3.js docs for details](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send)).\n\n## **Deposits**\n\n### **Get depositable currencies:** `pools.stable.deposits.getDepositCurrencies()`\n\nReturns an array of currency codes accepted for deposit to the Rari Stable Pool. Token data for all tokens (i.e., all currency codes besides ETH) should be accessible via `rari.getAllTokens([cacheTimeout])`.\n\n### **Get currencies directly depositable without exchange slippage:** `pools.stable.deposits.getDirectDepositCurrencies()`\n\nReturns an array of currency codes accepted for direct deposit. If the desired deposit currency is not accepted, we must exchange to and deposit an accepted currency.\n\n### **Get USD account balance limit (only applies to new deposits):** `pools.stable.deposits.getAccountBalanceLimit(account)`\n\nReturns the account balance limit of `account` in USD (scaled by 1e18). Account balance limits only apply to new deposits.\n\n- Parameters:\n  - `account`: A string indicating the Ethereum account address in question.\n- Return value: A `BN` (scaled by 1e18) indicating the account balance limit of `account` in USD.\n\n### **Get default USD account balance limit (only applies to new deposits):** `pools.stable.deposits.getDefaultAccountBalanceLimit()`\n\nReturns the default account balance limit in USD (scaled by 1e18). Account balance limits only apply to new deposits.\n\n- Return value: A `BN` (scaled by 1e18) indicating the default account balance limit in USD.\n\n### **Validate deposit to Rari:** `pools.stable.deposits.validateDeposit(currencyCode, amount, sender)`\n\nReturns the USD amount (scaled by 1e18) actually added to the sender's RSP balance by a deposit of `amount` in `currencyCode`.\n\n- Parameters:\n  - `currencyCode`: A string indicating the symbol of the currency to deposit.\n  - `amount`: A `BN` (scaled by 10 to the power of the decimal precision of `currencyCode`) indicating the deposit amount.\n  - `sender`: The `sender` of the deposit.\n- Return value: An array containing a `BN` (scaled by 1e18) indicating the USD amount that would actually be added to the sender's RSP balance and a `BN` (scaled by 1e18) indicating the 0x exchange protocol fee (if any).\n\n### **Deposit funds to Rari:** `pools.stable.deposits.deposit(currencyCode, amount, minUsdAmount, options)`\n\nApproves (if necessary) and deposits `amount` of `currencyCode` to the Rari Stable Pool (unless the USD amount added to the sender's RSP balance is less than `minUsdAmount`).\n\n- Parameters:\n  - `currencyCode`: A string indicating the symbol of the currency to deposit.\n  - `amount`: A `BN` (scaled by 10 to the power of the decimal precision of `currencyCode`) indicating the deposit amount.\n  - `minUsdAmount`: A `BN` (scaled by 1e18) indicating the minimum USD amount to be added to the sender's RSP balance to execute the transaction.\n  - `options`: An object specifying `from` (required) and, optionally, `gas`, and/or `gasPrice` ([see the web3.js docs for details](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send)).\n- Return value: An array containing a `BN` (scaled by 1e18) indicating the USD amount that was removed from the sender's RSP balance, a `BN` (scaled by 1e18) indicating the 0x exchange protocol fee (if any), the approval transaction receipt (if any), and the deposit transaction receipt.\n\n## **Withdrawals**\n\n### **Get withdrawable currencies:** `pools.stable.withdrawals.getWithdrawalCurrencies()`\n\nReturns an array of currency codes accepted for withdrawal from the Rari Stable Pool. Token data for all tokens (i.e., all currency codes besides ETH) should be accessible via `rari.getAllTokens([cacheTimeout])`.\n\n### **Get raw balances of each currency withdrawable directly without exchange slippage:** `pools.stable.allocations.getAllocationsByCurrency()`\n\nReturns an object containing the maximum direct withdrawal amount (as a `BN`) for each currency code. If there is not enough of the desired withdrawal currency in the Rari Stable Pool, other currencies must be withdrawn and exchanged.\n\n- The raw balance allocated to a currency is also the maximum directly withdrawable quantity of that currency. See **Raw Allocations** for more infomation.\n\n### **Validate withdrawal from Rari:** `pools.stable.withdrawals.validateWithdrawal(currencyCode, amount, sender)`\n\nReturns the USD amount (scaled by 1e18) actually removed from the sender's RSP balance by a withdrawal of `amount` in `currencyCode`.\n\n- Parameters:\n  - `currencyCode`: A string indicating the symbol of the currency to withdraw.\n  - `amount`: A `BN` (scaled by 10 to the power of the decimal precision of `currencyCode`) indicating the withdrawal amount.\n- Return value: An array containing a `BN` (scaled by 1e18) indicating the USD amount that would actually be removed from the sender's RSP balance and a `BN` (scaled by 1e18) indicating the 0x exchange protocol fee (if any).\n\n### **Withdraw funds from Rari:** `pools.stable.withdrawals.withdraw(currencyCode, amount, maxUsdAmount, options)`\n\nWithdraws `amount` of `currencyCode` from the Rari Stable Pool (unless the USD amount removed from the sender's RSP balance is greater than `maxUsdAmount`).\n\n- Parameters:\n  - `currencyCode`: A string indicating the symbol of the currency to withdraw.\n  - `amount`: A `BN` (scaled by 10 to the power of the decimal precision of `currencyCode`) indicating the withdrawal amount.\n  - `maxUsdAmount`: A `BN` (scaled by 1e18) indicating the maximum USD amount to be removed from the sender's RSP balance to execute the transaction.\n  - `options`: An object specifying `from` (required) and, optionally, `gas`, and/or `gasPrice` ([see the web3.js docs for details](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send)).\n- Return value: An array containing a `BN` (scaled by 1e18) indicating the USD amount that was removed from the sender's RSP balance, a `BN` (scaled by 1e18) indicating the 0x exchange protocol fee (if any), and a withdrawal transaction receipt.\n\n## **RSPT (Rari Stable Pool Token)**\n\nRSPT (Rari Stable Pool Token) is an internal token-based representation of the USD balance supplied to the Rari Stable Pool.\n\n### **Get RSPT exchange rate:** `pools.stable.rspt.getExchangeRate([blockNumber])`\n\nReturns the exchange rate of RSPT in USD as a `BN` (scaled by 1e18).\n\n- Under the hood, divides the total supplied to the Rari Stable Pool by the total supply of RSPT.\n- Parameters:\n  - `account`: An optional `Number` specifying the block number for which to retrieve data (but note that accessing historical data may require a Web3 provider with archive data).\n\n### **Get my RSPT balance:** `pools.stable.rspt.balanceOf(account)`\n\nReturns the amount of RSPT owned by `account` (scaled by 1e18).\n\n- RSPT (Rari Stable Pool Token) is an internal token-based representation of the USD balance supplied to the Rari Stable Pool.\n- This wrapper function is an alias for `contracts.RariFundToken.methods.balanceOf(account).call()`.\n- Parameters:\n  - `account`: A string indicating the Ethereum account address in question.\n- Return value: A `BN` (scaled by 1e18) indicating the RSPT balance of `account`.\n\n### **Transfer RSPT:** `pools.stable.rspt.transfer(recipient, amount, options)`\n\nTransfers RSPT in the amount of `amount` to `recipient`.\n\n- This wrapper function is an alias for `contracts.RariFundToken.methods.transfer(recipient, value).send(options)`\n- Parameters:\n  - `recipient`: A string indicating the recipient Ethereum address of the transfer.\n  - `amount`: A `BN` (scaled by 1e18) indicating the RFT amount to transfer.\n  - `options`: An object specifying `from` (required) and, optionally, `gas`, and/or `gasPrice` ([see the web3.js docs for details](https://web3js.readthedocs.io/en/v1.2.11/web3-eth-contract.html#methods-mymethod-send)).\n\n### **Other standard ERC20 token functions:** `totalSupply`, `transferFrom`, `approve`, `allowance`, etc. (available in `contracts.RariFundToken.methods`)\n\nSee [EIP-20: ERC-20 Token Standard](https://eips.ethereum.org/EIPS/eip-20) for reference on common functions of ERC20 tokens like RSPT. (As described above, use `myMethod.call()` when reading data and `myMethod.send({ from: sender })` when changing the state.)\n\n## **Total Supply and Interest**\n\n### **Get total USD supplied (by all users):** `pools.stable.balances.getTotalSupply()`\n\nReturns the Rari Stable Pool's total investor balance (all RSPT holders' funds but not unclaimed fees) of all currencies in USD (scaled by 1e18).\n\n### **Get total interest accrued (by all users):** `pools.stable.balances.getTotalInterestAccrued([fromBlock[, toBlock]])`\n\nReturns the total amount of interest accrued by past and current RSPT holders (excluding the fees paid on interest) in USD (scaled by 1e18).\n\n- Parameters:\n  - `fromBlock`: An optional `Number` (or the string `\"latest\"`) indicating the minimum block number to track. Defaults to 0.\n  - `toBlock`: An optional `Number` (or the string `\"latest\"`) indicating the maximum block number to track. Defaults to `\"latest\"`.\n\n## **Fees on Interest**\n\nRari Capital currently takes a _20% performance fee_ on all interest accrued by the Rari Stable Pool. This fee is liable to change in the future, but you can use the following method to check its current value at any time.\n\n### **Get interest fee rate:** `pools.stable.fees.getInterestFeeRate()`\n\nReturns the fee rate on interest (proportion of raw interest accrued scaled by 1e18).\n\n## **Raw Allocations**\n\n### **Get all stablecoins supported for allocation:** `pools.stable.allocations.CURRENCIES`\n\nConstant array of currency codes supported for potential allocation by the Rari Stable Pool: DAI, USDC, USDT, TUSD, BUSD, sUSD, and mUSD, in that order (indexes are the same throughout our smart contracts and SDK).\n\n### **Get all pools supported for allocation:** `pools.stable.allocations.POOLS`\n\nConstant array of pool names supported for potential allocation by the Rari Stable Pool: dYdX, Compound, Aave, and mStable, in that order (indexes are the same throughout our smart contracts and SDK).\n\n### **Get supported pools for each supported currency:** `pools.stable.allocations.POOLS_BY_CURRENCY`\n\nConstant object of currency codes mapped to arrays of pool names supported for potential allocation by the Rari Stable Pool.\n\n### **Get raw allocations by currency (including unclaimed fees on interest):** `pools.stable.allocations.getRawCurrencyAllocations()`\n\nReturns an object containing the raw balance allocated to each currency as a `BN`.\n\n- The raw balance allocated to a currency is also the maximum directly withdrawable quantity of that currency. See **Withdrawals** for more infomation.\n\n### **Get raw allocations by subpool (including unclaimed fees on interest):** `pools.stable.allocations.getRawPoolAllocations()`\n\nReturns an object containing the raw balance in USD allocated to each subpool as a `BN` (as well as a `BN` named `_cash` for unallocated funds).\n\n### **Get all raw currency/subpool allocations (including unclaimed fees on interest):** `pools.stable.allocations.getRawAllocations()`\n\nReturns an object containing currency codes mapped to objects containing the raw balance allocated to each subpool as a `BN` (as well as a `BN` named `_cash` for unallocated funds) for each currency.\n\n## **Internal Stablecoin Pricing**\n\n### **Get stablecoin prices (used internally by contracts):** `pools.stable.allocations.getCurrencyUsdPrices()`\n\nReturns an object containing the price in USD (scaled by 1e18) for each supported stablecoin to which funds can be allocated.\n\n- Use these prices to calculate the value added to a user's USD balance due to a direct deposit and the value subtracted from a user's USD balance due to a direct withdrawal.\n\n## **Historical Data**\n\n### **Get Stable Pool APY history:** `pools.stable.history.getApyHistory([fromTimestamp[, toTimestamp[, intervalSeconds]]])`\n\nReturns an array of objects containing `blockNumber`, `timestamp`, and `apy` (scaled by 1e18, in string format) from `fromTimestamp` to `toTimestamp`.\n\n- Parameters:\n  - `fromTimestamp`: A `Number` (or the string `\"latest\"`) indicating the minimum Unix epoch timestamp from which to retrieve data points. Defaults to `\"latest\"`.\n  - `toTimestamp`: A `Number` (or the string `\"latest\"`) indicating the maximum Unix epoch timestamp from which to retrieve data points. Defaults to `\"latest\"`.\n  - `intervalSeconds`: A `Number` indicating the interval in seconds at which to retrieve data points. Defaults to `86400`.\n- Return value: An array of objects containing `blockNumber`, `timestamp`, and `apy` (scaled by 1e18, in string format).\n\n### **Get total supply history:** `pools.stable.history.getTotalSupplyHistory([fromTimestamp[, toTimestamp[, intervalSeconds]]])`\n\nReturns an array of objects containing `blockNumber`, `timestamp`, and `totalSupply` (by all users, in USD, scaled by 1e18, in string format) from `fromTimestamp` to `toTimestamp`.\n\n- Parameters:\n  - `fromTimestamp`: A `Number` (or the string `\"latest\"`) indicating the minimum Unix epoch timestamp from which to retrieve data points. Defaults to `\"latest\"`.\n  - `toTimestamp`: A `Number` (or the string `\"latest\"`) indicating the maximum Unix epoch timestamp from which to retrieve data points. Defaults to `\"latest\"`.\n  - `intervalSeconds`: A `Number` indicating the interval in seconds at which to retrieve data points. Defaults to `86400`.\n- Return value: An array of objects containing `blockNumber`, `timestamp`, and `totalSupply` (by all users, in USD, scaled by 1e18, in string format).\n\n### **Get account USD supply balance history:** `pools.stable.history.getBalanceHistoryOf(account[, fromBlock[, toBlock[, intervalBlocks]]])`\n\nReturns an array of objects containing `blockNumber`, `timestamp`, and `balance` (of `account`, in USD, scaled by 1e18, in string format) from `fromTimestamp` to `toTimestamp`.\n\n- Parameters:\n  - `account`: A string indicating the Ethereum account address in question.\n  - `fromBlock`: A `Number` (or the string `\"latest\"`) indicating the minimum block number from which to retrieve data points. Defaults to `\"latest\"`.\n  - `toBlock`: A `Number` (or the string `\"latest\"`) indicating the maximum block number from which to retrieve data points. Defaults to `\"latest\"`.\n  - `intervalBlocks`: A `Number` indicating the interval in blocks at which to retrieve data points. Defaults to `6500`.\n- Return value: An array of objects containing `blockNumber`, `timestamp`, and `balance` (in USD, scaled by 1e18, in string format).\n\n### **Get RSPT exchange rate history:** `pools.stable.history.getRsptExchangeRateHistory([fromTimestamp[, toTimestamp[, intervalSeconds]]])`\n\nReturns an array of objects containing `blockNumber`, `timestamp`, and `rate` (in USD, scaled by 1e18, in string format) from `fromTimestamp` to `toTimestamp`.\n\n- Parameters:\n  - `fromTimestamp`: A `Number` (or the string `\"latest\"`) indicating the minimum Unix epoch timestamp from which to retrieve data points. Defaults to `\"latest\"`.\n  - `toTimestamp`: A `Number` (or the string `\"latest\"`) indicating the maximum Unix epoch timestamp from which to retrieve data points. Defaults to `\"latest\"`.\n  - `intervalSeconds`: A `Number` indicating the interval in seconds at which to retrieve data points. Defaults to `86400`.\n- Return value: An array of objects containing `number` (block number), `timestamp` (in seconds since Unix Epoch), and `rate` (in USD, scaled by 1e18, in string format).\n\n### **Get pool allocation history:** `pools.stable.history.getPoolAllocationHistory([fromBlock[, toBlock[, filter]]])`\n\nReturns an array of `RariFundController.PoolAllocation` event objects from `fromBlock` to `toBlock` filtered by the filter parameter.\n\n- Parameters:\n  - `fromBlock`: A `Number` (or the string `\"latest\"`) indicating the minimum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `toBlock`: A `Number` (or the string `\"latest\"`) indicating the maximum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `filter`: An optional object containing any of the indexed event properties listed below (`action`, `pool`, and/or `currencyCode`).\n- Return value: An array of event objects. See the [web3.js documentation](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) for more information.\n- Event properties (found in the `returnValues` property of an event object):\n  - `action` (indexed): A `Number` indicating of one of the following `RariFundController.PoolAllocationAction` options:\n    - `Deposit = 0`\n    - `Withdraw = 1`\n    - `WithdrawAll = 2`\n  - `pool` (indexed): A `Number` indicating the index of the pool in `pools.stable.allocations.POOLS`.\n  - `currencyCode` (indexed): A string indicating the currency code of the allocation.\n  - `amount`: A string indicating the amount transferred by the allocation (N/A when `action = WithdrawAll`).\n\n### **Get currency exchange history:** `pools.stable.history.getCurrencyExchangeHistory([fromBlock[, toBlock[, filter]]])`\n\nReturns an array of `RariFundController.CurrencyTrade` [event objects](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) from `fromBlock` to `toBlock` filtered by the filter parameter.\n\n- Parameters:\n  - `fromBlock`: A `Number` (or the string `\"latest\"`) indicating the minimum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `toBlock`: A `Number` (or the string `\"latest\"`) indicating the maximum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `filter`: An optional object containing any of the indexed event properties listed below (`inputCurrencyCode`, `outputCurrencyCode`, and/or `exchange`).\n- Return value: An array of event objects. See the [web3.js documentation](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) for more information.\n- Event properties (found in the `returnValues` property of an event object):\n  - `inputCurrencyCode` (indexed): A string indicating the input currency code sold by the exchange trade.\n  - `outputCurrencyCode` (indexed): A string indicating the output currency code bought by the exchange trade.\n  - `exchange` (indexed): A `Number` indicating one of the following `RariFundController.CurrencyExchange` options:\n    - `ZeroEx = 0`\n    - `mStable = 1`\n  - `inputAmount`: The amount of `inputCurrencyCode` sold by the exchange.\n  - `inputAmountUsd`: The input amount sold by the exchange in USD.\n  - `outputAmount`: The amount of `outputCurrencyCode` bought by the exchange.\n  - `inputAmountUsd`: The output amount bought by the exchange in USD.\n\n### **Get direct deposit history:** `pools.stable.history.getDepositHistory([fromBlock[, toBlock[, filter]]])`\n\nReturns an array of `RariFundManager.Deposit` [event objects](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) from `fromBlock` to `toBlock` filtered by the filter parameter.\n\n- This function aggregates events from all past versions of `RariFundManager`.\n- Parameters:\n  - `fromBlock`: A `Number` (or the string `\"latest\"`) indicating the minimum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `toBlock`: A `Number` (or the string `\"latest\"`) indicating the maximum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `filter`: An optional object containing any of the indexed event properties listed below (`currencyCode`, `sender`, and/or `payee`).\n- Return value: An array of event objects. See the [web3.js documentation](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) for more information.\n- Event properties (found in the `returnValues` property of an event object):\n  - `currencyCode` (indexed): A string indicating the currency code of the deposit.\n  - `sender` (indexed): Sender account of the deposit (equal to the `RariFundProxy` address when exchanging before deposit).\n  - `payee` (indexed): Destination account of the deposit.\n  - `amount`: A string indicating the amount of `currencyCode` deposited.\n  - `amountUsd`: A string indicating the amount deposited in USD.\n\n### **Get direct withdrawal history:** `pools.stable.history.getWithdrawalHistory([fromBlock[, toBlock[, filter]]])`\n\nReturns an array of `RariFundManager.Withdrawal` [event objects](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) from `fromBlock` to `toBlock` filtered by the filter parameter.\n\n- This function aggregates events from all past versions of `RariFundManager`.\n- Parameters:\n  - `fromBlock`: A `Number` (or the string `\"latest\"`) indicating the minimum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `toBlock`: A `Number` (or the string `\"latest\"`) indicating the maximum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `filter`: An optional object containing any of the indexed event properties listed below (`currencyCode`, `sender`, and/or `payee`).\n- Return value: An array of event objects. See the [web3.js documentation](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) for more information.\n- Event properties (found in the `returnValues` property of an event object):\n  - `currencyCode` (indexed): A string indicating the currency code of the withdrawal.\n  - `sender` (indexed): Sender account of the withdrawal (equal to the `RariFundProxy` address when exchanging after withdrawal)\n  - `payee` (indexed): Destination account of the withdrawal.\n  - `amount`: A string indicating the amount of `currencyCode` withdrawn.\n  - `amountUsd`: A string indicating the amount withdrawn in USD.\n\n### **Get pre-deposit exchange history:** `pools.stable.history.getPreDepositExchangeHistory([fromBlock[, toBlock[, filter]]])`\n\nReturns an array of `RariFundProxy.PreDepositExchange` [event objects](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) from `fromBlock` to `toBlock` filtered by the filter parameter.\n\n- This function aggregates events from all past versions of `RariFundProxy`.\n- Parameters:\n  - `fromBlock`: A `Number` (or the string `\"latest\"`) indicating the minimum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `toBlock`: A `Number` (or the string `\"latest\"`) indicating the maximum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `filter`: An optional object containing any of the indexed event properties listed below (`inputErc20Contract`, `outputCurrencyCode`, and/or `payee`).\n- Return value: An array of event objects. See the [web3.js documentation](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) for more information.\n- Event properties (found in the `returnValues` property of an event object):\n  - `inputErc20Contract` (indexed): A string indicating the ERC20 contract address of the input token sent by the user and sold by the exchange.\n  - `outputCurrencyCode` (indexed): A string indicating the output currency code bought by the exchange and directly deposited to Rari for `payee`.\n  - `payee` (indexed): Sender and destination account of the deposit.\n  - `inputAmount`: A string indicating the amount of `inputErc20Contract` sent by the user.\n  - `inputAmountUsd`: A string indicating the amount sent by the user in USD.\n  - `outputAmount`: A string indicating the amount of `outputCurrencyCode` deposited to the Rari Stable Pool in USD.\n  - `outputAmountUsd`: A string indicating the amount deposited to the Rari Stable Pool in USD.\n\n### **Get post-withdrawal exchange history:** `pools.stable.history.getPostWithdrawalExchangeHistory([fromBlock[, toBlock[, filter]]])`\n\nReturns an array of `RariFundProxy.PostWithdrawalExchange` [event objects](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) from `fromBlock` to `toBlock` filtered by the filter parameter.\n\n- This function aggregates events from all past versions of `RariFundProxy`.\n- Parameters:\n  - `fromBlock`: A `Number` (or the string `\"latest\"`) indicating the minimum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `toBlock`: A `Number` (or the string `\"latest\"`) indicating the maximum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `filter`: An optional object containing any of the indexed event properties listed below (`inputCurrencyCode`, `outputErc20Contract`, and/or `payee`).\n- Return value: An array of event objects. See the [web3.js documentation](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) for more information.\n- Event properties (found in the `returnValues` property of an event object):\n  - `inputCurrencyCode` (indexed): A string indicating the output currency code directly withdrawn from Rari and sold by the exchange.\n  - `outputErc20Contract` (indexed): A string indicating the ERC20 contract address of the input token bought by the exchange and sent to `payee`.\n    - If output currency is ETH, set to `0x0000000000000000000000000000000000000000`.\n  - `payee` (indexed): Sender and destination account of the withdrawal.\n  - `inputAmount`: A string indicating the amount of `inputCurrencyCode` withdrawn from the Rari Stable Pool.\n  - `inputAmountUsd`: A string indicating the amount withdrawn from the Rari Stable Pool in USD.\n  - `outputAmount`: A string indicating the amount of `outputErc20Contract` sent to the user.\n  - `outputAmountUsd`: A string indicating the amount sent to the user in USD.\n\n### **Get RSPT transfer history:** `pools.stable.history.getRsptTransferHistory([fromBlock[, toBlock[, filter]]])`\n\nReturns an array of RSPT `Transfer` [event objects](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) from `fromBlock` to `toBlock` filtered by the filter parameter.\n\n- This function aggregates events from all past versions of `RariFundToken`.\n- Parameters:\n  - `fromBlock`: A `Number` (or the string `\"latest\"`) indicating the minimum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `toBlock`: A `Number` (or the string `\"latest\"`) indicating the maximum block number from which to retrieve events. Defaults to `\"latest\"`.\n  - `filter`: An optional object containing any of the indexed event properties listed below (`from` and/or `to`).\n- Return value: An array of event objects. See the [web3.js documentation](https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#contract-events-return) for more information.\n- Event properties (found in the `returnValues` property of an event object):\n  - `inputCurrencyCode` (indexed): A string indicating the output currency code directly withdrawn from Rari and sold by the exchange.\n  - `outputErc20Contract` (indexed): A string indicating the ERC20 contract address of the input token bought by the exchange and sent to `payee`.\n    - If output currency is ETH, set to `0x0000000000000000000000000000000000000000`.\n  - `payee` (indexed): Sender and destination account of the withdrawal.\n  - `inputAmount`: A string indicating the amount of `inputCurrencyCode` withdrawn from the Rari Stable Pool.\n  - `inputAmountUsd`: A string indicating the amount withdrawn from the Rari Stable Pool in USD.\n  - `outputAmount`: A string indicating the amount of `outputErc20Contract` sent to the user.\n  - `outputAmountUsd`: A string indicating the amount sent to the user in USD.\n"
  },
  {
    "path": "src/rari-sdk/docs/pools/yield.md",
    "content": "# Rari SDK: Yield Pool\n\nThe SDK's `Rari.pools.yield` object is identical to [the `Rari.pools.stable` object](stable.md), with the exception of all contract addresses as well as the following changes:\n\n- `pools.ethereum.rypt`: wrapper functions for the Rari Yield Pool Token.\n- `pools.yield.allocations.POOLS = [\"dYdX\", \"Compound\", \"Aave\", \"mStable\", \"yVault\"]`\n- `pools.yield.allocations.POOLS_BY_CURRENCY` now includes `\"yVault\"`.\n- `pools.ethereum.history.getRyptExchangeRateHistory`\n- `pools.ethereum.history.getRyptTransferHistory`\n"
  },
  {
    "path": "src/rari-sdk/governance/abi/RariGovernanceToken.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"subtractedValue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"decreaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"addedValue\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"increaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"name\", \"type\": \"string\" },\n      { \"internalType\": \"string\", \"name\": \"symbol\", \"type\": \"string\" },\n      { \"internalType\": \"uint8\", \"name\": \"decimals\", \"type\": \"uint8\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"distributor\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/governance/abi/RariGovernanceTokenDistributor.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"holder\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"claimed\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"transferred\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"burned\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Claim\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"Disabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"Enabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"DISTRIBUTION_PERIOD\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"FINAL_RGT_DISTRIBUTION\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"disabled\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"distributionEndBlock\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"distributionStartBlock\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"startBlock\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"contract IRariFundManager[3]\",\n        \"name\": \"fundManagers\",\n        \"type\": \"address[3]\"\n      },\n      {\n        \"internalType\": \"contract IERC20[3]\",\n        \"name\": \"fundTokens\",\n        \"type\": \"address[3]\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bool\", \"name\": \"_disabled\", \"type\": \"bool\" }],\n    \"name\": \"setDisabled\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract RariGovernanceToken\",\n        \"name\": \"governanceToken\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setGovernanceToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariGovernanceTokenDistributor.RariPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"internalType\": \"contract IRariFundManager\",\n        \"name\": \"fundManager\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariGovernanceTokenDistributor.RariPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"fundToken\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"blockNumber\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"getRgtDistributed\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"refreshDistributionSpeeds\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariGovernanceTokenDistributor.RariPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"newBalance\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"refreshDistributionSpeeds\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariGovernanceTokenDistributor.RariPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"refreshDistributionSpeeds\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getEthUsdPrice\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"holder\", \"type\": \"address\" },\n      {\n        \"internalType\": \"enum RariGovernanceTokenDistributor.RariPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"distributeRgt\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"holder\", \"type\": \"address\" },\n      {\n        \"internalType\": \"enum RariGovernanceTokenDistributor.RariPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"beforeFirstPoolTokenTransferIn\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"holder\", \"type\": \"address\" }\n    ],\n    \"name\": \"getUnclaimedRgt\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"blockNumber\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"getPublicRgtClaimFee\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"claimRgt\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"claimAllRgt\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgrade\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/governance/abi/RariGovernanceTokenUniswapDistributor.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"holder\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"claimed\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Claim\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"Disabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"Enabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"DISTRIBUTION_PERIOD\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"FINAL_RGT_DISTRIBUTION\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"disabled\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"distributionEndBlock\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"distributionStartBlock\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rgtEthUniswapV2Pair\",\n    \"outputs\": [\n      { \"internalType\": \"contract IERC20\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"name\": \"stakingBalances\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalStaked\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"startBlock\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"_rgtEthUniswapV2Pair\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bool\", \"name\": \"_disabled\", \"type\": \"bool\" }],\n    \"name\": \"setDisabled\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract RariGovernanceToken\",\n        \"name\": \"governanceToken\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setGovernanceToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"blockNumber\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"getRgtDistributed\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdraw\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"holder\", \"type\": \"address\" }\n    ],\n    \"name\": \"distributeRgt\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"holder\", \"type\": \"address\" }\n    ],\n    \"name\": \"getUnclaimedRgt\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"claimRgt\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"claimAllRgt\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgrade\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract IERC20\",\n        \"name\": \"_rgtEthUniswapV2Pair\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setRgtEthUniswapV2Pair\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/governance/abi/RariGovernanceTokenVesting.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"holder\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"claimed\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"transferred\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"burned\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PrivateClaim\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"FINAL_PRIVATE_RGT_ALLOCATION\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"PRIVATE_VESTING_PERIOD\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"name\": \"privateRgtAllocations\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"privateVestingEndTimestamp\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"privateVestingStartTimestamp\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_privateVestingStartTimestamp\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract RariGovernanceToken\",\n        \"name\": \"governanceToken\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setGovernanceToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"holder\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setPrivateRgtAllocation\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"timestamp\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"getPrivateRgtClaimFee\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"holder\", \"type\": \"address\" }\n    ],\n    \"name\": \"getUnclaimedPrivateRgt\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"claimPrivateRgt\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"claimAllPrivateRgt\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgrade\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/governance.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\nimport Big from \"big.js\";\n\nimport Cache from \"./cache.js\";\n\nvar erc20Abi = require(\".\" + \"/abi/ERC20.json\");\n\nexport const contractAddresses = {\n  RariGovernanceToken: \"0xD291E7a03283640FDc51b121aC401383A46cC623\",\n  RariGovernanceTokenDistributor: \"0x9C0CaEb986c003417D21A7Daaf30221d61FC1043\",\n  RariGovernanceTokenUniswapDistributor:\n    \"0x1FA69a416bCF8572577d3949b742fBB0a9CD98c7\",\n  RariGovernanceTokenVesting: \"0xA54B473028f4ba881F1eD6B670af4103e8F9B98a\",\n};\n\nexport const LP_TOKEN_CONTRACT = \"0x18a797c7c70c1bf22fdee1c09062aba709cacf04\";\n\nvar abis = {};\n\nabis[\"RariGovernanceToken\"] = require(\".\" +\n  \"/governance/abi/\" +\n  \"RariGovernanceToken\" +\n  \".json\");\n\nabis[\"RariGovernanceTokenDistributor\"] = require(\".\" +\n  \"/governance/abi/\" +\n  \"RariGovernanceTokenDistributor\" +\n  \".json\");\n\nabis[\"RariGovernanceTokenVesting\"] = require(\".\" +\n  \"/governance/abi/\" +\n  \"RariGovernanceTokenVesting\" +\n  \".json\");\n\nabis[\"RariGovernanceTokenUniswapDistributor\"] = require(\".\" +\n  \"/governance/abi/\" +\n  \"RariGovernanceTokenUniswapDistributor\" +\n  \".json\");\n\nexport default class Governance {\n  API_BASE_URL = \"http://206.81.6.235:3000/governance/\";\n\n  static CONTRACT_ADDRESSES = contractAddresses;\n  static CONTRACT_ABIS = abis;\n\n  constructor(web3) {\n    this.web3 = web3;\n    this.cache = new Cache({ rgtUsdPrice: 900, lpTokenData: 900 });\n\n    this.contracts = {};\n    for (const contractName of Object.keys(contractAddresses))\n      this.contracts[contractName] = new web3.eth.Contract(\n        abis[contractName],\n        contractAddresses[contractName]\n      );\n\n    var self = this;\n\n    this.rgt = {\n      getExchangeRate: async function () {\n        // TODO: RGT price getter function from Coingecko\n        return await self.cache.getOrUpdate(\"rgtUsdPrice\", async function () {\n          /* try {\n            return Web3.utils.toBN(Math.trunc((await axios.get(\"https://api.coingecko.com/api/v3/simple/price?vs_currencies=usd&ids=rgt\")).data.rgt.usd * 1e18));\n          } catch (error) {\n            throw new Error(\"Error retrieving data from Coingecko API: \" + error);\n          } */\n\n          try {\n            var data = (\n              await axios.post(\n                \"https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2\",\n                {\n                  query: `{\n              ethRgtPair: pair(id: \"0xdc2b82bc1106c9c5286e59344896fb0ceb932f53\") {\n                token0Price\n              }\n              ethUsdtPair: pair(id: \"0x0d4a11d5eeaac28ec3f61d100daf4d40471f1852\") {\n                token1Price\n              }\n            }\n            `,\n                }\n              )\n            ).data;\n\n            return Web3.utils.toBN(\n              Math.trunc(\n                data.data.ethRgtPair.token0Price *\n                  data.data.ethUsdtPair.token1Price *\n                  1e18\n              )\n            );\n          } catch (error) {\n            throw new Error(\n              \"Error retrieving data from The Graph API: \" + error\n            );\n          }\n        });\n      },\n      distributions: {\n        DISTRIBUTION_START_BLOCK: 11094200,\n        DISTRIBUTION_PERIOD: 390000,\n        DISTRIBUTION_END_BLOCK:\n          this.DISTRIBUTION_START_BLOCK + this.DISTRIBUTION_PERIOD,\n        FINAL_RGT_DISTRIBUTION: Web3.utils.toBN(\"8750000000000000000000000\"),\n        getDistributedAtBlock: function (blockNumber) {\n          var startBlock = self.rgt.distributions.DISTRIBUTION_START_BLOCK;\n          if (blockNumber <= startBlock) return Web3.utils.toBN(0);\n          if (\n            blockNumber >=\n            startBlock + self.rgt.distributions.DISTRIBUTION_PERIOD\n          )\n            return self.rgt.distributions.FINAL_RGT_DISTRIBUTION;\n          var blocks = blockNumber - startBlock;\n          if (blocks < 6500 * 15)\n            return Web3.utils\n              .toBN(1e18)\n              .mul(Web3.utils.toBN(blocks).pow(Web3.utils.toBN(2)))\n              .divn(2730)\n              .add(\n                Web3.utils.toBN(\"1450000000000000000000\").muln(blocks).divn(273)\n              );\n          if (blocks < 6500 * 30)\n            return Web3.utils\n              .toBN(\"14600000000000000000000\")\n              .muln(blocks)\n              .divn(273)\n              .sub(\n                Web3.utils\n                  .toBN(\"2000000000000000000\")\n                  .mul(Web3.utils.toBN(blocks).pow(Web3.utils.toBN(2)))\n                  .divn(17745)\n              )\n              .sub(Web3.utils.toBN(\"1000000000000000000000000\").divn(7));\n          if (blocks < 6500 * 45)\n            return Web3.utils\n              .toBN(1e18)\n              .mul(Web3.utils.toBN(blocks).pow(Web3.utils.toBN(2)))\n              .divn(35490)\n              .add(Web3.utils.toBN(\"39250000000000000000000000\").divn(7))\n              .sub(\n                Web3.utils.toBN(\"950000000000000000000\").muln(blocks).divn(273)\n              );\n          return Web3.utils\n            .toBN(1e18)\n            .mul(Web3.utils.toBN(blocks).pow(Web3.utils.toBN(2)))\n            .divn(35490)\n            .add(Web3.utils.toBN(\"34750000000000000000000000\").divn(7))\n            .sub(Web3.utils.toBN(\"50000000000000000000\").muln(blocks).divn(39));\n        },\n        getCurrentApy: async function (blockNumber, tvl) {\n          if (blockNumber === undefined && tvl === undefined) {\n            try {\n              return Web3.utils.toBN(\n                (await axios.get(self.API_BASE_URL + \"rgt/apy\")).data\n              );\n            } catch (error) {\n              throw new Error(\"Error retrieving data from Rari API: \" + error);\n            }\n          } else {\n            // Get APY from difference in distribution over last 270 blocks (estimating a 1 hour time difference)\n            var rgtDistributedPastHour = self.rgt.distributions\n              .getDistributedAtBlock(blockNumber)\n              .sub(\n                self.rgt.distributions.getDistributedAtBlock(blockNumber - 270)\n              );\n            var rgtDistributedPastHourPerUsd = rgtDistributedPastHour\n              .mul(Web3.utils.toBN(1e18))\n              .div(tvl);\n            var rgtDistributedPastHourPerUsdInUsd = rgtDistributedPastHourPerUsd\n              .mul(await self.rgt.getExchangeRate())\n              .div(Web3.utils.toBN(1e18));\n            return Web3.utils.toBN(\n              Math.trunc(\n                ((1 + rgtDistributedPastHourPerUsdInUsd / 1e18) ** (24 * 365) -\n                  1) *\n                  1e18\n              )\n            );\n          }\n        },\n        getCurrentApr: async function (blockNumber, tvl) {\n          // Get APR from difference in distribution over last 270 blocks (estimating a 1 hour time difference)\n          var rgtDistributedPastHour = self.rgt.distributions\n            .getDistributedAtBlock(blockNumber)\n            .sub(\n              self.rgt.distributions.getDistributedAtBlock(blockNumber - 270)\n            );\n          var rgtDistributedPastHourPerUsd = rgtDistributedPastHour\n            .mul(Web3.utils.toBN(1e18))\n            .div(tvl);\n          var rgtDistributedPastHourPerUsdInUsd = rgtDistributedPastHourPerUsd\n            .mul(await self.rgt.getExchangeRate())\n            .div(Web3.utils.toBN(1e18));\n          return rgtDistributedPastHourPerUsdInUsd.muln(24 * 365);\n        },\n        getUnclaimed: async function (account) {\n          return Web3.utils.toBN(\n            await self.contracts.RariGovernanceTokenDistributor.methods\n              .getUnclaimedRgt(account)\n              .call()\n          );\n        },\n        claim: async function (amount, options) {\n          return await self.contracts.RariGovernanceTokenDistributor.methods\n            .claimRgt(amount)\n            .send(options);\n        },\n        claimAll: async function (options) {\n          return await self.contracts.RariGovernanceTokenDistributor.methods\n            .claimAllRgt()\n            .send(options);\n        },\n        getClaimFee: function (blockNumber) {\n          var initialClaimFee = Web3.utils.toBN(0.33e18);\n          if (blockNumber <= self.rgt.distributions.DISTRIBUTION_START_BLOCK)\n            return initialClaimFee;\n          var distributionEndBlock =\n            self.rgt.distributions.DISTRIBUTION_START_BLOCK +\n            self.rgt.distributions.DISTRIBUTION_PERIOD;\n          if (blockNumber >= distributionEndBlock) return Web3.utils.toBN(0);\n          return initialClaimFee\n            .muln(distributionEndBlock - blockNumber)\n            .divn(self.rgt.distributions.DISTRIBUTION_PERIOD);\n        },\n        refreshDistributionSpeeds: async function (options) {\n          return await self.contracts.RariGovernanceTokenDistributor.methods\n            .refreshDistributionSpeeds()\n            .send(options);\n        },\n        refreshDistributionSpeedsByPool: async function (pool, options) {\n          return await self.contracts.RariGovernanceTokenDistributor.methods\n            .refreshDistributionSpeeds(pool)\n            .send(options);\n        },\n      },\n      sushiSwapDistributions: {\n        DISTRIBUTION_START_BLOCK: 11909000,\n        DISTRIBUTION_PERIOD: 6500 * 365 * 3,\n        DISTRIBUTION_END_BLOCK:\n          this.DISTRIBUTION_START_BLOCK + this.DISTRIBUTION_PERIOD,\n        FINAL_RGT_DISTRIBUTION: Web3.utils\n          .toBN(\"568717819057309757517546\")\n          .muln(80)\n          .divn(100),\n        LP_TOKEN_CONTRACT,\n        getDistributedAtBlock: function (blockNumber) {\n          var startBlock =\n            self.rgt.sushiSwapDistributions.DISTRIBUTION_START_BLOCK;\n          if (blockNumber <= startBlock) return web3.utils.toBN(0);\n          if (\n            blockNumber >=\n            startBlock + self.rgt.sushiSwapDistributions.DISTRIBUTION_PERIOD\n          )\n            return self.rgt.sushiSwapDistributions.FINAL_RGT_DISTRIBUTION;\n          var blocks = blockNumber - startBlock;\n          return self.rgt.sushiSwapDistributions.FINAL_RGT_DISTRIBUTION.muln(\n            blocks\n          ).divn(self.rgt.sushiSwapDistributions.DISTRIBUTION_PERIOD);\n        },\n        getCurrentApy: async function (blockNumber, totalStakedUsd) {\n          if (blockNumber === undefined && totalStaked === undefined) {\n            try {\n              return Web3.utils.toBN(\n                (await axios.get(self.API_BASE_URL + \"rgt/sushiswap/apy\")).data\n              );\n            } catch (error) {\n              throw new Error(\"Error retrieving data from Rari API: \" + error);\n            }\n          } else {\n            // Predicted APY if we have't started the distribution period or we don't have enough data\n            if (\n              blockNumber - 270 <\n              self.rgt.sushiSwapDistributions.DISTRIBUTION_START_BLOCK\n            )\n              blockNumber =\n                self.rgt.sushiSwapDistributions.DISTRIBUTION_START_BLOCK + 270;\n\n            // Get APY from difference in distribution over last 270 blocks (estimating a 1 hour time difference)\n            var rgtDistributedPastHour = self.rgt.sushiSwapDistributions\n              .getDistributedAtBlock(blockNumber)\n              .sub(\n                self.rgt.sushiSwapDistributions.getDistributedAtBlock(\n                  blockNumber - 270\n                )\n              );\n            var rgtDistributedPastHourPerUsd = rgtDistributedPastHour\n              .mul(Web3.utils.toBN(1e18))\n              .div(totalStakedUsd);\n            var rgtDistributedPastHourPerUsdInUsd = rgtDistributedPastHourPerUsd\n              .mul(await self.rgt.getExchangeRate())\n              .div(Web3.utils.toBN(1e18));\n            return Web3.utils.toBN(\n              Math.trunc(\n                ((1 + rgtDistributedPastHourPerUsdInUsd / 1e18) ** (24 * 365) -\n                  1) *\n                  1e18\n              )\n            );\n          }\n        },\n        getCurrentApr: async function (blockNumber, totalStakedUsd) {\n          // Predicted APY if we have't started the distribution period or we don't have enough data\n          if (\n            blockNumber - 270 <\n            self.rgt.sushiSwapDistributions.DISTRIBUTION_START_BLOCK\n          )\n            blockNumber =\n              self.rgt.sushiSwapDistributions.DISTRIBUTION_START_BLOCK + 270;\n\n          // Get APR from difference in distribution over last 270 blocks (estimating a 1 hour time difference)\n          var rgtDistributedPastHour = self.rgt.sushiSwapDistributions\n            .getDistributedAtBlock(blockNumber)\n            .sub(\n              self.rgt.sushiSwapDistributions.getDistributedAtBlock(\n                blockNumber - 270\n              )\n            );\n          var rgtDistributedPastHourPerUsd = rgtDistributedPastHour\n            .mul(Web3.utils.toBN(1e18))\n            .div(totalStakedUsd);\n          var rgtDistributedPastHourPerUsdInUsd = rgtDistributedPastHourPerUsd\n            .mul(await self.rgt.getExchangeRate())\n            .div(Web3.utils.toBN(1e18));\n          return rgtDistributedPastHourPerUsdInUsd.muln(24 * 365);\n        },\n        totalStaked: async function () {\n          return Web3.utils.toBN(\n            await self.contracts.RariGovernanceTokenUniswapDistributor.methods\n              .totalStaked()\n              .call()\n          );\n        },\n        getLpTokenData: async function () {\n          // TODO: RGT price getter function from Coingecko\n          return await self.cache.getOrUpdate(\"lpTokenData\", async function () {\n            try {\n              return (\n                await axios.post(\n                  \"https://api.thegraph.com/subgraphs/name/zippoxer/sushiswap-subgraph-fork\",\n                  {\n                    query: `{\n                      ethRgtPair: pair(id: \"0x18a797c7c70c1bf22fdee1c09062aba709cacf04\") {\n                        reserveUSD\n                        reserve0\n    \t\t\t\t\t\t\t\t\t\treserve1\n                        totalSupply\n                      }\n                    }`,\n                  }\n                )\n              ).data;\n            } catch (error) {\n              throw new Error(\n                \"Error retrieving data from The Graph API: \" + error\n              );\n            }\n          });\n        },\n        getLpTokenUsdPrice: async function () {\n          // TODO: RGT price getter function from Coingecko\n          var data = await self.rgt.sushiSwapDistributions.getLpTokenData();\n          return Web3.utils.toBN(\n            new Big(\n              (data.data.ethRgtPair.reserveUSD /\n                data.data.ethRgtPair.totalSupply) *\n                1e18\n            )\n            .toFixed(0)\n          );\n        },\n        getReservesPerLpToken: async function () {\n          // TODO: RGT price getter function from Coingecko\n          var data = await self.rgt.sushiSwapDistributions.getLpTokenData();\n          return {\n            rgt: Web3.utils.toBN(\n              Math.trunc(\n                (data.data.ethRgtPair.reserve1 /\n                  data.data.ethRgtPair.totalSupply) *\n                  1e18\n              )\n            ),\n            eth: Web3.utils.toBN(\n              Math.trunc(\n                (data.data.ethRgtPair.reserve0 /\n                  data.data.ethRgtPair.totalSupply) *\n                  1e18\n              )\n            ),\n          };\n        },\n        totalStakedUsd: async function () {\n          return (await self.rgt.sushiSwapDistributions.totalStaked())\n            .mul(await self.rgt.sushiSwapDistributions.getLpTokenUsdPrice())\n            .div(Web3.utils.toBN(1e18));\n        },\n        stakingBalanceOf: async function (account) {\n          return Web3.utils.toBN(\n            await self.contracts.RariGovernanceTokenUniswapDistributor.methods\n              .stakingBalances(account)\n              .call()\n          );\n        },\n        usdStakingBalanceOf: async function (account) {\n          return (\n            await self.rgt.sushiSwapDistributions.stakingBalanceOf(account)\n          )\n            .mul(await self.rgt.sushiSwapDistributions.getLpTokenUsdPrice())\n            .div(Web3.utils.toBN(1e18));\n        },\n        stakedReservesOf: async function (account) {\n          var stakingBalance =\n            await self.rgt.sushiSwapDistributions.stakingBalanceOf(account);\n          var reservesPerLpToken =\n            await self.rgt.sushiSwapDistributions.getReservesPerLpToken();\n          return {\n            rgt: reservesPerLpToken.rgt\n              .mul(stakingBalance)\n              .div(Web3.utils.toBN(1e18)),\n            eth: reservesPerLpToken.eth\n              .mul(stakingBalance)\n              .div(Web3.utils.toBN(1e18)),\n          };\n        },\n        deposit: async function (amount, options) {\n          var slp = new self.web3.eth.Contract(\n            erc20Abi,\n            self.rgt.sushiSwapDistributions.LP_TOKEN_CONTRACT\n          );\n          var allowance = Web3.utils.toBN(\n            await slp.methods\n              .allowance(\n                options.from,\n                self.contracts.RariGovernanceTokenUniswapDistributor.options\n                  .address\n              )\n              .call()\n          );\n          amount = Web3.utils.toBN(amount);\n          if (amount.gt(allowance))\n            await slp.methods\n              .approve(\n                self.contracts.RariGovernanceTokenUniswapDistributor.options\n                  .address,\n                amount\n              )\n              .send(options);\n          await self.contracts.RariGovernanceTokenUniswapDistributor.methods\n            .deposit(amount)\n            .send(options);\n        },\n        withdraw: async function (amount, options) {\n          await self.contracts.RariGovernanceTokenUniswapDistributor.methods\n            .withdraw(amount)\n            .send(options);\n        },\n        getUnclaimed: async function (account) {\n          return Web3.utils.toBN(\n            await self.contracts.RariGovernanceTokenUniswapDistributor.methods\n              .getUnclaimedRgt(account)\n              .call()\n          );\n        },\n        claim: async function (amount, options) {\n          return await self.contracts.RariGovernanceTokenUniswapDistributor.methods\n            .claimRgt(amount)\n            .send(options);\n        },\n        claimAll: async function (options) {\n          return await self.contracts.RariGovernanceTokenUniswapDistributor.methods\n            .claimAllRgt()\n            .send(options);\n        },\n      },\n      vesting: {\n        PRIVATE_VESTING_START_TIMESTAMP: 1603202400,\n        PRIVATE_VESTING_PERIOD: 2 * 365 * 86400,\n        getUnclaimed: async function (account) {\n          return Web3.utils.toBN(\n            await self.contracts.RariGovernanceTokenVesting.methods\n              .getUnclaimedPrivateRgt(account)\n              .call()\n          );\n        },\n        claim: async function (amount, options) {\n          return await self.contracts.RariGovernanceTokenVesting.methods\n            .claimPrivateRgt(amount)\n            .send(options);\n        },\n        claimAll: async function (options) {\n          return await self.contracts.RariGovernanceTokenVesting.methods\n            .claimAllPrivateRgt()\n            .send(options);\n        },\n        getClaimFee: function (timestamp) {\n          var initialClaimFee = Web3.utils.toBN(1e18);\n          if (timestamp <= self.rgt.vesting.PRIVATE_VESTING_START_TIMESTAMP)\n            return initialClaimFee;\n          var privateVestingEndTimestamp =\n            self.rgt.vesting.PRIVATE_VESTING_START_TIMESTAMP +\n            self.rgt.vesting.PRIVATE_VESTING_PERIOD;\n          if (timestamp >= privateVestingEndTimestamp)\n            return Web3.utils.toBN(0);\n          return initialClaimFee\n            .muln(privateVestingEndTimestamp - timestamp)\n            .divn(self.rgt.vesting.PRIVATE_VESTING_PERIOD);\n        },\n      },\n      balanceOf: async function (account) {\n        return Web3.utils.toBN(\n          await self.contracts.RariGovernanceToken.methods\n            .balanceOf(account)\n            .call()\n        );\n      },\n      transfer: async function (recipient, amount, options) {\n        return await self.contracts.RariGovernanceToken.methods\n          .transfer(recipient, amount)\n          .send(options);\n      },\n    };\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/index.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\nimport Big from \"big.js\";\n\nimport DydxSubpool from \"./subpools/dydx.js\";\nimport CompoundSubpool from \"./subpools/compound.js\";\nimport AaveSubpool from \"./subpools/aave.js\";\nimport MStableSubpool from \"./subpools/mstable.js\";\nimport YVaultSubpool from \"./subpools/yvault.js\";\nimport KeeperDAOSubpool from \"./subpools/keeperdao.js\";\nimport AlphaSubpool from \"./subpools/alpha.js\";\nimport FuseSubpool from \"./subpools/fuse.js\";\n\nimport StablePool from \"./pools/stable.js\";\nimport YieldPool from \"./pools/yield.js\";\nimport EthereumPool from \"./pools/ethereum.js\";\nimport DaiPool from \"./pools/dai.js\";\n\nimport Governance from \"./governance.js\";\n\nimport Cache from \"./cache.js\";\n\nvar erc20Abi = require(\".\" + \"/abi/ERC20.json\");\n\nexport default class Rari {\n  constructor(web3Provider) {\n    this.web3 = new Web3(web3Provider);\n    this.cache = new Cache({ allTokens: 86400, ethUsdPrice: 300 });\n\n    /* const approveFunction = async ({ from, to, encodedFunctionCall, txFee, gasPrice, gas, nonce, relayerAddress, relayHubAddress }) => {\n        try {\n            var response = await request.post(\"https://app.rari.capital/checkSig.php\", { data: JSON.stringify({ from, to, encodedFunctionCall, txFee, gasPrice, gas, nonce, relayerAddress, relayHubAddress }), contentType: 'application/json', });\n        } catch (error) {\n            return console.error(\"checkSig error:\", error);\n        }\n\n        console.log(\"checkSig response:\", response);\n        return response;\n    };\n\n    this.web3Gsn = new Web3(new OpenZeppelinGSNProvider.GSNProvider(web3Provider, { approveFunction })); */\n\n    for (const currencyCode of Object.keys(this.internalTokens))\n      this.internalTokens[currencyCode].contract = new this.web3.eth.Contract(\n        erc20Abi,\n        this.internalTokens[currencyCode].address\n      );\n\n    var self = this;\n\n    this.getEthUsdPriceBN = async function () {\n      return await self.cache.getOrUpdate(\"ethUsdPrice\", async function () {\n        try {\n          return Web3.utils.toBN(\n            new Big(\n              (\n                await axios.get(\n                  \"https://api.coingecko.com/api/v3/simple/price?vs_currencies=usd&ids=ethereum\"\n                )\n              ).data.ethereum.usd\n            )\n              .mul(1e18)\n              .toFixed(0)\n          );\n        } catch (error) {\n          throw new Error(\"Error retrieving data from Coingecko API: \" + error);\n        }\n      });\n    };\n\n    this.getAllTokens = async function (cacheTimeout = 86400) {\n      self.cache._raw[\"allTokens\"].timeout =\n        typeof cacheTimeout === \"undefined\" ? 86400 : cacheTimeout;\n      return await self.cache.getOrUpdate(\"allTokens\", async function () {\n        var allTokens = Object.assign({}, self.internalTokens);\n        var data = {\"records\":[{\"symbol\":\"DAI\",\"address\":\"0x6b175474e89094c44da98b954eedeac495271d0f\",\"name\":\"Dai Stablecoin\",\"decimals\":18},{\"symbol\":\"REP\",\"address\":\"0x1985365e9f78359a9B6AD760e32412f4a445E862\",\"name\":\"Augur Reputation\",\"decimals\":18},{\"symbol\":\"WETH\",\"address\":\"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",\"name\":\"Wrapped Ether\",\"decimals\":18},{\"symbol\":\"ZRX\",\"address\":\"0xe41d2489571d322189246dafa5ebde1f4699f498\",\"name\":\"0x Protocol Token\",\"decimals\":18},{\"symbol\":\"USDC\",\"address\":\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\"name\":\"USD Coin\",\"decimals\":6},{\"symbol\":\"BAT\",\"address\":\"0x0d8775f648430679a709e98d2b0cb6250d2887ef\",\"name\":\"Basic Attention Token\",\"decimals\":18},{\"symbol\":\"MKR\",\"address\":\"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\",\"name\":\"Maker\",\"decimals\":18},{\"symbol\":\"WBTC\",\"address\":\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\",\"name\":\"Wrapped BTC\",\"decimals\":8},{\"symbol\":\"SNX\",\"address\":\"0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f\",\"name\":\"Synthetix Network Token\",\"decimals\":18},{\"symbol\":\"SUSD\",\"address\":\"0x57ab1ec28d129707052df4df418d58a2d46d5f51\",\"name\":\"sUSD\",\"decimals\":18},{\"symbol\":\"KNC\",\"address\":\"0xdd974d5c2e2928dea5f71b9825b8b646686bd200\",\"name\":\"Kyber Network Crystal\",\"decimals\":18},{\"symbol\":\"BNT\",\"address\":\"0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c\",\"name\":\"Bancor Network Token\",\"decimals\":18},{\"symbol\":\"GNO\",\"address\":\"0x6810e776880c02933d47db1b9fc05908e5386b96\",\"name\":\"Gnosis Token\",\"decimals\":18},{\"symbol\":\"LINK\",\"address\":\"0x514910771af9ca656af840dff83e8264ecf986ca\",\"name\":\"Chainlink Token\",\"decimals\":18},{\"symbol\":\"REN\",\"address\":\"0x408e41876cccdc0f92210600ef50372656052a38\",\"name\":\"Republic Protocol\",\"decimals\":18},{\"symbol\":\"GNT\",\"address\":\"0xa74476443119a942de498590fe1f2454d7d4ac0d\",\"name\":\"Golem Network Token\",\"decimals\":18},{\"symbol\":\"OMG\",\"address\":\"0xd26114cd6ee289accf82350c8d8487fedb8a0c07\",\"name\":\"OmiseGO\",\"decimals\":18},{\"symbol\":\"ANT\",\"address\":\"0x960b236a07cf122663c4303350609a66a7b288c0\",\"name\":\"Aragon Network Token\",\"decimals\":18},{\"symbol\":\"SAI\",\"address\":\"0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359\",\"name\":\"Sai Stablecoin v1.0\",\"decimals\":18},{\"symbol\":\"CVL\",\"address\":\"0x01fa555c97d7958fa6f771f3bbd5ccd508f81e22\",\"name\":\"Civil Token\",\"decimals\":18},{\"symbol\":\"DTH\",\"address\":\"0x5adc961d6ac3f7062d2ea45fefb8d8167d44b190\",\"name\":\"Dether\",\"decimals\":18},{\"symbol\":\"FOAM\",\"address\":\"0x4946fcea7c692606e8908002e55a582af44ac121\",\"name\":\"FOAM\",\"decimals\":18},{\"symbol\":\"AST\",\"address\":\"0x27054b13b1b798b345b591a4d22e6562d47ea75a\",\"name\":\"AirSwap Token\",\"decimals\":4},{\"symbol\":\"AION\",\"address\":\"0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466\",\"name\":\"Aion Network\",\"decimals\":8},{\"symbol\":\"GEN\",\"address\":\"0x543ff227f64aa17ea132bf9886cab5db55dcaddf\",\"name\":\"DAOstack\",\"decimals\":18},{\"symbol\":\"STORJ\",\"address\":\"0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac\",\"name\":\"Storj\",\"decimals\":8},{\"symbol\":\"MANA\",\"address\":\"0x0f5d2fb29fb7d3cfee444a200298f468908cc942\",\"name\":\"Decentraland\",\"decimals\":18},{\"symbol\":\"ENTRP\",\"address\":\"0x5bc7e5f0ab8b2e10d2d0a3f21739fce62459aef3\",\"name\":\"Hut34 Entropy Token\",\"decimals\":18},{\"symbol\":\"MLN\",\"address\":\"0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1\",\"name\":\"Melon\",\"decimals\":18},{\"symbol\":\"LOOM\",\"address\":\"0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0\",\"name\":\"Loom Network Token\",\"decimals\":18},{\"symbol\":\"CELR\",\"address\":\"0x4f9254c83eb525f9fcf346490bbb3ed28a81c667\",\"name\":\"Celer Network Token\",\"decimals\":18},{\"symbol\":\"RLC\",\"address\":\"0x607f4c5bb672230e8672085532f7e901544a7375\",\"name\":\"iExec RLC Token\",\"decimals\":9},{\"symbol\":\"ICN\",\"address\":\"0x888666ca69e0f178ded6d75b5726cee99a87d698\",\"name\":\"ICONOMI\",\"decimals\":18},{\"symbol\":\"DGD\",\"address\":\"0xe0b7927c4af23765cb51314a0e0521a9645f0e2a\",\"name\":\"Digix\",\"decimals\":9},{\"symbol\":\"ZIL\",\"address\":\"0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27\",\"name\":\"Zilliqa\",\"decimals\":12},{\"symbol\":\"cBAT\",\"address\":\"0x6c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e\",\"name\":\"Compound Basic Attention Token\",\"decimals\":8},{\"symbol\":\"cDAI\",\"address\":\"0x5d3a536e4d6dbd6114cc1ead35777bab948e3643\",\"name\":\"Compound Dai\",\"decimals\":8},{\"symbol\":\"cSAI\",\"address\":\"0xf5dce57282a584d2746faf1593d3121fcac444dc\",\"name\":\"Compound Sai (Legacy Dai)\",\"decimals\":8},{\"symbol\":\"cETH\",\"address\":\"0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5\",\"name\":\"Compound Ether\",\"decimals\":8},{\"symbol\":\"cREP\",\"address\":\"0x158079ee67fce2f58472a96584a73c7ab9ac95c1\",\"name\":\"Compound Augur\",\"decimals\":8},{\"symbol\":\"cUSDC\",\"address\":\"0x39aa39c021dfbae8fac545936693ac917d5e7563\",\"name\":\"Compound USD Coin\",\"decimals\":8},{\"symbol\":\"cZRX\",\"address\":\"0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407\",\"name\":\"Compound 0x\",\"decimals\":8},{\"symbol\":\"0xBTC\",\"address\":\"0xb6ed7644c69416d67b522e20bc294a9a9b405b31\",\"name\":\"0xBitcoin Token\",\"decimals\":8},{\"symbol\":\"SNT\",\"address\":\"0x744d70fdbe2ba4cf95131626614a1763df805b9e\",\"name\":\"Status Network Token\",\"decimals\":18},{\"symbol\":\"SPANK\",\"address\":\"0x42d6622dece394b54999fbd73d108123806f6a18\",\"name\":\"SPANK\",\"decimals\":18},{\"symbol\":\"BOOTY\",\"address\":\"0x6b01c3170ae1efebee1a3159172cb3f7a5ecf9e5\",\"name\":\"BOOTY\",\"decimals\":18},{\"symbol\":\"UBT\",\"address\":\"0x8400d94a5cb0fa0d041a3788e395285d61c9ee5e\",\"name\":\"UniBright\",\"decimals\":8},{\"symbol\":\"ICX\",\"address\":\"0xb5a5f22694352c15b00323844ad545abb2b11028\",\"name\":\"ICON\",\"decimals\":18},{\"symbol\":\"NMR\",\"address\":\"0x1776e1f26f98b1a5df9cd347953a26dd3cb46671\",\"name\":\"Numeraire\",\"decimals\":18},{\"symbol\":\"GUSD\",\"address\":\"0x056fd409e1d7a124bd7017459dfea2f387b6d5cd\",\"name\":\"Gemini Dollar\",\"decimals\":2},{\"symbol\":\"FUN\",\"address\":\"0x419d0d8bdd9af5e606ae2232ed285aff190e711b\",\"name\":\"FunFair\",\"decimals\":8},{\"symbol\":\"PAX\",\"address\":\"0x8e870d67f660d95d5be530380d0ec0bd388289e1\",\"name\":\"PAX Stablecoin\",\"decimals\":18},{\"symbol\":\"TUSD\",\"address\":\"0x0000000000085d4780b73119b644ae5ecd22b376\",\"name\":\"TrueUSD\",\"decimals\":18},{\"symbol\":\"LPT\",\"address\":\"0x58b6a8a3302369daec383334672404ee733ab239\",\"name\":\"Livepeer\",\"decimals\":18},{\"symbol\":\"ENJ\",\"address\":\"0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c\",\"name\":\"EnjinCoin\",\"decimals\":18},{\"symbol\":\"POWR\",\"address\":\"0x595832f8fc6bf59c85c527fec3740a1b7a361269\",\"name\":\"PowerLedger\",\"decimals\":6},{\"symbol\":\"REQ\",\"address\":\"0x8f8221afbb33998d8584a2b05749ba73c37a938a\",\"name\":\"Request\",\"decimals\":18},{\"symbol\":\"DNT\",\"address\":\"0x0abdace70d3790235af448c88547603b945604ea\",\"name\":\"district0x\",\"decimals\":18},{\"symbol\":\"MATIC\",\"address\":\"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0\",\"name\":\"Matic Network Token\",\"decimals\":18},{\"symbol\":\"LRC\",\"address\":\"0xbbbbca6a901c926f240b89eacb641d8aec7aeafd\",\"name\":\"Loopring\",\"decimals\":18},{\"symbol\":\"RDN\",\"address\":\"0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6\",\"name\":\"Raiden Network Token\",\"decimals\":18},{\"symbol\":\"USDT\",\"address\":\"0xdac17f958d2ee523a2206206994597c13d831ec7\",\"name\":\"Tether USD\",\"decimals\":6},{\"symbol\":\"GST2\",\"address\":\"0x0000000000b3f879cb30fe243b4dfee438691c04\",\"name\":\"Gas Token 2\",\"decimals\":2},{\"symbol\":\"COMP\",\"address\":\"0xc00e94cb662c3520282e6f5717214004a7f26888\",\"name\":\"Compound\",\"decimals\":18},{\"symbol\":\"UMA\",\"address\":\"0x04fa0d235c4abf4bcf4787af4cf447de572ef828\",\"name\":\"Universal Market Access\",\"decimals\":18},{\"symbol\":\"BZRX\",\"address\":\"0x56d811088235f11c8920698a204a5010a788f4b3\",\"name\":\"bZx Protocol Token\",\"decimals\":18},{\"symbol\":\"renBTC\",\"address\":\"0xeb4c2781e4eba804ce9a9803c67d0893436bb27d\",\"name\":\"renBTC\",\"decimals\":8},{\"symbol\":\"BAL\",\"address\":\"0xba100000625a3754423978a60c9317c58a424e3d\",\"name\":\"Balancer\",\"decimals\":18},{\"symbol\":\"LEND\",\"address\":\"0x80fb784b7ed66730e8b1dbd9820afd29931aab03\",\"name\":\"Aave\",\"decimals\":18},{\"symbol\":\"YFI\",\"address\":\"0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e\",\"name\":\"yearn.finance\",\"decimals\":18},{\"symbol\":\"AMPL\",\"address\":\"0xd46ba6d942050d489dbd938a2c909a5d5039a161\",\"name\":\"Ampleforth\",\"decimals\":9},{\"symbol\":\"KEEP\",\"address\":\"0x85eee30c52b0b379b046fb0f85f4f3dc3009afec\",\"name\":\"Keep\",\"decimals\":18},{\"symbol\":\"mUSD\",\"address\":\"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\"name\":\"mStable USD\",\"decimals\":18},{\"symbol\":\"bUSD\",\"address\":\"0x4Fabb145d64652a948d72533023f6E7A623C7C53\",\"name\":\"Binance USD\",\"decimals\":18},{\"symbol\":\"CRV\",\"address\":\"0xd533a949740bb3306d119cc777fa900ba034cd52\",\"name\":\"Curve DAO Token\",\"decimals\":18},{\"symbol\":\"SUSHI\",\"address\":\"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2\",\"name\":\"Sushi\",\"decimals\":18},{\"symbol\":\"swUSD\",\"address\":\"0x77C6E4a580c0dCE4E5c7a17d0bc077188a83A059\",\"name\":\"Swerve.fi swUSD\",\"decimals\":18},{\"symbol\":\"SWRV\",\"address\":\"0xB8BAa0e4287890a5F79863aB62b7F175ceCbD433\",\"name\":\"Swerve DAO Token\",\"decimals\":18},{\"symbol\":\"sBTC\",\"address\":\"0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6\",\"name\":\"Synth sBTC\",\"decimals\":18},{\"symbol\":\"UNI\",\"address\":\"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984\",\"name\":\"Uniswap Protocol Governance Token\",\"decimals\":18}]}\n        data.records.sort((a, b) => (a.symbol > b.symbol ? 1 : -1));\n\n        for (const token of data.records)\n          if (\n            [\n              \"DAI\",\n              \"USDC\",\n              \"USDT\",\n              \"TUSD\",\n              \"BUSD\",\n              \"bUSD\",\n              \"sUSD\",\n              \"SUSD\",\n              \"mUSD\",\n            ].indexOf(token.symbol) < 0\n          ) {\n            token.contract = new self.web3.eth.Contract(\n              erc20Abi,\n              token.address\n            );\n            allTokens[token.symbol] = token;\n          }\n\n        return allTokens;\n      });\n    };\n\n    let subpools = {\n      dYdX: new DydxSubpool(this.web3),\n      Compound: new CompoundSubpool(this.web3),\n      Aave: new AaveSubpool(this.web3),\n      mStable: new MStableSubpool(this.web3),\n      yVault: new YVaultSubpool(this.web3),\n      KeeperDAO: new KeeperDAOSubpool(this.web3),\n      Alpha: new AlphaSubpool(this.web3),\n      Fuse2: new FuseSubpool(this.web3, { \"USDC\": \"0x69aEd4932B3aB019609dc567809FA6953a7E0858\" }),\n      Fuse3: new FuseSubpool(this.web3, { \"USDC\": \"0x94C49563a3950424a2a7790c3eF5458A2A359C7e\" }),\n      Fuse6: new FuseSubpool(this.web3, { \"USDC\": \"0xdb55b77f5e8a1a41931684cf9e4881d24e6b6cc9\", \"DAI\": \"0x989273ec41274C4227bCB878C2c26fdd3afbE70d\" }),\n      Fuse7: new FuseSubpool(this.web3, { \"USDC\": \"0x53De5A7B03dc24Ff5d25ccF7Ad337a0425Dfd8D1\", \"DAI\": \"0x7322B10Db09687fe8889aD8e87f333f95104839F\" }),\n      Fuse11: new FuseSubpool(this.web3, { \"USDC\": \"0x241056eb034BEA7482290f4a9E3e4dd7269D4329\" }),\n      Fuse13: new FuseSubpool(this.web3, { \"USDC\": \"0x3b624de26A6CeBa421f9857127e37A5EFD8ecaab\" }),\n      Fuse14: new FuseSubpool(this.web3, { \"USDC\": \"0x6447026FE96363669B5be2EE135843a5e4d15B50\" }),\n      Fuse15: new FuseSubpool(this.web3, { \"USDC\": \"0x5F9FaeD5599D86D2e6F8d982189d560C067897a0\" }),\n      Fuse16: new FuseSubpool(this.web3, { \"USDC\": \"0x7bA788fa2773fb157EfAfAd046FE5E0e6120DEd5\" }),\n      Fuse18: new FuseSubpool(this.web3, { \"USDC\": \"0x6f95d4d251053483f41c8718C30F4F3C404A8cf2\", \"DAI\": \"0x8E4E0257A4759559B4B1AC087fe8d80c63f20D19\" }),\n    };\n\n    this.pools = {\n      stable: new StablePool(\n        this.web3,\n        {\n          dYdX: subpools[\"dYdX\"],\n          Compound: subpools[\"Compound\"],\n          Aave: subpools[\"Aave\"],\n          mStable: subpools[\"mStable\"],\n          Fuse2: subpools[\"Fuse2\"],\n          Fuse3: subpools[\"Fuse3\"],\n          Fuse7: subpools[\"Fuse7\"],\n          Fuse11: subpools[\"Fuse11\"],\n          Fuse13: subpools[\"Fuse13\"],\n          Fuse14: subpools[\"Fuse14\"],\n          Fuse15: subpools[\"Fuse15\"],\n          Fuse16: subpools[\"Fuse16\"],\n          Fuse18: subpools[\"Fuse18\"],\n          Fuse6: subpools[\"Fuse6\"],\n        },\n        this.getAllTokens\n      ),\n      yield: new YieldPool(\n        this.web3,\n        {\n          dYdX: subpools[\"dYdX\"],\n          Compound: subpools[\"Compound\"],\n          Aave: subpools[\"Aave\"],\n          mStable: subpools[\"mStable\"],\n          yVault: subpools[\"yVault\"],\n        },\n        this.getAllTokens\n      ),\n      ethereum: new EthereumPool(\n        this.web3,\n        {\n          dYdX: subpools[\"dYdX\"],\n          Compound: subpools[\"Compound\"],\n          KeeperDAO: subpools[\"KeeperDAO\"],\n          Aave: subpools[\"Aave\"],\n          Alpha: subpools[\"Alpha\"],\n          Enzyme: subpools[\"Alpha\"],\n        },\n        this.getAllTokens\n      ),\n      dai: new DaiPool(\n        this.web3,\n        {\n          dYdX: subpools[\"dYdX\"],\n          Compound: subpools[\"Compound\"],\n          Aave: subpools[\"Aave\"],\n          mStable: subpools[\"mStable\"],\n          Fuse6: subpools[\"Fuse6\"],\n          Fuse7: subpools[\"Fuse7\"],\n          Fuse18: subpools[\"Fuse18\"],\n        },\n        this.getAllTokens\n      ),\n    };\n\n    this.governance = new Governance(this.web3);\n  }\n\n  static StablePool = StablePool;\n  static YieldPool = YieldPool;\n  static EthereumPool = EthereumPool;\n  static DaiPool = DaiPool;\n\n  static Governance = Governance;\n\n  static Web3 = Web3;\n  static BN = Web3.utils.BN;\n\n  internalTokens = {\n    DAI: {\n      symbol: \"DAI\",\n      address: \"0x6b175474e89094c44da98b954eedeac495271d0f\",\n      name: \"Dai Stablecoin\",\n      decimals: 18,\n    },\n    USDC: {\n      symbol: \"USDC\",\n      address: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n      name: \"USD Coin\",\n      decimals: 6,\n    },\n    USDT: {\n      symbol: \"USDT\",\n      address: \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n      name: \"Tether USD\",\n      decimals: 6,\n    },\n    TUSD: {\n      symbol: \"TUSD\",\n      address: \"0x0000000000085d4780b73119b644ae5ecd22b376\",\n      name: \"TrueUSD\",\n      decimals: 18,\n    },\n    BUSD: {\n      symbol: \"BUSD\",\n      address: \"0x4Fabb145d64652a948d72533023f6E7A623C7C53\",\n      name: \"Binance USD\",\n      decimals: 18,\n    },\n    sUSD: {\n      symbol: \"sUSD\",\n      address: \"0x57ab1ec28d129707052df4df418d58a2d46d5f51\",\n      name: \"sUSD\",\n      decimals: 18,\n    },\n    mUSD: {\n      symbol: \"mUSD\",\n      address: \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n      name: \"mStable USD\",\n      decimals: 18,\n    },\n  };\n}\n"
  },
  {
    "path": "src/rari-sdk/package.json",
    "content": "{\n  \"name\": \"@rari-capital/rari-sdk\",\n  \"version\": \"1.4.0\",\n  \"description\": \"Rari Capital SDK\",\n  \"main\": \"./index.js\",\n  \"author\": \"David Lucid\",\n  \"license\": \"AGPL-3.0-only\",\n  \"dependencies\": {\n    \"axios\": \"^0.21.1\",\n    \"big.js\": \"^6.0.3\"\n  },\n  \"peerDependencies\": {\n    \"web3\": \"^1.2.11\"\n  },\n  \"react-native\": {\n    \"zlib\": \"browserify-zlib\",\n    \"console\": \"console-browserify\",\n    \"constants\": \"constants-browserify\",\n    \"crypto\": \"react-native-crypto\",\n    \"dns\": \"dns.js\",\n    \"net\": \"react-native-tcp\",\n    \"domain\": \"domain-browser\",\n    \"http\": \"@tradle/react-native-http\",\n    \"https\": \"https-browserify\",\n    \"os\": \"react-native-os\",\n    \"path\": \"path-browserify\",\n    \"querystring\": \"querystring-es3\",\n    \"fs\": \"react-native-level-fs\",\n    \"_stream_transform\": \"readable-stream/transform\",\n    \"_stream_readable\": \"readable-stream/readable\",\n    \"_stream_writable\": \"readable-stream/writable\",\n    \"_stream_duplex\": \"readable-stream/duplex\",\n    \"_stream_passthrough\": \"readable-stream/passthrough\",\n    \"dgram\": \"react-native-udp\",\n    \"stream\": \"stream-browserify\",\n    \"timers\": \"timers-browserify\",\n    \"tty\": \"tty-browserify\",\n    \"vm\": \"vm-browserify\",\n    \"tls\": false\n  },\n  \"browser\": {\n    \"zlib\": \"browserify-zlib\",\n    \"console\": \"console-browserify\",\n    \"constants\": \"constants-browserify\",\n    \"crypto\": \"react-native-crypto\",\n    \"dns\": \"dns.js\",\n    \"net\": \"react-native-tcp\",\n    \"domain\": \"domain-browser\",\n    \"http\": \"@tradle/react-native-http\",\n    \"https\": \"https-browserify\",\n    \"os\": \"react-native-os\",\n    \"path\": \"path-browserify\",\n    \"querystring\": \"querystring-es3\",\n    \"fs\": \"react-native-level-fs\",\n    \"_stream_transform\": \"readable-stream/transform\",\n    \"_stream_readable\": \"readable-stream/readable\",\n    \"_stream_writable\": \"readable-stream/writable\",\n    \"_stream_duplex\": \"readable-stream/duplex\",\n    \"_stream_passthrough\": \"readable-stream/passthrough\",\n    \"dgram\": \"react-native-udp\",\n    \"stream\": \"stream-browserify\",\n    \"timers\": \"timers-browserify\",\n    \"tty\": \"tty-browserify\",\n    \"vm\": \"vm-browserify\",\n    \"tls\": false\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/pools/dai/abi/legacy/v1.0.0/RariFundController.json",
    "content": "[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"inputCurrencyCode\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"outputCurrencyCode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inputAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"inputAmountUsd\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"outputAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"outputAmountUsd\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enum RariFundController.CurrencyExchange\",\"name\":\"exchange\",\"type\":\"uint8\"}],\"name\":\"CurrencyTrade\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FundDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FundEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"FundManagerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"FundRebalancerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum RariFundController.PoolAllocationAction\",\"name\":\"action\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolAllocation\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[],\"name\":\"IS_RARI_FUND_CONTROLLER\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rariFundManager\",\"outputs\":[{\"internalType\":\"contract RariFundManager\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"newContract\",\"type\":\"address\"}],\"name\":\"upgradeFundController\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"newContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"erc20Contract\",\"type\":\"address\"}],\"name\":\"upgradeFundController\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newContract\",\"type\":\"address\"}],\"name\":\"setFundManager\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setFundRebalancer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"disableFund\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"enableFund\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"}],\"name\":\"getPoolsByCurrency\",\"outputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getDydxBalances\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"}],\"name\":\"_getPoolBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"}],\"name\":\"getPoolBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveToPool\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"}],\"name\":\"hasCurrencyInPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"referralCode\",\"type\":\"uint16\"}],\"name\":\"setAaveReferralCode\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositToPool\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFromPool\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"all\",\"type\":\"bool\"}],\"name\":\"withdrawFromPoolOptimized\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"}],\"name\":\"withdrawAllFromPool\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"enum RariFundController.LiquidityPool\",\"name\":\"pool\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"}],\"name\":\"withdrawAllFromPoolOnUpgrade\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"erc20Contract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveTo0x\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"setDailyLossRateLimit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"inputCurrencyCode\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"outputCurrencyCode\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"makerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"takerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"makerAssetAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"takerAssetAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"makerFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"takerFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expirationTimeSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"makerAssetData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"takerAssetData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"makerFeeAssetData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"takerFeeAssetData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order[]\",\"name\":\"orders\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"takerAssetFillAmount\",\"type\":\"uint256\"}],\"name\":\"marketSell0xOrdersFillOrKill\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approveToMUsd\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"inputCurrencyCode\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"outputCurrencyCode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"inputAmount\",\"type\":\"uint256\"}],\"name\":\"swapMStable\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]\n"
  },
  {
    "path": "src/rari-sdk/pools/dai/abi/legacy/v1.0.0/RariFundProxy.json",
    "content": "[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newContract\",\"type\":\"address\"}],\"name\":\"FundManagerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"GsnTrustedSignerSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"string\",\"name\":\"inputCurrencyCode\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"outputErc20Contract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawalAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawalAmountAfterFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"makerAssetFilledAmount\",\"type\":\"uint256\"}],\"name\":\"PostWithdrawalExchange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"inputErc20Contract\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"outputCurrencyCode\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"takerAssetFilledAmount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositAmount\",\"type\":\"uint256\"}],\"name\":\"PreDepositExchange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldRelayHub\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newRelayHub\",\"type\":\"address\"}],\"name\":\"RelayHubChanged\",\"type\":\"event\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":true,\"inputs\":[],\"name\":\"getHubAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"actualCharge\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"preRetVal\",\"type\":\"bytes32\"}],\"name\":\"postRelayedCall\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"context\",\"type\":\"bytes\"}],\"name\":\"preRelayedCall\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rariFundManager\",\"outputs\":[{\"internalType\":\"contract RariFundManager\",\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"relayHubVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"setDefaultRelayHub\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newContract\",\"type\":\"address\"}],\"name\":\"setFundManager\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"setGsnTrustedSigner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"inputCurrencyCode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"inputAmount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"outputCurrencyCode\",\"type\":\"string\"}],\"name\":\"exchangeAndDeposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"inputErc20Contract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"inputAmount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"outputCurrencyCode\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"makerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"takerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"makerAssetAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"takerAssetAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"makerFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"takerFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expirationTimeSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"makerAssetData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"takerAssetData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"makerFeeAssetData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"takerFeeAssetData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order[]\",\"name\":\"orders\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"takerAssetFillAmount\",\"type\":\"uint256\"}],\"name\":\"exchangeAndDeposit\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"inputCurrencyCodes\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"inputAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"outputErc20Contract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"makerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"takerAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"makerAssetAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"takerAssetAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"makerFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"takerFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expirationTimeSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"makerAssetData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"takerAssetData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"makerFeeAssetData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"takerFeeAssetData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order[][]\",\"name\":\"orders\",\"type\":\"tuple[][]\"},{\"internalType\":\"bytes[][]\",\"name\":\"signatures\",\"type\":\"bytes[][]\"},{\"internalType\":\"uint256[]\",\"name\":\"makerAssetFillAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"protocolFees\",\"type\":\"uint256[]\"}],\"name\":\"withdrawAndExchange\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"string\",\"name\":\"currencyCode\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"relay\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"encodedFunction\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"transactionFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"approvalData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"acceptRelayedCall\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"erc20Contract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"forwardLostFunds\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getRawFundBalancesAndPrices\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RariFundController.LiquidityPool[][]\",\"name\":\"\",\"type\":\"uint8[][]\"},{\"internalType\":\"uint256[][]\",\"name\":\"\",\"type\":\"uint256[][]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]\n"
  },
  {
    "path": "src/rari-sdk/pools/dai.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\n\nimport StablePool from \"./stable.js\";\n\nconst contractAddresses = {\n  RariFundController: \"0xaFD2AaDE64E6Ea690173F6DE59Fc09F5C9190d74\",\n  RariFundManager: \"0xB465BAF04C087Ce3ed1C266F96CA43f4847D9635\",\n  RariFundToken: \"0x0833cfcb11A5ba89FbAF73a407831c98aD2D7648\",\n  RariFundPriceConsumer: \"0x96ce4C781eDF07F4e3D210c919CA4F9A7ad82a7f\",\n  RariFundProxy: \"0x7C332FeA58056D1EF6aB2B2016ce4900773DC399\"\n};\n\nconst legacyContractAddresses = {\n  \"v1.0.0\": {\n    RariFundController: \"0xD7590e93a2e04110Ad50ec70EADE7490F7B8228a\",\n    RariFundProxy: \"0x3F579F097F2CE8696Ae8C417582CfAFdE9Ec9966\"\n  }\n};\n\nvar legacyAbis = {\n  \"v1.0.0\": {}\n};\n\n// 1.0.0\nlegacyAbis[\"v1.0.0\"][\"RariFundController\"] = require(\".\" +\n  \"/dai/abi/legacy/\" +\n  \"v1.0.0\" +\n  \"/\" +\n  \"RariFundController\" +\n  \".json\");\n\nlegacyAbis[\"v1.0.0\"][\"RariFundProxy\"] = require(\".\" +\n  \"/dai/abi/legacy/\" +\n  \"v1.0.0\" +\n  \"/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\nexport default class DaiPool extends StablePool {\n  API_BASE_URL = \"http://206.81.6.235:3000/pools/dai/\";\n  POOL_NAME = \"Rari DAI Pool\";\n  POOL_TOKEN_SYMBOL = \"RDPT\";\n\n  static CONTRACT_ADDRESSES = contractAddresses;\n  static LEGACY_CONTRACT_ADDRESSES = legacyContractAddresses;\n  static LEGACY_CONTRACT_ABIS = legacyAbis;\n\n  constructor(web3, subpools, getAllTokens) {\n    super(web3, subpools, getAllTokens);\n\n    this.contracts = {};\n    for (const contractName of Object.keys(contractAddresses))\n      this.contracts[contractName] = new web3.eth.Contract(\n        DaiPool.CONTRACT_ABIS[contractName],\n        contractAddresses[contractName]\n      );\n    // this.gsnContracts = { RariFundProxy: new web3Gsn.eth.Contract(abis.RariFundProxy, contractAddresses.RariFundProxy) };\n    this.legacyContracts = {};\n\n    for (const version of Object.keys(legacyContractAddresses)) {\n      if (!this.legacyContracts[version]) this.legacyContracts[version] = {};\n      for (const contractName of Object.keys(legacyContractAddresses[version]))\n        this.legacyContracts[version][\n          contractName\n        ] = new this.web3.eth.Contract(\n          legacyAbis[version][contractName],\n          legacyContractAddresses[version][contractName]\n        );\n    }\n\n    this.rdpt = this.rspt;\n    delete this.rspt;\n\n    this.allocations.POOLS = (function() {\n      var pools = [\"dYdX\", \"Compound\", \"Aave\", \"mStable\"];\n      pools[100] = \"Fuse6\";\n      pools[101] = \"Fuse7\";\n      pools[102] = \"Fuse18\";\n      return pools;\n    })();\n    this.allocations.POOLS_BY_CURRENCY = {\n      DAI: [\"dYdX\", \"Compound\", \"Aave\", \"Fuse6\", \"Fuse7\", \"Fuse18\"],\n      mUSD: [\"mStable\"],\n    };\n    this.allocations.CURRENCIES_BY_POOL = {\n      dYdX: [\"DAI\"],\n      Compound: [\"DAI\"],\n      Aave: [\"DAI\"],\n      mStable: [\"mUSD\"],\n      Fuse6: [\"DAI\"],\n      Fuse7: [\"DAI\"],\n      Fuse18: [\"DAI\"],\n    };\n\n    delete this.history.getRsptExchangeRateHistory;\n    this.history.getRdptExchangeRateHistory = this.history.getPoolTokenExchangeRateHistory;\n\n    var self = this;\n\n    this.history.getPoolAllocationHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      var events = [];\n      if (toBlock >= 11441321 && fromBlock <= 12535101)\n        events = await self.legacyContracts[\n          \"v1.0.0\"\n        ].RariFundController.getPastEvents(\"PoolAllocation\", {\n          fromBlock: Math.max(fromBlock, 11441321),\n          toBlock: Math.min(toBlock, 12535101),\n          filter,\n        });\n      if (toBlock >= 12535101)\n        events = events.concat(\n          await self.contracts.RariFundController.getPastEvents(\"PoolAllocation\", {\n            fromBlock: Math.max(fromBlock, 12535101),\n            toBlock,\n            filter,\n          })\n        );\n      return events;\n    };\n\n    this.history.getCurrencyExchangeHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      var events = [];\n      if (toBlock >= 11441321 && fromBlock <= 12535101)\n        events = await self.legacyContracts[\n          \"v1.0.0\"\n        ].RariFundController.getPastEvents(\"CurrencyTrade\", {\n          fromBlock: Math.max(fromBlock, 11441321),\n          toBlock: Math.min(toBlock, 12535101),\n          filter,\n        });\n      if (toBlock >= 12535101)\n        events = events.concat(\n          await self.contracts.RariFundController.getPastEvents(\"CurrencyTrade\", {\n            fromBlock: Math.max(fromBlock, 12535101),\n            toBlock,\n            filter,\n          })\n        );\n      return events;\n    };\n\n    this.history.getDepositHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11441321\n        ? await self.contracts.RariFundManager.getPastEvents(\"Deposit\", {\n            fromBlock: Math.max(fromBlock, 11441321),\n            toBlock,\n            filter,\n          })\n        : [];\n    };\n\n    this.history.getWithdrawalHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11441321\n        ? await self.contracts.RariFundManager.getPastEvents(\"Withdrawal\", {\n            fromBlock: Math.max(fromBlock, 11441321),\n            toBlock,\n            filter,\n          })\n        : [];\n    };\n\n    this.history.getPreDepositExchangeHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      var events = [];\n      if (toBlock >= 11441321 && fromBlock <= 12535101)\n        events = await self.legacyContracts[\n          \"v1.0.0\"\n        ].RariFundProxy.getPastEvents(\"PreDepositExchange\", {\n          fromBlock: Math.max(fromBlock, 11441321),\n          toBlock: Math.min(toBlock, 12535101),\n          filter,\n        });\n      if (toBlock >= 12535101)\n        events = events.concat(\n          await self.contracts.RariFundProxy.getPastEvents(\"PreDepositExchange\", {\n            fromBlock: Math.max(fromBlock, 12535101),\n            toBlock,\n            filter,\n          })\n        );\n      return events;\n    };\n\n    this.history.getPostWithdrawalExchangeHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      var events = [];\n      if (toBlock >= 11441321 && fromBlock <= 12535101)\n        events = await self.legacyContracts[\n          \"v1.0.0\"\n        ].RariFundProxy.getPastEvents(\"PostWithdrawalExchange\", {\n          fromBlock: Math.max(fromBlock, 11441321),\n          toBlock: Math.min(toBlock, 12535101),\n          filter,\n        });\n      if (toBlock >= 12535101)\n        events = events.concat(\n          await self.contracts.RariFundProxy.getPastEvents(\"PostWithdrawalExchange\", {\n            fromBlock: Math.max(fromBlock, 12535101),\n            toBlock,\n            filter,\n          })\n        );\n      return events;\n    };\n\n    this.history.getPoolTokenTransferHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11441321\n        ? await self.contracts.RariFundToken.getPastEvents(\"Transfer\", {\n            fromBlock: Math.max(fromBlock, 11441321),\n            toBlock,\n            filter,\n          })\n        : [];\n    };\n\n    delete this.history.getRsptTransferHistory;\n    this.history.getRdptTransferHistory = this.history.getPoolTokenTransferHistory;\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/pools/ethereum/abi/RariFundController.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"CurrencyTrade\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.PoolAllocationAction\",\n        \"name\": \"action\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PoolAllocation\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"IS_RARI_FUND_CONTROLLER\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"disableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"enableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"_upgradeFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"_getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getEntireBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveWethToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approvekEtherToKeeperDaoPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"hasETHInPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint16\", \"name\": \"referralCode\", \"type\": \"uint16\" }\n    ],\n    \"name\": \"setAaveReferralCode\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"comptroller\", \"type\": \"address\" }\n    ],\n    \"name\": \"setEnzymeComptroller\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"initialBalance\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPoolKnowingBalance\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"withdrawAllFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"withdrawAllFromPoolOnUpgrade\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawToManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveTo0x\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"marketSell0xOrdersFillOrKill\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"unwrapAllWeth\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalances\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint8[]\", \"name\": \"\", \"type\": \"uint8[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/ethereum/abi/RariFundManager.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"reptMinted\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Deposit\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundControllerSet\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerUpgraded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundProxySet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundTokenSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"InterestFeeDeposit\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountEth\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"InterestFeeWithdrawal\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"reptBurned\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Withdrawal\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundController\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundController\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundToken\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundToken\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"upgradeFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"authorizedFundManagerDataSource\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"authorizeFundManagerDataSource\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"components\": [\n          { \"internalType\": \"int256\", \"name\": \"netDeposits\", \"type\": \"int256\" },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"rawInterestAccruedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"interestFeesGeneratedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"interestFeesClaimed\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct RariFundManager.FundManagerData\",\n        \"name\": \"data\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"setFundManagerData\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundProxy\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"disableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"enableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"deposit\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }],\n    \"name\": \"depositTo\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdraw\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getInterestFeeRate\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"rate\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setInterestFeeRate\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesGenerated\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesUnclaimed\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setInterestFeeMasterBeneficiary\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"depositFees\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"withdrawFees\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/ethereum/abi/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/ethereum/abi/RariFundToken.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"GovernanceTokenDistributorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"MinterAdded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"MinterRemoved\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"Paused\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"PauserAdded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"PauserRemoved\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"Unpaused\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"addMinter\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"addPauser\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"subtractedValue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"decreaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"addedValue\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"increaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"isMinter\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"isPauser\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"pause\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"paused\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariGovernanceTokenDistributor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IRariGovernanceTokenDistributor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceMinter\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renouncePauser\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"unpause\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"name\", \"type\": \"string\" },\n      { \"internalType\": \"string\", \"name\": \"symbol\", \"type\": \"string\" },\n      { \"internalType\": \"uint8\", \"name\": \"decimals\", \"type\": \"uint8\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"bool\", \"name\": \"force\", \"type\": \"bool\" }\n    ],\n    \"name\": \"setGovernanceTokenDistributor\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"mint\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"burn\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"burnFrom\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"fundManagerBurnFrom\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/ethereum/abi/legacy/v1.0.0/RariFundController.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"CompToEthTrade\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.PoolAllocationAction\",\n        \"name\": \"action\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PoolAllocation\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"IS_RARI_FUND_CONTROLLER\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"disableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"enableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"_upgradeFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"_getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getEntireBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveWethToDydxPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approvekEtherToKeeperDaoPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"hasETHInPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint16\", \"name\": \"referralCode\", \"type\": \"uint16\" }\n    ],\n    \"name\": \"setAaveReferralCode\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositToPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"initialBalance\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPoolKnowingBalance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"initialBalance\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPoolKnowingBalanceToManager\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"withdrawAllFromPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" }],\n    \"name\": \"withdrawAllFromPoolOnUpgrade\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawToManager\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveCompTo0x\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"marketSell0xOrdersFillOrKill\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"unwrapAllWeth\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalances\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint8[]\", \"name\": \"\", \"type\": \"uint8[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/ethereum.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\n\nimport StablePool from \"./stable.js\";\nimport { get0xSwapOrders } from \"../0x.js\";\n\nconst contractAddresses = {\n  RariFundController: \"0x3f4931a8e9d4cdf8f56e7e8a8cfe3bede0e43657\",\n  RariFundManager: \"0xD6e194aF3d9674b62D1b30Ec676030C23961275e\",\n  RariFundToken: \"0xCda4770d65B4211364Cb870aD6bE19E7Ef1D65f4\",\n  RariFundProxy: \"0xa3cc9e4B9784c80a05B3Af215C32ff223C3ebE5c\",\n};\n\nvar abis = {};\n\nabis[\"RariFundController\"] = require(\".\" +\n  \"/ethereum/abi/\" +\n  \"RariFundController\" +\n  \".json\");\n\nabis[\"RariFundManager\"] = require(\".\" +\n  \"/ethereum/abi/\" +\n  \"RariFundManager\" +\n  \".json\");\n\nabis[\"RariFundToken\"] = require(\".\" +\n  \"/ethereum/abi/\" +\n  \"RariFundToken\" +\n  \".json\");\n\nabis[\"RariFundProxy\"] = require(\".\" +\n  \"/ethereum/abi/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\nconst legacyContractAddresses = {\n  \"v1.0.0\": {\n    RariFundController: \"0xD9F223A36C2e398B0886F945a7e556B41EF91A3C\",\n  },\n  \"v1.2.0\": {\n    RariFundController: \"0xa422890cbBE5EAa8f1c88590fBab7F319D7e24B6\",\n  },\n};\n\nvar legacyAbis = {};\n\nlegacyAbis[\"v1.0.0\"] = {};\nlegacyAbis[\"v1.0.0\"][\"RariFundController\"] = require(\".\" +\n  \"/ethereum/abi/legacy/\" +\n  \"v1.0.0\" +\n  \"/\" +\n  \"RariFundController\" +\n  \".json\");\n\nlegacyAbis[\"v1.2.0\"] = {};\nlegacyAbis[\"v1.2.0\"][\"RariFundController\"] = require(\".\" +\n  \"/ethereum/abi/\" +\n  \"RariFundController\" +\n  \".json\");\n\nexport default class EthereumPool extends StablePool {\n  API_BASE_URL = \"http://206.81.6.235:3000/pools/ethereum/\";\n  POOL_TOKEN_SYMBOL = \"REPT\";\n\n  static CONTRACT_ADDRESSES = contractAddresses;\n  static CONTRACT_ABIS = abis;\n  static LEGACY_CONTRACT_ADDRESSES = legacyContractAddresses;\n  static LEGACY_CONTRACT_ABIS = legacyAbis;\n\n  constructor(web3, subpools, getAllTokens) {\n    super(web3, subpools, getAllTokens);\n\n    this.contracts = {};\n    for (const contractName of Object.keys(contractAddresses))\n      this.contracts[contractName] = new this.web3.eth.Contract(\n        abis[contractName],\n        contractAddresses[contractName]\n      );\n    // this.gsnContracts = { RariFundProxy: new web3Gsn.eth.Contract(abis.RariFundProxy, contractAddresses.RariFundProxy) };\n    this.legacyContracts = {};\n\n    for (const version of Object.keys(legacyContractAddresses)) {\n      if (!this.legacyContracts[version]) this.legacyContracts[version] = {};\n      for (const contractName of Object.keys(legacyContractAddresses[version]))\n        this.legacyContracts[version][\n          contractName\n        ] = new this.web3.eth.Contract(\n          legacyAbis[version][contractName],\n          legacyContractAddresses[version][contractName]\n        );\n    }\n\n    delete this.internalTokens;\n\n    this.rept = this.rspt;\n    delete this.rspt;\n\n    delete this.allocations.CURRENCIES;\n    this.allocations.POOLS = [\n      \"dYdX\",\n      \"Compound\",\n      \"KeeperDAO\",\n      \"Aave\",\n      \"Alpha\",\n      \"Enzyme\",\n    ];\n    delete this.allocations.POOLS_BY_CURRENCY;\n    this.allocations.CURRENCIES_BY_POOL = {\n      dYdX: [\"ETH\"],\n      Compound: [\"ETH\"],\n      KeeperDAO: [\"ETH\"],\n      Aave: [\"ETH\"],\n      Alpha: [\"ETH\"],\n      Enzyme: [\"ETH\"],\n    };\n    delete this.allocations.getAllocationsByCurrency;\n    delete this.allocations.getRawAllocations;\n    delete this.allocations.getCurrencyUsdPrices;\n\n    var self = this;\n\n    this.allocations.getRawPoolAllocations = async function () {\n      var allocationsByPool = {\n        _cash: Web3.utils.toBN(0),\n      };\n      for (const poolName of self.allocations.POOLS)\n        allocationsByPool[poolName] = Web3.utils.toBN(0);\n      var allBalances = await self.cache.getOrUpdate(\n        \"allBalances\",\n        self.contracts.RariFundController.methods.getRawFundBalances().call\n      );\n\n      allocationsByPool._cash = Web3.utils.toBN(allBalances[\"0\"]);\n      var pools = allBalances[\"1\"];\n      var poolBalances = allBalances[\"2\"];\n\n      for (var i = 0; i < pools.length; i++) {\n        var pool = pools[i];\n        var poolBalanceBN = Web3.utils.toBN(poolBalances[i]);\n        allocationsByPool[self.allocations.POOLS[pool]] = poolBalanceBN;\n      }\n\n      return allocationsByPool;\n    };\n\n    this.apy.getCurrentRawApy = async function () {\n      var factors = [];\n      var totalBalanceBN = Web3.utils.toBN(0);\n\n      // Get pool APYs\n      var poolApyBNs = [];\n      for (var i = 0; i < self.allocations.POOLS.length; i++)\n        poolApyBNs[i] = await self.pools[\n          self.allocations.POOLS[i]\n        ].getCurrencyApys();\n\n      // Get all raw balances\n      var allBalances = await self.cache.getOrUpdate(\n        \"allBalances\",\n        self.contracts.RariFundController.methods.getRawFundBalances().call\n      );\n\n      // Get array of APY factors\n      var contractBalanceBN = Web3.utils.toBN(allBalances[\"0\"]);\n      factors.push([contractBalanceBN, Web3.utils.toBN(0)]);\n      totalBalanceBN.iadd(contractBalanceBN);\n      var pools = allBalances[\"1\"];\n      var poolBalances = allBalances[\"2\"];\n\n      for (var i = 0; i < pools.length; i++) {\n        var pool = pools[i];\n        var poolBalanceBN = Web3.utils.toBN(poolBalances[i]);\n\n        factors.push([poolBalanceBN, poolApyBNs[pool][\"ETH\"]]);\n        totalBalanceBN.iadd(poolBalanceBN);\n      }\n\n      // If balance = 0, choose the maximum\n      if (totalBalanceBN.isZero()) {\n        var maxApyBN = Web3.utils.toBN(0);\n        for (var i = 0; i < factors.length; i++)\n          if (factors[i][1].gt(maxApyBN)) maxApyBN = factors[i][1];\n        return maxApyBN;\n      }\n\n      // If balance > 0, calculate the APY using the factors\n      var apyBN = Web3.utils.toBN(0);\n      for (var i = 0; i < factors.length; i++)\n        apyBN.iadd(factors[i][0].mul(factors[i][1]).div(totalBalanceBN));\n      return apyBN;\n    };\n\n    delete this.deposits.getDirectDepositCurrencies;\n\n    this.deposits.validateDeposit = async function (\n      currencyCode,\n      amount,\n      sender\n    ) {\n      // Input validation\n      if (!sender) throw new Error(\"Sender parameter not set.\");\n      var allTokens = await self.getAllTokens();\n      if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n        throw new Error(\"Invalid currency code!\");\n      if (!amount || amount.lte(Web3.utils.toBN(0)))\n        throw new Error(\"Deposit amount must be greater than 0!\");\n      var accountBalanceBN = Web3.utils.toBN(\n        await (currencyCode == \"ETH\"\n          ? self.web3.eth.getBalance(sender)\n          : allTokens[currencyCode].contract.methods.balanceOf(sender).call())\n      );\n      if (amount.gt(accountBalanceBN))\n        throw new Error(\n          \"Not enough balance in your account to make a deposit of this amount.\"\n        );\n\n      // Check if currency is ETH\n      if (currencyCode === \"ETH\") {\n        // Return amountUsdBN\n        return [amount];\n      } else {\n        // Get orders from 0x swap API\n        try {\n          var [\n            orders,\n            inputFilledAmountBN,\n            protocolFee,\n            takerAssetFilledAmountBN,\n            makerAssetFilledAmountBN,\n            gasPrice,\n          ] = await get0xSwapOrders(\n            allTokens[currencyCode].address,\n            \"WETH\",\n            amount\n          );\n        } catch (err) {\n          throw new Error(\"Failed to get swap orders from 0x API: \" + err);\n        }\n\n        // Make sure input amount is completely filled\n        if (inputFilledAmountBN.lt(amount))\n          throw new Error(\n            \"Unable to find enough liquidity to exchange \" +\n              currencyCode +\n              \" to ETH before depositing.\"\n          );\n\n        // Make sure we have enough ETH for the protocol fee\n        var ethBalanceBN = Web3.utils.toBN(await web3.eth.getBalance(sender));\n        if (Web3.utils.toBN(protocolFee).gt(ethBalanceBN))\n          throw new Error(\n            \"ETH balance too low to cover 0x exchange protocol fee.\"\n          );\n\n        // Return makerAssetFilledAmountBN and protocolFee\n        return [makerAssetFilledAmountBN, Web3.utils.toBN(protocolFee)];\n      }\n    };\n\n    this.deposits.deposit = async function (\n      currencyCode,\n      amount,\n      minEthAmount,\n      options\n    ) {\n      // Input validation\n      if (!options || !options.from)\n        throw new Error(\"Options parameter not set or from address not set.\");\n      var allTokens = await self.getAllTokens();\n      if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n        throw new Error(\"Invalid currency code!\");\n      if (!amount || amount.lte(Web3.utils.toBN(0)))\n        throw new Error(\"Deposit amount must be greater than 0!\");\n      var accountBalanceBN = Web3.utils.toBN(\n        await (currencyCode == \"ETH\"\n          ? self.web3.eth.getBalance(options.from)\n          : allTokens[currencyCode].contract.methods\n              .balanceOf(options.from)\n              .call())\n      );\n      if (amount.gt(accountBalanceBN))\n        throw new Error(\n          \"Not enough balance in your account to make a deposit of this amount.\"\n        );\n\n      // Check if currency is ETH\n      if (currencyCode === \"ETH\") {\n        // Input validation\n        if (options.value && options.value.toString() !== amount.toString())\n          throw new Error(\n            \"Value set in options paramater but not equal to amount parameter.\"\n          );\n\n        // Check amountUsdBN against minEthAmount\n        if (\n          typeof minEthAmount !== \"undefined\" &&\n          minEthAmount !== null &&\n          amount.lt(minEthAmount)\n        )\n          return [amount];\n\n        // Deposit tokens to RariFundManager\n        options.value = amount;\n        var receipt = await self.contracts.RariFundManager.methods\n          .deposit()\n          .send(options);\n\n        return [amount, null, null, receipt];\n      } else {\n        // Get orders from 0x swap API\n        try {\n          var [\n            orders,\n            inputFilledAmountBN,\n            protocolFee,\n            takerAssetFilledAmountBN,\n            makerAssetFilledAmountBN,\n            gasPrice,\n          ] = await get0xSwapOrders(\n            allTokens[currencyCode].address,\n            \"WETH\",\n            amount\n          );\n        } catch (err) {\n          throw new Error(\"Failed to get swap orders from 0x API: \" + err);\n        }\n\n        // Make sure input amount is completely filled\n        if (inputFilledAmountBN.lt(amount))\n          throw new Error(\n            \"Unable to find enough liquidity to exchange \" +\n              currencyCode +\n              \" before depositing.\"\n          );\n\n        // Make sure we have enough ETH for the protocol fee\n        var ethBalanceBN = Web3.utils.toBN(\n          await web3.eth.getBalance(options.from)\n        );\n        if (Web3.utils.toBN(protocolFee).gt(ethBalanceBN))\n          throw new Error(\n            \"ETH balance too low to cover 0x exchange protocol fee.\"\n          );\n\n        // Check makerAssetFilledAmountUsdBN against minUsdAmount\n        if (\n          typeof minEthAmount !== \"undefined\" &&\n          minEthAmount !== null &&\n          makerAssetFilledAmountBN.lt(minEthAmount)\n        )\n          return [makerAssetFilledAmountBN];\n\n        // Approve tokens to RariFundProxy\n        try {\n          var allowanceBN = Web3.utils.toBN(\n            await allTokens[currencyCode].contract.methods\n              .allowance(\n                options.from,\n                self.contracts.RariFundProxy.options.address\n              )\n              .call()\n          );\n          if (allowanceBN.lt(amount))\n            var approvalReceipt = await allTokens[currencyCode].contract.methods\n              .approve(self.contracts.RariFundProxy.options.address, amount)\n              .send(options);\n        } catch (err) {\n          throw new Error(\n            \"Failed to approve tokens to RariFundProxy: \" +\n              (err.message ? err.message : err)\n          );\n        }\n\n        // Build array of orders and signatures\n        var signatures = [];\n\n        for (var j = 0; j < orders.length; j++) {\n          signatures[j] = orders[j].signature;\n\n          orders[j] = {\n            makerAddress: orders[j].makerAddress,\n            takerAddress: orders[j].takerAddress,\n            feeRecipientAddress: orders[j].feeRecipientAddress,\n            senderAddress: orders[j].senderAddress,\n            makerAssetAmount: orders[j].makerAssetAmount,\n            takerAssetAmount: orders[j].takerAssetAmount,\n            makerFee: orders[j].makerFee,\n            takerFee: orders[j].takerFee,\n            expirationTimeSeconds: orders[j].expirationTimeSeconds,\n            salt: orders[j].salt,\n            makerAssetData: orders[j].makerAssetData,\n            takerAssetData: orders[j].takerAssetData,\n            makerFeeAssetData: orders[j].makerFeeAssetData,\n            takerFeeAssetData: orders[j].takerFeeAssetData,\n          };\n        }\n\n        // Exchange and deposit tokens via RariFundProxy\n        try {\n          var receipt = await self.contracts.RariFundProxy.methods\n            .exchangeAndDeposit(\n              allTokens[currencyCode].address,\n              amount,\n              orders,\n              signatures,\n              takerAssetFilledAmountBN\n            )\n            .send(\n              Object.assign({ value: protocolFee, gasPrice: gasPrice }, options)\n            );\n        } catch (err) {\n          throw new Error(\n            \"RariFundProxy.exchangeAndDeposit failed: \" +\n              (err.message ? err.message : err)\n          );\n        }\n\n        self.cache.clear(\"allBalances\");\n        return [\n          makerAssetFilledAmountBN,\n          Web3.utils.toBN(protocolFee),\n          approvalReceipt,\n          receipt,\n        ];\n      }\n    };\n\n    this.withdrawals.getMaxWithdrawalAmount = async function (\n      currencyCode,\n      senderEthBalance\n    ) {\n      var allTokens = await self.getAllTokens();\n      if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n        throw new Error(\"Invalid currency code!\");\n      if (!senderEthBalance || senderEthBalance.lte(Web3.utils.toBN(0)))\n        return [Web3.utils.toBN(0)];\n\n      // Get user fund balance\n      if (senderEthBalance === undefined)\n        senderEthBalance = Web3.utils.toBN(\n          await self.contracts.RariFundManager.methods.balanceOf(sender).call()\n        );\n\n      // If currency is ETH, return account balance\n      if (currencyCode === \"ETH\") return [senderEthBalance];\n\n      // Otherwise, get orders from 0x swap API\n      try {\n        var [\n          orders,\n          inputFilledAmountBN,\n          protocolFee,\n          takerAssetFilledAmountBN,\n          makerAssetFilledAmountBN,\n          gasPrice,\n        ] = await get0xSwapOrders(\n          \"WETH\",\n          allTokens[currencyCode].address,\n          senderEthBalance\n        );\n      } catch (err) {\n        throw new Error(\"Failed to get swap orders from 0x API: \" + err);\n      }\n\n      // If there are enough 0x orders to fulfill the rest of the withdrawal amount, withdraw and exchange\n      if (inputFilledAmountBN.lt(senderEthBalance))\n        throw new Error(\n          \"Unable to find enough liquidity to exchange withdrawn tokens to \" +\n            currencyCode +\n            \".\"\n        );\n\n      // Return amountWithdrawnBN and totalProtocolFeeBN\n      var amountWithdrawnBN = makerAssetFilledAmountBN\n        .mul(senderEthBalance)\n        .div(inputFilledAmountBN);\n      return [amountWithdrawnBN, Web3.utils.toBN(protocolFee)];\n    };\n\n    this.withdrawals.validateWithdrawal = async function (\n      currencyCode,\n      amount,\n      sender\n    ) {\n      var allTokens = await self.getAllTokens();\n      if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n        throw new Error(\"Invalid currency code!\");\n      if (!amount || amount.lte(Web3.utils.toBN(0)))\n        throw new Error(\"Withdrawal amount must be greater than 0!\");\n\n      // Get user fund balance\n      var accountBalance = Web3.utils.toBN(\n        await self.contracts.RariFundManager.methods.balanceOf(sender).call()\n      );\n\n      // Check if withdrawal currency is ETH\n      if (currencyCode === \"ETH\") {\n        // Check account balance\n        if (amount.gt(accountBalance))\n          throw new Error(\n            \"Requested withdrawal amount is greater than the sender's Rari Ethereum Pool balance. Please click the max button and try again (or reload and try again later if the issue persists).\"\n          );\n\n        // Return amount\n        return [amount];\n      } else {\n        // Get orders from 0x swap API\n        try {\n          var [\n            orders,\n            inputFilledAmountBN,\n            protocolFee,\n            takerAssetFilledAmountBN,\n            makerAssetFilledAmountBN,\n            gasPrice,\n          ] = await get0xSwapOrders(\n            \"WETH\",\n            allTokens[currencyCode].address,\n            null,\n            amount\n          );\n        } catch (err) {\n          throw new Error(\"Failed to get swap orders from 0x API: \" + err);\n        }\n\n        // Check account balance\n        if (takerAssetFilledAmountBN.gt(accountBalance))\n          throw new Error(\n            \"Requested withdrawal amount is greater than the sender's Rari Ethereum Pool balance. Please click the max button and try again (or reload and try again later if the issue persists).\"\n          );\n\n        // Make sure input amount is completely filled\n        if (makerAssetFilledAmountBN.lt(amount))\n          throw new Error(\n            \"Unable to find enough liquidity to exchange withdrawn ETH to \" +\n              currencyCode +\n              \".\"\n          );\n\n        // Return inputFilledAmountBN\n        return [inputFilledAmountBN, Web3.utils.toBN(protocolFee)];\n      }\n    };\n\n    this.withdrawals.withdraw = async function (\n      currencyCode,\n      amount,\n      maxEthAmount,\n      options\n    ) {\n      if (!options || !options.from)\n        throw new Error(\"Options parameter not set or from address not set.\");\n      var allTokens = await self.getAllTokens();\n      if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n        throw new Error(\"Invalid currency code!\");\n      if (!amount || amount.lte(Web3.utils.toBN(0)))\n        throw new Error(\"Withdrawal amount must be greater than 0!\");\n\n      // Check if withdrawal currency is ETH\n      if (currencyCode === \"ETH\") {\n        // Check maxEthAmount\n        if (\n          typeof maxEthAmount !== \"undefined\" &&\n          maxEthAmount !== null &&\n          amount.gt(maxEthAmount)\n        )\n          return [amount];\n\n        // If we can withdraw everything directly, do so\n        try {\n          var receipt = await self.contracts.RariFundManager.methods\n            .withdraw(amount)\n            .send(options);\n        } catch (err) {\n          throw new Error(\n            \"RariFundManager.withdraw failed: \" +\n              (err.message ? err.message : err)\n          );\n        }\n\n        return [amount, null, receipt];\n      } else {\n        // Get orders from 0x swap API\n        try {\n          var [\n            orders,\n            inputFilledAmountBN,\n            protocolFee,\n            takerAssetFilledAmountBN,\n            makerAssetFilledAmountBN,\n            gasPrice,\n          ] = await get0xSwapOrders(\n            \"WETH\",\n            allTokens[currencyCode].address,\n            null,\n            amount\n          );\n        } catch (err) {\n          throw new Error(\"Failed to get swap orders from 0x API: \" + err);\n        }\n\n        // Build array of orders and signatures\n        var signatures = [];\n\n        for (var j = 0; j < orders.length; j++) {\n          signatures[j] = orders[j].signature;\n\n          orders[j] = {\n            makerAddress: orders[j].makerAddress,\n            takerAddress: orders[j].takerAddress,\n            feeRecipientAddress: orders[j].feeRecipientAddress,\n            senderAddress: orders[j].senderAddress,\n            makerAssetAmount: orders[j].makerAssetAmount,\n            takerAssetAmount: orders[j].takerAssetAmount,\n            makerFee: orders[j].makerFee,\n            takerFee: orders[j].takerFee,\n            expirationTimeSeconds: orders[j].expirationTimeSeconds,\n            salt: orders[j].salt,\n            makerAssetData: orders[j].makerAssetData,\n            takerAssetData: orders[j].takerAssetData,\n            makerFeeAssetData: orders[j].makerFeeAssetData,\n            takerFeeAssetData: orders[j].takerFeeAssetData,\n          };\n        }\n\n        // Make sure input amount is completely filled\n        if (makerAssetFilledAmountBN.lt(amount))\n          throw new Error(\n            \"Unable to find enough liquidity to exchange withdrawn tokens to \" +\n              currencyCode +\n              \".\"\n          );\n\n        // Check maxEthAmount\n        if (\n          typeof maxEthAmount !== \"undefined\" &&\n          maxEthAmount !== null &&\n          inputFilledAmountBN.gt(maxEthAmount)\n        )\n          return [inputFilledAmountBN];\n\n        // Withdraw and exchange tokens via RariFundProxy\n        try {\n          var receipt = await self.contracts.RariFundProxy.methods\n            .withdrawAndExchange(\n              inputFilledAmountBN,\n              allTokens[currencyCode].address,\n              orders,\n              signatures,\n              makerAssetFilledAmountBN\n            )\n            .send({\n              from: options.from,\n              value: protocolFee,\n              gasPrice: gasPrice,\n              nonce: await web3.eth.getTransactionCount(options.from),\n            });\n        } catch (err) {\n          throw new Error(\n            \"RariFundProxy.withdrawAndExchange failed: \" +\n              (err.message ? err.message : err)\n          );\n        }\n\n        return [inputFilledAmountBN, Web3.utils.toBN(protocolFee), receipt];\n      }\n    };\n\n    delete this.history.getRsptExchangeRateHistory;\n    this.history.getReptExchangeRateHistory = this.history.getPoolTokenExchangeRateHistory;\n\n    this.history.getPoolAllocationHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      var events = [];\n      if (toBlock >= 11085000 && fromBlock <= 11819251)\n        events = await self.legacyContracts[\n          \"v1.0.0\"\n        ].RariFundController.getPastEvents(\"PoolAllocation\", {\n          fromBlock: Math.max(fromBlock, 11085000),\n          toBlock: Math.min(toBlock, 11819251),\n          filter,\n        });\n      if (toBlock >= 11819251 && fromBlock <= 12904645)\n        events = events.concat(\n          await self.legacyContracts[\n            \"v1.2.0\"\n          ].RariFundController.getPastEvents(\"PoolAllocation\", {\n            fromBlock: Math.max(fromBlock, 11819251),\n            toBlock: Math.min(toBlock, 12904645),\n            filter,\n          })\n        );\n      if (toBlock >= 12904645)\n        events = events.concat(\n          await self.contracts.RariFundController.getPastEvents(\n            \"PoolAllocation\",\n            {\n              fromBlock: Math.max(fromBlock, 12904645),\n              toBlock,\n              filter,\n            }\n          )\n        );\n      return events;\n    };\n\n    this.history.getCurrencyExchangeHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      var events = [];\n      if (toBlock >= 11085000 && fromBlock <= 11819251)\n        events = await self.legacyContracts[\n          \"v1.0.0\"\n        ].RariFundController.getPastEvents(\"CompToEthTrade\", {\n          fromBlock: Math.max(fromBlock, 11085000),\n          toBlock: Math.min(toBlock, 11819251),\n          filter,\n        });\n      if (toBlock >= 11819251 && fromBlock <= 12904645)\n        events = events.concat(\n          await self.legacyContracts[\n            \"v1.2.0\"\n          ].RariFundController.getPastEvents(\"CompToEthTrade\", {\n            fromBlock: Math.max(fromBlock, 11819251),\n            toBlock: Math.min(toBlock, 12904645),\n            filter,\n          })\n        );\n      if (toBlock >= 12904645)\n        events = events.concat(\n          await self.contracts.RariFundController.getPastEvents(\n            \"CurrencyTrade\",\n            {\n              fromBlock: Math.max(fromBlock, 12904645),\n              toBlock,\n              filter,\n            }\n          )\n        );\n      return events;\n    };\n\n    this.history.getDepositHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundManager.getPastEvents(\"Deposit\", {\n            fromBlock: Math.max(fromBlock, 11085000),\n            toBlock,\n            filter,\n          })\n        : [];\n    };\n\n    this.history.getWithdrawalHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundManager.getPastEvents(\"Withdrawal\", {\n            fromBlock: Math.max(fromBlock, 11085000),\n            toBlock,\n            filter,\n          })\n        : [];\n    };\n\n    this.history.getPreDepositExchangeHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundProxy.getPastEvents(\n            \"PreDepositExchange\",\n            { fromBlock: Math.max(fromBlock, 11085000), toBlock, filter }\n          )\n        : [];\n    };\n\n    this.history.getPostWithdrawalExchangeHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundProxy.getPastEvents(\n            \"PostWithdrawalExchange\",\n            { fromBlock: Math.max(fromBlock, 20000001), toBlock, filter }\n          )\n        : [];\n    };\n\n    this.history.getPoolTokenTransferHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundToken.getPastEvents(\"Transfer\", {\n            fromBlock: Math.max(fromBlock, 10909582),\n            toBlock,\n            filter,\n          })\n        : [];\n    };\n\n    delete this.history.getRsptTransferHistory;\n    this.history.getReptTransferHistory = this.history.getPoolTokenTransferHistory;\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/RariFundController.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.CurrencyExchange\",\n        \"name\": \"exchange\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"CurrencyTrade\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.PoolAllocationAction\",\n        \"name\": \"action\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint8\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PoolAllocation\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"IS_RARI_FUND_CONTROLLER\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"name\": \"_currencyIndexes\",\n    \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }\n    ],\n    \"name\": \"fuseAssets\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"disableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"enableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolsByCurrency\",\n    \"outputs\": [{ \"internalType\": \"uint8[]\", \"name\": \"\", \"type\": \"uint8[]\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getDydxBalances\",\n    \"outputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"\", \"type\": \"address[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"_getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"hasCurrencyInPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint16\", \"name\": \"referralCode\", \"type\": \"uint16\" }\n    ],\n    \"name\": \"setAaveReferralCode\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n      { \"internalType\": \"bool\", \"name\": \"all\", \"type\": \"bool\" }\n    ],\n    \"name\": \"withdrawFromPoolOptimized\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPoolOnUpgrade\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"int256\", \"name\": \"limit\", \"type\": \"int256\" }],\n    \"name\": \"setExchangeLossRateLimit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"path\", \"type\": \"address[]\" },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"minOutputAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"swapExactTokensForTokens\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"minOutputAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"swapMStable\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"bool\", \"name\": \"all\", \"type\": \"bool\" },\n      { \"internalType\": \"uint256\", \"name\": \"first\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"last\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"claimMStableRewards\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8[]\", \"name\": \"pools\", \"type\": \"uint8[]\" },\n      {\n        \"internalType\": \"string[][]\",\n        \"name\": \"currencyCodes\",\n        \"type\": \"string[][]\"\n      },\n      {\n        \"internalType\": \"address[][]\",\n        \"name\": \"cTokens\",\n        \"type\": \"address[][]\"\n      }\n    ],\n    \"name\": \"addFuseAssets\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/RariFundManager.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"rftMinted\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Deposit\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundControllerSet\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerUpgraded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundPriceConsumerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundProxySet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundTokenSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"InterestFeeDeposit\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"rftBurned\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalFeeRate\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Withdrawal\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"fundDisabled\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundController\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundController\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundPriceConsumer\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundPriceConsumer\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundToken\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundToken\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgradeFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"authorizedFundManagerDataSource\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"authorizeFundManagerDataSource\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"components\": [\n          { \"internalType\": \"int256\", \"name\": \"netDeposits\", \"type\": \"int256\" },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"rawInterestAccruedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"interestFeesGeneratedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"interestFeesClaimed\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct RariFundManager.FundManagerData\",\n        \"name\": \"data\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"setFundManagerData\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }\n    ],\n    \"name\": \"forwardLostFunds\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundProxy\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundPriceConsumer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bool\", \"name\": \"disabled\", \"type\": \"bool\" }],\n    \"name\": \"setFundDisabled\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"pricesInUsd\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"isCurrencyAccepted\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getAcceptedCurrencies\",\n    \"outputs\": [{ \"internalType\": \"string[]\", \"name\": \"\", \"type\": \"string[]\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"currencyCodes\",\n        \"type\": \"string[]\"\n      },\n      { \"internalType\": \"bool[]\", \"name\": \"accepted\", \"type\": \"bool[]\" }\n    ],\n    \"name\": \"setAcceptedCurrencies\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositTo\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdraw\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"currencyCodes\",\n        \"type\": \"string[]\"\n      },\n      { \"internalType\": \"uint256[]\", \"name\": \"amounts\", \"type\": \"uint256[]\" }\n    ],\n    \"name\": \"withdrawFrom\",\n    \"outputs\": [\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getInterestFeeRate\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"rate\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setInterestFeeRate\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesGenerated\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesUnclaimed\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"beneficiary\", \"type\": \"address\" }\n    ],\n    \"name\": \"setInterestFeeMasterBeneficiary\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"depositFees\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getWithdrawalFeeRate\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"rate\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setWithdrawalFeeRate\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"beneficiary\", \"type\": \"address\" }\n    ],\n    \"name\": \"setWithdrawalFeeMasterBeneficiary\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/RariFundPriceConsumer.json",
    "content": "[\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getCurrencyPricesInUsd\",\n    \"outputs\": [\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"GsnTrustedSignerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmountAfterFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"oldRelayHub\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newRelayHub\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"RelayHubChanged\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getHubAddr\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n      { \"internalType\": \"bool\", \"name\": \"success\", \"type\": \"bool\" },\n      { \"internalType\": \"uint256\", \"name\": \"actualCharge\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes32\", \"name\": \"preRetVal\", \"type\": \"bytes32\" }\n    ],\n    \"name\": \"postRelayedCall\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" }],\n    \"name\": \"preRelayedCall\",\n    \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"relayHubVersion\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"setDefaultRelayHub\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setGsnTrustedSigner\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"inputCurrencyCodes\",\n        \"type\": \"string[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"inputAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[][]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[][]\"\n      },\n      {\n        \"internalType\": \"bytes[][]\",\n        \"name\": \"signatures\",\n        \"type\": \"bytes[][]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"makerAssetFillAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"protocolFees\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"relay\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"bytes\", \"name\": \"encodedFunction\", \"type\": \"bytes\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"transactionFee\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"gasPrice\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"gasLimit\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"approvalData\", \"type\": \"bytes\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"acceptRelayedCall\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }\n    ],\n    \"name\": \"forwardLostFunds\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalancesAndPrices\",\n    \"outputs\": [\n      { \"internalType\": \"string[]\", \"name\": \"\", \"type\": \"string[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" },\n      { \"internalType\": \"uint8[][]\", \"name\": \"\", \"type\": \"uint8[][]\" },\n      { \"internalType\": \"uint256[][]\", \"name\": \"\", \"type\": \"uint256[][]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/RariFundToken.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"GovernanceTokenDistributorSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"MinterAdded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"MinterRemoved\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"addMinter\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"subtractedValue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"decreaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"addedValue\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"increaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"isMinter\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariGovernanceTokenDistributor\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IRariGovernanceTokenDistributor\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceMinter\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"name\", \"type\": \"string\" },\n      { \"internalType\": \"string\", \"name\": \"symbol\", \"type\": \"string\" },\n      { \"internalType\": \"uint8\", \"name\": \"decimals\", \"type\": \"uint8\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"bool\", \"name\": \"force\", \"type\": \"bool\" }\n    ],\n    \"name\": \"setGovernanceTokenDistributor\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"mint\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"burn\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"burnFrom\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"fundManagerBurnFrom\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v1.0.0/RariFundManager.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"rftMinted\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Deposit\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerUpgraded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundProxySet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundTokenSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"InterestFeeDeposit\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"InterestFeeWithdrawal\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"rftBurned\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Withdrawal\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"ownerWithdraw\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"upgradeFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"authorizedFundManagerDataSource\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"authorizeFundManagerDataSource\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"components\": [\n          { \"internalType\": \"int256\", \"name\": \"netDeposits\", \"type\": \"int256\" },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"rawInterestAccruedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"interestFeesGeneratedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"interestFeesClaimed\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct RariFundManager.FundManagerData\",\n        \"name\": \"data\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"setFundManagerData\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"rftAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"newRftTotalSupply\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"onFundTokenTransfer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"interestAccruedBy\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundProxy\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"disableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"enableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getRawPoolBalances\",\n    \"outputs\": [\n      { \"internalType\": \"uint8[]\", \"name\": \"\", \"type\": \"uint8[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"limitUsd\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setDefaultAccountBalanceLimit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"int256\", \"name\": \"limitUsd\", \"type\": \"int256\" }\n    ],\n    \"name\": \"setIndividualAccountBalanceLimit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"isCurrencyAccepted\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"bool\", \"name\": \"accepted\", \"type\": \"bool\" }\n    ],\n    \"name\": \"setAcceptedCurrency\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositTo\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdraw\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveToPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositToPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveTo0x\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"marketSell0xOrdersFillOrKill\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getInterestFeeRate\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"rate\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setInterestFeeRate\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesGenerated\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesUnclaimed\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"beneficiary\", \"type\": \"address\" }\n    ],\n    \"name\": \"setInterestFeeMasterBeneficiary\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"depositFees\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawFees\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v1.0.0/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"inputCurrencyCodes\",\n        \"type\": \"string[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"inputAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[][]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[][]\"\n      },\n      {\n        \"internalType\": \"bytes[][]\",\n        \"name\": \"signatures\",\n        \"type\": \"bytes[][]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"makerAssetFillAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"protocolFees\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v1.0.0/RariFundToken.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"MinterAdded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"account\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"MinterRemoved\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"addMinter\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"burn\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"burnFrom\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"subtractedValue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"decreaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"addedValue\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"increaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"isMinter\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"mint\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceMinter\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v1.1.0/RariFundController.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"disableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"enableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getDydxBalances\",\n    \"outputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"\", \"type\": \"address[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"_getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolBalances\",\n    \"outputs\": [\n      { \"internalType\": \"uint8[]\", \"name\": \"\", \"type\": \"uint8[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveToPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"hasCurrencyInPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositToPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"initialBalance\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPoolKnowingBalance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint8\", \"name\": \"pool\", \"type\": \"uint8\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPoolOnUpgrade\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveTo0x\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"marketSell0xOrdersFillOrKill\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v1.1.0/RariFundManager.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"rftMinted\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Deposit\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundControllerSet\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerUpgraded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundProxySet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundTokenSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"InterestFeeDeposit\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"InterestFeeWithdrawal\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"rftBurned\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Withdrawal\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgradeFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"authorizedFundManagerDataSource\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"authorizeFundManagerDataSource\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"components\": [\n          { \"internalType\": \"int256\", \"name\": \"netDeposits\", \"type\": \"int256\" },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"rawInterestAccruedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"interestFeesGeneratedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"interestFeesClaimed\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct RariFundManager.FundManagerData\",\n        \"name\": \"data\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"setFundManagerData\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"forwardToFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"accounts\", \"type\": \"address[]\" },\n      { \"internalType\": \"int256[]\", \"name\": \"netDeposits\", \"type\": \"int256[]\" }\n    ],\n    \"name\": \"initNetDeposits\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"rftAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"newRftTotalSupply\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"onFundTokenTransfer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"interestAccruedBy\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundProxy\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"disableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"enableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"limitUsd\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setDefaultAccountBalanceLimit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" },\n      { \"internalType\": \"int256\", \"name\": \"limitUsd\", \"type\": \"int256\" }\n    ],\n    \"name\": \"setIndividualAccountBalanceLimit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"isCurrencyAccepted\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"bool\", \"name\": \"accepted\", \"type\": \"bool\" }\n    ],\n    \"name\": \"setAcceptedCurrency\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositTo\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdraw\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getInterestFeeRate\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"rate\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setInterestFeeRate\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesGenerated\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesUnclaimed\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"beneficiary\", \"type\": \"address\" }\n    ],\n    \"name\": \"setInterestFeeMasterBeneficiary\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"depositFees\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawFees\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v1.1.0/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"inputCurrencyCodes\",\n        \"type\": \"string[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"inputAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[][]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[][]\"\n      },\n      {\n        \"internalType\": \"bytes[][]\",\n        \"name\": \"signatures\",\n        \"type\": \"bytes[][]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"makerAssetFillAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"protocolFees\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v1.2.0/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"GsnTrustedSignerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"oldRelayHub\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newRelayHub\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"RelayHubChanged\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"VERSION\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getHubAddr\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n      { \"internalType\": \"bool\", \"name\": \"success\", \"type\": \"bool\" },\n      { \"internalType\": \"uint256\", \"name\": \"actualCharge\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes32\", \"name\": \"preRetVal\", \"type\": \"bytes32\" }\n    ],\n    \"name\": \"postRelayedCall\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" }],\n    \"name\": \"preRelayedCall\",\n    \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"relayHubVersion\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setGsnTrustedSigner\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"inputCurrencyCodes\",\n        \"type\": \"string[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"inputAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[][]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[][]\"\n      },\n      {\n        \"internalType\": \"bytes[][]\",\n        \"name\": \"signatures\",\n        \"type\": \"bytes[][]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"makerAssetFillAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"protocolFees\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"relay\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"bytes\", \"name\": \"encodedFunction\", \"type\": \"bytes\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"transactionFee\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"gasPrice\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"gasLimit\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"approvalData\", \"type\": \"bytes\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"acceptRelayedCall\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v2.0.0/RariFundController.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.CurrencyExchange\",\n        \"name\": \"exchange\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"CurrencyTrade\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.PoolAllocationAction\",\n        \"name\": \"action\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PoolAllocation\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"IS_RARI_FUND_CONTROLLER\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"disableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"enableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolsByCurrency\",\n    \"outputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool[]\",\n        \"name\": \"\",\n        \"type\": \"uint8[]\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getDydxBalances\",\n    \"outputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"\", \"type\": \"address[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"_getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"hasCurrencyInPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint16\", \"name\": \"referralCode\", \"type\": \"uint16\" }\n    ],\n    \"name\": \"setAaveReferralCode\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n      { \"internalType\": \"bool\", \"name\": \"all\", \"type\": \"bool\" }\n    ],\n    \"name\": \"withdrawFromPoolOptimized\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPoolOnUpgrade\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveTo0x\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"limit\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setDailyLossRateLimit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"marketSell0xOrdersFillOrKill\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveToMUsd\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"swapMStable\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v2.0.0/RariFundManager.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"rftMinted\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Deposit\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundControllerSet\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerUpgraded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundPriceConsumerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundProxySet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundTokenSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"InterestFeeDeposit\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"beneficiary\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"InterestFeeWithdrawal\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"sender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"rftBurned\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Withdrawal\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"fundDisabled\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundController\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundController\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundPriceConsumer\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundPriceConsumer\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundToken\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundToken\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgradeFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"authorizedFundManagerDataSource\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"authorizeFundManagerDataSource\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"components\": [\n          { \"internalType\": \"int256\", \"name\": \"netDeposits\", \"type\": \"int256\" },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"rawInterestAccruedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"int256\",\n            \"name\": \"interestFeesGeneratedAtLastFeeRateChange\",\n            \"type\": \"int256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"interestFeesClaimed\",\n            \"type\": \"uint256\"\n          }\n        ],\n        \"internalType\": \"struct RariFundManager.FundManagerData\",\n        \"name\": \"data\",\n        \"type\": \"tuple\"\n      }\n    ],\n    \"name\": \"setFundManagerData\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }\n    ],\n    \"name\": \"forwardLostFunds\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundToken\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundProxy\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundPriceConsumer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bool\", \"name\": \"disabled\", \"type\": \"bool\" }],\n    \"name\": \"setFundDisabled\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"pricesInUsd\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"getRawFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getFundBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"isCurrencyAccepted\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getAcceptedCurrencies\",\n    \"outputs\": [{ \"internalType\": \"string[]\", \"name\": \"\", \"type\": \"string[]\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"currencyCodes\",\n        \"type\": \"string[]\"\n      },\n      { \"internalType\": \"bool[]\", \"name\": \"accepted\", \"type\": \"bool[]\" }\n    ],\n    \"name\": \"setAcceptedCurrencies\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositTo\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdraw\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"currencyCodes\",\n        \"type\": \"string[]\"\n      },\n      { \"internalType\": \"uint256[]\", \"name\": \"amounts\", \"type\": \"uint256[]\" }\n    ],\n    \"name\": \"withdrawFrom\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestAccrued\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getInterestFeeRate\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"rate\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setInterestFeeRate\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesGenerated\",\n    \"outputs\": [{ \"internalType\": \"int256\", \"name\": \"\", \"type\": \"int256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getInterestFeesUnclaimed\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"beneficiary\", \"type\": \"address\" }\n    ],\n    \"name\": \"setInterestFeeMasterBeneficiary\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"depositFees\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawFees\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v2.0.0/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"GsnTrustedSignerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"oldRelayHub\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newRelayHub\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"RelayHubChanged\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getHubAddr\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n      { \"internalType\": \"bool\", \"name\": \"success\", \"type\": \"bool\" },\n      { \"internalType\": \"uint256\", \"name\": \"actualCharge\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes32\", \"name\": \"preRetVal\", \"type\": \"bytes32\" }\n    ],\n    \"name\": \"postRelayedCall\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" }],\n    \"name\": \"preRelayedCall\",\n    \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"relayHubVersion\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"setDefaultRelayHub\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setGsnTrustedSigner\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"inputCurrencyCodes\",\n        \"type\": \"string[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"inputAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[][]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[][]\"\n      },\n      {\n        \"internalType\": \"bytes[][]\",\n        \"name\": \"signatures\",\n        \"type\": \"bytes[][]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"makerAssetFillAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"protocolFees\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"relay\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"bytes\", \"name\": \"encodedFunction\", \"type\": \"bytes\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"transactionFee\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"gasPrice\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"gasLimit\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"approvalData\", \"type\": \"bytes\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"acceptRelayedCall\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }\n    ],\n    \"name\": \"forwardLostFunds\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalancesAndPrices\",\n    \"outputs\": [\n      { \"internalType\": \"string[]\", \"name\": \"\", \"type\": \"string[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" },\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool[][]\",\n        \"name\": \"\",\n        \"type\": \"uint8[][]\"\n      },\n      { \"internalType\": \"uint256[][]\", \"name\": \"\", \"type\": \"uint256[][]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v2.2.0/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"GsnTrustedSignerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmountAfterFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"oldRelayHub\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newRelayHub\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"RelayHubChanged\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getHubAddr\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n      { \"internalType\": \"bool\", \"name\": \"success\", \"type\": \"bool\" },\n      { \"internalType\": \"uint256\", \"name\": \"actualCharge\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes32\", \"name\": \"preRetVal\", \"type\": \"bytes32\" }\n    ],\n    \"name\": \"postRelayedCall\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" }],\n    \"name\": \"preRelayedCall\",\n    \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"relayHubVersion\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"setDefaultRelayHub\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setGsnTrustedSigner\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"inputCurrencyCodes\",\n        \"type\": \"string[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"inputAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[][]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[][]\"\n      },\n      {\n        \"internalType\": \"bytes[][]\",\n        \"name\": \"signatures\",\n        \"type\": \"bytes[][]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"makerAssetFillAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"protocolFees\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"relay\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"bytes\", \"name\": \"encodedFunction\", \"type\": \"bytes\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"transactionFee\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"gasPrice\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"gasLimit\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"approvalData\", \"type\": \"bytes\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"acceptRelayedCall\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }\n    ],\n    \"name\": \"forwardLostFunds\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalancesAndPrices\",\n    \"outputs\": [\n      { \"internalType\": \"string[]\", \"name\": \"\", \"type\": \"string[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" },\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool[][]\",\n        \"name\": \"\",\n        \"type\": \"uint8[][]\"\n      },\n      { \"internalType\": \"uint256[][]\", \"name\": \"\", \"type\": \"uint256[][]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v2.4.0/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"GsnTrustedSignerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmountAfterFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"oldRelayHub\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newRelayHub\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"RelayHubChanged\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getHubAddr\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n      { \"internalType\": \"bool\", \"name\": \"success\", \"type\": \"bool\" },\n      { \"internalType\": \"uint256\", \"name\": \"actualCharge\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes32\", \"name\": \"preRetVal\", \"type\": \"bytes32\" }\n    ],\n    \"name\": \"postRelayedCall\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" }],\n    \"name\": \"preRelayedCall\",\n    \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"relayHubVersion\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"setDefaultRelayHub\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setGsnTrustedSigner\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"inputCurrencyCodes\",\n        \"type\": \"string[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"inputAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[][]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[][]\"\n      },\n      {\n        \"internalType\": \"bytes[][]\",\n        \"name\": \"signatures\",\n        \"type\": \"bytes[][]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"makerAssetFillAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"protocolFees\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"relay\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"bytes\", \"name\": \"encodedFunction\", \"type\": \"bytes\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"transactionFee\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"gasPrice\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"gasLimit\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"approvalData\", \"type\": \"bytes\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"acceptRelayedCall\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }\n    ],\n    \"name\": \"forwardLostFunds\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalancesAndPrices\",\n    \"outputs\": [\n      { \"internalType\": \"string[]\", \"name\": \"\", \"type\": \"string[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" },\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool[][]\",\n        \"name\": \"\",\n        \"type\": \"uint8[][]\"\n      },\n      { \"internalType\": \"uint256[][]\", \"name\": \"\", \"type\": \"uint256[][]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable/abi/legacy/v2.5.0/RariFundController.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.CurrencyExchange\",\n        \"name\": \"exchange\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"CurrencyTrade\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.PoolAllocationAction\",\n        \"name\": \"action\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PoolAllocation\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"IS_RARI_FUND_CONTROLLER\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"disableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"enableFund\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolsByCurrency\",\n    \"outputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool[]\",\n        \"name\": \"\",\n        \"type\": \"uint8[]\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getDydxBalances\",\n    \"outputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"\", \"type\": \"address[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"_getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"hasCurrencyInPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint16\", \"name\": \"referralCode\", \"type\": \"uint16\" }\n    ],\n    \"name\": \"setAaveReferralCode\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n      { \"internalType\": \"bool\", \"name\": \"all\", \"type\": \"bool\" }\n    ],\n    \"name\": \"withdrawFromPoolOptimized\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPoolOnUpgrade\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveTo0x\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"limit\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setDailyLossRateLimit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"marketSell0xOrdersFillOrKill\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveToMUsd\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"swapMStable\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/stable.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\n\nimport MStableSubpool from \"../subpools/mstable.js\";\n\nimport Cache from \"../cache.js\";\nimport { get0xSwapOrders } from \"../0x.js\";\n\nvar erc20Abi = require(\".\" + \"/../abi/ERC20.json\");\n\nconst contractAddresses = {\n  RariFundController: \"0x66f4856f1bbd1eb09e1c8d9d646f5a3a193da569\",\n  RariFundManager: \"0xC6BF8C8A55f77686720E0a88e2Fd1fEEF58ddf4a\",\n  RariFundToken: \"0x016bf078ABcaCB987f0589a6d3BEAdD4316922B0\",\n  RariFundPriceConsumer: \"0xFE98A52bCAcC86432E7aa76376751DcFAB202244\",\n  RariFundProxy: \"0x4a785fa6fcd2e0845a24847beb7bddd26f996d4d\",\n};\n\nvar abis = {};\nabis[\"RariFundController\"] = require(\".\" +\n  \"/stable/abi/\" +\n  \"RariFundController\" +\n  \".json\");\nabis[\"RariFundManager\"] = require(\".\" +\n  \"/stable/abi/\" +\n  \"RariFundManager\" +\n  \".json\");\nabis[\"RariFundToken\"] = require(\".\" +\n  \"/stable/abi/\" +\n  \"RariFundToken\" +\n  \".json\");\nabis[\"RariFundPriceConsumer\"] = require(\".\" +\n  \"/stable/abi/\" +\n  \"RariFundPriceConsumer\" +\n  \".json\");\nabis[\"RariFundProxy\"] = require(\".\" +\n  \"/stable/abi/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\nconst legacyContractAddresses = {\n  \"v1.0.0\": {\n    RariFundManager: \"0x686ac9d046418416d3ed9ea9206f3dace4943027\",\n    RariFundToken: \"0x9366B7C00894c3555c7590b0384e5F6a9D55659f\",\n    RariFundProxy: \"0x27C4E34163b5FD2122cE43a40e3eaa4d58eEbeaF\",\n  },\n  \"v1.1.0\": {\n    RariFundController: \"0x15c4ae284fbb3a6ceb41fa8eb5f3408ac485fabb\",\n    RariFundManager: \"0x6bdaf490c5b6bb58564b3e79c8d18e8dfd270464\",\n    RariFundProxy: \"0x318cfd99b60a63d265d2291a4ab982073fbf245d\",\n  },\n  \"v1.2.0\": {\n    RariFundProxy: \"0xb6b79D857858004BF475e4A57D4A446DA4884866\",\n  },\n  \"v2.0.0\": {\n    RariFundController: \"0xEe7162bB5191E8EC803F7635dE9A920159F1F40C\",\n    RariFundManager: \"0xC6BF8C8A55f77686720E0a88e2Fd1fEEF58ddf4a\",\n    RariFundProxy: \"0xD4be7E211680e12c08bbE9054F0dA0D646c45228\",\n  },\n  \"v2.2.0\": {\n    RariFundProxy: \"0xB202cAd3965997f2F5E67B349B2C5df036b9792e\",\n  },\n  \"v2.4.0\": {\n    RariFundProxy: \"0xe4deE94233dd4d7c2504744eE6d34f3875b3B439\",\n  },\n  \"v2.5.0\": {\n    RariFundController: \"0x369855b051d1b2dbee88a792dcfc08614ff4e262\",\n  },\n};\n\nvar legacyAbis = {};\n\n// 1.0.0\n\nlegacyAbis[\"v1.0.0\"] = {};\n\nlegacyAbis[\"v1.0.0\"][\"RariFundManager\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v1.0.0\" +\n  \"/\" +\n  \"RariFundManager\" +\n  \".json\");\n\nlegacyAbis[\"v1.0.0\"][\"RariFundToken\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v1.0.0\" +\n  \"/\" +\n  \"RariFundToken\" +\n  \".json\");\n\nlegacyAbis[\"v1.0.0\"][\"RariFundProxy\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v1.0.0\" +\n  \"/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\n// 1.1.0\n\nlegacyAbis[\"v1.1.0\"] = {};\nlegacyAbis[\"v1.1.0\"][\"RariFundManager\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v1.1.0\" +\n  \"/\" +\n  \"RariFundManager\" +\n  \".json\");\n\nlegacyAbis[\"v1.1.0\"][\"RariFundController\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v1.1.0\" +\n  \"/\" +\n  \"RariFundController\" +\n  \".json\");\n\nlegacyAbis[\"v1.1.0\"][\"RariFundProxy\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v1.1.0\" +\n  \"/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\n// 1.2.0\n\nlegacyAbis[\"v1.2.0\"] = {};\nlegacyAbis[\"v1.2.0\"][\"RariFundProxy\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v1.2.0\" +\n  \"/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\n// 2.0.0\n\nlegacyAbis[\"v2.0.0\"] = {};\nlegacyAbis[\"v2.0.0\"][\"RariFundManager\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v2.0.0\" +\n  \"/\" +\n  \"RariFundManager\" +\n  \".json\");\n\nlegacyAbis[\"v2.0.0\"][\"RariFundController\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v2.0.0\" +\n  \"/\" +\n  \"RariFundController\" +\n  \".json\");\n\nlegacyAbis[\"v2.0.0\"][\"RariFundProxy\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v2.0.0\" +\n  \"/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\n// 2.2.0\n\nlegacyAbis[\"v2.2.0\"] = {};\nlegacyAbis[\"v2.2.0\"][\"RariFundProxy\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v2.2.0\" +\n  \"/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\n// 2.4.0\n\nlegacyAbis[\"v2.4.0\"] = {};\nlegacyAbis[\"v2.4.0\"][\"RariFundProxy\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v2.4.0\" +\n  \"/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\n// 2.5.0\n\nlegacyAbis[\"v2.5.0\"] = {};\nlegacyAbis[\"v2.5.0\"][\"RariFundController\"] = require(\".\" +\n  \"/stable/abi/legacy/\" +\n  \"v2.5.0\" +\n  \"/\" +\n  \"RariFundController\" +\n  \".json\");\n\nexport default class StablePool {\n  API_BASE_URL = \"http://206.81.6.235:3000/pools/stable/\";\n  POOL_NAME = \"Rari Stable Pool\";\n  POOL_TOKEN_SYMBOL = \"RSPT\";\n\n  static CONTRACT_ADDRESSES = contractAddresses;\n  static CONTRACT_ABIS = abis;\n  static LEGACY_CONTRACT_ADDRESSES = legacyContractAddresses;\n  static LEGACY_CONTRACT_ABIS = legacyAbis;\n\n  internalTokens = {\n    DAI: {\n      symbol: \"DAI\",\n      address: \"0x6b175474e89094c44da98b954eedeac495271d0f\",\n      name: \"Dai Stablecoin\",\n      decimals: 18,\n    },\n    USDC: {\n      symbol: \"USDC\",\n      address: \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n      name: \"USD Coin\",\n      decimals: 6,\n    },\n    USDT: {\n      symbol: \"USDT\",\n      address: \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n      name: \"Tether USD\",\n      decimals: 6,\n    },\n    TUSD: {\n      symbol: \"TUSD\",\n      address: \"0x0000000000085d4780b73119b644ae5ecd22b376\",\n      name: \"TrueUSD\",\n      decimals: 18,\n    },\n    BUSD: {\n      symbol: \"BUSD\",\n      address: \"0x4Fabb145d64652a948d72533023f6E7A623C7C53\",\n      name: \"Binance USD\",\n      decimals: 18,\n    },\n    sUSD: {\n      symbol: \"sUSD\",\n      address: \"0x57ab1ec28d129707052df4df418d58a2d46d5f51\",\n      name: \"sUSD\",\n      decimals: 18,\n    },\n    mUSD: {\n      symbol: \"mUSD\",\n      address: \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n      name: \"mStable USD\",\n      decimals: 18,\n    },\n  };\n\n  constructor(web3, subpools, getAllTokens) {\n    this.web3 = web3;\n    this.pools = subpools;\n    this.getAllTokens = getAllTokens;\n    this.cache = new Cache({\n      usdPrices: 900,\n      allBalances: 30,\n      accountBalanceLimit: 3600,\n      coinGeckoList: 3600,\n      coinGeckoUsdPrices: 900,\n      acceptedCurrencies: 30,\n    });\n\n    this.contracts = {};\n    for (const contractName of Object.keys(contractAddresses))\n      this.contracts[contractName] = new this.web3.eth.Contract(\n        abis[contractName],\n        contractAddresses[contractName]\n      );\n    // this.gsnContracts = { RariFundProxy: new this.web3Gsn.eth.Contract(abis.RariFundProxy, contractAddresses.RariFundProxy) };\n    this.legacyContracts = {};\n\n    for (const version of Object.keys(legacyContractAddresses)) {\n      if (!this.legacyContracts[version]) this.legacyContracts[version] = {};\n      for (const contractName of Object.keys(legacyContractAddresses[version]))\n        this.legacyContracts[version][\n          contractName\n        ] = new this.web3.eth.Contract(\n          legacyAbis[version][contractName],\n          legacyContractAddresses[version][contractName]\n        );\n    }\n\n    for (const currencyCode of Object.keys(this.internalTokens))\n      this.internalTokens[currencyCode].contract = new this.web3.eth.Contract(\n        erc20Abi,\n        this.internalTokens[currencyCode].address\n      );\n\n    var self = this;\n\n    this.balances = {\n      getTotalSupply: async function () {\n        return Web3.utils.toBN(\n          await self.contracts.RariFundManager.methods.getFundBalance().call()\n        );\n      },\n      getTotalInterestAccrued: async function (\n        fromBlock = 0,\n        toBlock = \"latest\"\n      ) {\n        if (!fromBlock) fromBlock = 0;\n        if (toBlock === undefined) toBlock = \"latest\";\n\n        if (fromBlock == 0 && toBlock === \"latest\")\n          return Web3.utils.toBN(\n            await self.contracts.RariFundManager.methods\n              .getInterestAccrued()\n              .call()\n          );\n        else\n          try {\n            return Web3.utils.toBN(\n              (\n                await axios.get(self.API_BASE_URL + \"interest\", {\n                  params: { fromBlock, toBlock },\n                })\n              ).data\n            );\n          } catch (error) {\n            throw new Error(\"Error in Rari API: \" + error);\n          }\n      },\n      balanceOf: async function (account) {\n        if (!account) throw new Error(\"No account specified\");\n        return Web3.utils.toBN(\n          await self.contracts.RariFundManager.methods.balanceOf(account).call()\n        );\n      },\n      interestAccruedBy: async function (\n        account,\n        fromTimestamp = 0,\n        toTimestamp = \"latest\"\n      ) {\n        if (!account) throw new Error(\"No account specified\");\n        if (!fromTimestamp) fromTimestamp = 0;\n        if (toTimestamp === undefined) toTimestamp = \"latest\";\n\n        try {\n          return Web3.utils.toBN(\n            (\n              await axios.get(self.API_BASE_URL + \"interest/\" + account, {\n                params: { fromTimestamp, toTimestamp },\n              })\n            ).data\n          );\n        } catch (error) {\n          throw new Error(\"Error in Rari API: \" + error);\n        }\n      },\n      transfer: async function (recipient, amount, options) {\n        if (!recipient) throw new Error(\"No recipient specified.\");\n        if (\n          !amount ||\n          !Web3.utils.BN.isBN(amount) ||\n          !amount.gt(Web3.utils.toBN(0))\n        )\n          throw new Error(\"Amount is not a valid BN instance greater than 0.\");\n        if (!options || !options.from)\n          throw new Error(\"Options parameter not set or from address not set.\");\n\n        var fundBalanceBN = Web3.utils.toBN(\n          await self.contracts.RariFundManager.methods.getFundBalance().call()\n        );\n        var rftTotalSupplyBN = Web3.utils.toBN(\n          await self.contracts.RariFundToken.methods.totalSupply().call()\n        );\n        var rftAmountBN = amount.mul(rftTotalSupplyBN).div(fundBalanceBN);\n        return await self.contracts.RariFundToken.methods\n          .transfer(recipient, rftAmountBN)\n          .send(options);\n      },\n    };\n\n    this.allocations = {\n      CURRENCIES: [\"DAI\", \"USDC\", \"USDT\", \"TUSD\", \"BUSD\", \"sUSD\", \"mUSD\"],\n      POOLS: (function () {\n        var pools = [\"dYdX\", \"Compound\", \"Aave\", \"mStable\"];\n        pools[100] = \"Fuse3\";\n        pools[101] = \"Fuse7\";\n        pools[102] = \"Fuse13\";\n        pools[103] = \"Fuse14\";\n        pools[104] = \"Fuse15\";\n        pools[105] = \"Fuse16\";\n        pools[106] = \"Fuse11\";\n        pools[107] = \"Fuse2\";\n        pools[108] = \"Fuse18\";\n        pools[109] = \"Fuse6\";\n        return pools;\n      })(),\n      POOLS_BY_CURRENCY: {\n        DAI: [\"dYdX\", \"Compound\", \"Aave\"],\n        USDC: [\"dYdX\", \"Compound\", \"Aave\", \"Fuse3\", \"Fuse7\", \"Fuse13\", \"Fuse14\", \"Fuse15\", \"Fuse16\", \"Fuse11\", \"Fuse2\", \"Fuse18\", \"Fuse6\"],\n        USDT: [\"Compound\", \"Aave\"],\n        TUSD: [\"Aave\"],\n        BUSD: [\"Aave\"],\n        sUSD: [\"Aave\"],\n        mUSD: [\"mStable\"],\n      },\n      CURRENCIES_BY_POOL: {\n        dYdX: [\"DAI\", \"USDC\"],\n        Compound: [\"DAI\", \"USDC\", \"USDT\"],\n        Aave: [\"DAI\", \"USDC\", \"USDT\", \"TUSD\", \"BUSD\", \"sUSD\"],\n        mStable: [\"mUSD\"],\n        Fuse3: [\"USDC\"],\n        Fuse7: [\"USDC\"],\n        Fuse13: [\"USDC\"],\n        Fuse14: [\"USDC\"],\n        Fuse15: [\"USDC\"],\n        Fuse16: [\"USDC\"],\n        Fuse11: [\"USDC\"],\n        Fuse2: [\"USDC\"],\n        Fuse18: [\"USDC\"],\n        Fuse6: [\"USDC\"],\n      },\n      getRawCurrencyAllocations: async function () {\n        var allocationsByCurrency = {\n          DAI: Web3.utils.toBN(0),\n          USDC: Web3.utils.toBN(0),\n          USDT: Web3.utils.toBN(0),\n          TUSD: Web3.utils.toBN(0),\n          BUSD: Web3.utils.toBN(0),\n          sUSD: Web3.utils.toBN(0),\n          mUSD: Web3.utils.toBN(0),\n        };\n        var allBalances = await self.cache.getOrUpdate(\n          \"allBalances\",\n          self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n            .call\n        );\n\n        for (var i = 0; i < allBalances[\"0\"].length; i++) {\n          var currencyCode = allBalances[\"0\"][i];\n          var contractBalanceBN = Web3.utils.toBN(allBalances[\"1\"][i]);\n          allocationsByCurrency[currencyCode] = contractBalanceBN;\n          var pools = allBalances[\"2\"][i];\n          var poolBalances = allBalances[\"3\"][i];\n\n          for (var j = 0; j < pools.length; j++) {\n            var poolBalanceBN = Web3.utils.toBN(poolBalances[j]);\n            allocationsByCurrency[currencyCode].iadd(poolBalanceBN);\n          }\n        }\n\n        return allocationsByCurrency;\n      },\n      getRawCurrencyAllocationsInUsd: async function () {\n        var allocationsByCurrency = {\n          DAI: Web3.utils.toBN(0),\n          USDC: Web3.utils.toBN(0),\n          USDT: Web3.utils.toBN(0),\n          TUSD: Web3.utils.toBN(0),\n          BUSD: Web3.utils.toBN(0),\n          sUSD: Web3.utils.toBN(0),\n          mUSD: Web3.utils.toBN(0),\n        };\n        var allBalances = await self.cache.getOrUpdate(\n          \"allBalances\",\n          self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n            .call\n        );\n\n        for (var i = 0; i < allBalances[\"0\"].length; i++) {\n          var currencyCode = allBalances[\"0\"][i];\n          var priceInUsdBN = Web3.utils.toBN(allBalances[\"4\"][i]);\n          var contractBalanceBN = Web3.utils.toBN(allBalances[\"1\"][i]);\n          var contractBalanceUsdBN = contractBalanceBN\n            .mul(priceInUsdBN)\n            .div(\n              Web3.utils.toBN(10 ** self.internalTokens[currencyCode].decimals)\n            );\n          allocationsByCurrency[currencyCode] = contractBalanceUsdBN;\n          var pools = allBalances[\"2\"][i];\n          var poolBalances = allBalances[\"3\"][i];\n\n          for (var j = 0; j < pools.length; j++) {\n            var poolBalanceBN = Web3.utils.toBN(poolBalances[j]);\n            var poolBalanceUsdBN = poolBalanceBN\n              .mul(priceInUsdBN)\n              .div(\n                Web3.utils.toBN(\n                  10 ** self.internalTokens[currencyCode].decimals\n                )\n              );\n            allocationsByCurrency[currencyCode].iadd(poolBalanceUsdBN);\n          }\n        }\n\n        return allocationsByCurrency;\n      },\n      getRawPoolAllocations: async function () {\n        var allocationsByPool = {\n          _cash: Web3.utils.toBN(0),\n        };\n        for (const poolName of self.allocations.POOLS)\n          if (poolName !== undefined)\n            allocationsByPool[poolName] = Web3.utils.toBN(0);\n        var allBalances = await self.cache.getOrUpdate(\n          \"allBalances\",\n          self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n            .call\n        );\n\n        for (var i = 0; i < allBalances[\"0\"].length; i++) {\n          var currencyCode = allBalances[\"0\"][i];\n          var priceInUsdBN = Web3.utils.toBN(allBalances[\"4\"][i]);\n          var contractBalanceBN = Web3.utils.toBN(allBalances[\"1\"][i]);\n          var contractBalanceUsdBN = contractBalanceBN\n            .mul(priceInUsdBN)\n            .div(\n              Web3.utils.toBN(10 ** self.internalTokens[currencyCode].decimals)\n            );\n          allocationsByPool._cash.iadd(contractBalanceUsdBN);\n          var pools = allBalances[\"2\"][i];\n          var poolBalances = allBalances[\"3\"][i];\n\n          for (var j = 0; j < pools.length; j++) {\n            var pool = pools[j];\n            var poolBalanceBN = Web3.utils.toBN(poolBalances[j]);\n            var poolBalanceUsdBN = poolBalanceBN\n              .mul(priceInUsdBN)\n              .div(\n                Web3.utils.toBN(\n                  10 ** self.internalTokens[currencyCode].decimals\n                )\n              );\n            allocationsByPool[self.allocations.POOLS[pool]].iadd(\n              poolBalanceUsdBN\n            );\n          }\n        }\n\n        return allocationsByPool;\n      },\n      getRawAllocations: async function () {\n        var currencies = {};\n        var allBalances = await self.cache.getOrUpdate(\n          \"allBalances\",\n          self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n            .call\n        );\n\n        for (var i = 0; i < allBalances[\"0\"].length; i++) {\n          var currencyCode = allBalances[\"0\"][i];\n          var contractBalanceBN = Web3.utils.toBN(allBalances[\"1\"][i]);\n          currencies[currencyCode] = { _cash: contractBalanceBN };\n          var pools = allBalances[\"2\"][i];\n          var poolBalances = allBalances[\"3\"][i];\n\n          for (var j = 0; j < pools.length; j++) {\n            var pool = pools[j];\n            var poolBalanceBN = Web3.utils.toBN(poolBalances[j]);\n            currencies[currencyCode][\n              self.allocations.POOLS[pool]\n            ] = poolBalanceBN;\n          }\n        }\n\n        return currencies;\n      },\n      getCurrencyUsdPrices: async function () {\n        var prices = {};\n        var allBalances = await self.cache.getOrUpdate(\n          \"allBalances\",\n          self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n            .call\n        );\n        for (var i = 0; i < allBalances[\"0\"].length; i++)\n          prices[allBalances[\"0\"][i]] = Web3.utils.toBN(allBalances[\"4\"][i]);\n        return prices;\n      },\n    };\n\n    this.apy = {\n      getCurrentRawApy: async function () {\n        var factors = [];\n        var totalBalanceUsdBN = Web3.utils.toBN(0);\n\n        // Get all balances\n        var allBalances = await self.cache.getOrUpdate(\n          \"allBalances\",\n          self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n            .call\n        );\n\n        // Get raw balances\n        for (var i = 0; i < allBalances[\"0\"].length; i++) {\n          var currencyCode = allBalances[\"0\"][i];\n          var priceInUsdBN = Web3.utils.toBN(allBalances[\"4\"][i]);\n          var contractBalanceBN = Web3.utils.toBN(allBalances[\"1\"][i]);\n\n          var contractBalanceUsdBN = contractBalanceBN\n            .mul(priceInUsdBN)\n            .div(\n              Web3.utils.toBN(10 ** self.internalTokens[currencyCode].decimals)\n            );\n          factors.push([contractBalanceUsdBN, Web3.utils.toBN(0)]);\n          totalBalanceUsdBN = totalBalanceUsdBN.add(contractBalanceUsdBN);\n          var pools = allBalances[\"2\"][i];\n          var poolBalances = allBalances[\"3\"][i];\n\n          for (var j = 0; j < pools.length; j++) {\n            var pool = pools[j];\n            var poolBalanceBN = Web3.utils.toBN(poolBalances[j]);\n\n            var poolBalanceUsdBN = poolBalanceBN\n              .mul(priceInUsdBN)\n              .div(\n                Web3.utils.toBN(\n                  10 ** self.internalTokens[currencyCode].decimals\n                )\n              );\n\n            var poolApyBN = poolBalanceUsdBN.gt(Web3.utils.toBN(0)) ? (await self.pools[\n              self.allocations.POOLS[pool]\n            ].getCurrencyApys())[currencyCode] : Web3.utils.toBN(0);\n            factors.push([poolBalanceUsdBN, poolApyBN]);\n            totalBalanceUsdBN = totalBalanceUsdBN.add(poolBalanceUsdBN);\n          }\n        }\n\n        if (totalBalanceUsdBN.isZero()) {\n          var maxApyBN = Web3.utils.toBN(0);\n          for (var i = 0; i < factors.length; i++)\n            if (factors[i][1].gt(maxApyBN)) maxApyBN = factors[i][1];\n          return maxApyBN;\n        }\n\n        var apyBN = Web3.utils.toBN(0);\n        for (var i = 0; i < factors.length; i++) {\n          apyBN.iadd(\n            factors[i][0]\n              .mul(\n                factors[i][1].gt(Web3.utils.toBN(0))\n                  ? factors[i][1]\n                  : Web3.utils.toBN(0)\n              )\n              .div(totalBalanceUsdBN)\n          );\n        }\n\n        return apyBN;\n      },\n      getCurrentApy: async function () {\n        var rawFundApy = await self.apy.getCurrentRawApy();\n        return rawFundApy.sub(\n          rawFundApy\n            .mul(\n              Web3.utils.toBN(\n                await self.contracts.RariFundManager.methods\n                  .getInterestFeeRate()\n                  .call()\n              )\n            )\n            .div(Web3.utils.toBN(1e18))\n        );\n      },\n      calculateApy: function (\n        startTimestamp,\n        startRsptExchangeRate,\n        endTimestamp,\n        endRsptExchangeRate\n      ) {\n        const SECONDS_PER_YEAR = 365 * 86400;\n        var timeDiff = endTimestamp - startTimestamp;\n        return Web3.utils.toBN(\n          Math.trunc(\n            ((endRsptExchangeRate.toString() /\n              startRsptExchangeRate.toString()) **\n              (SECONDS_PER_YEAR / timeDiff) -\n              1) *\n              1e18\n          )\n        );\n      },\n      getApyOverBlocks: async function (fromBlock = 0, toBlock = \"latest\") {\n        var blockNumber = await self.web3.eth.getBlockNumber();\n        var fromBlock =\n          fromTimestamp !== undefined\n            ? Math.max(fromTimestamp, 10365607)\n            : 10365607;\n        var toBlock =\n          toBlock !== undefined && toBlock !== \"latest\"\n            ? Math.min(toBlock, blockNumber)\n            : blockNumber;\n        var fromTimestamp = (await self.web3.eth.getBlock(fromBlock)).timestamp;\n        var toTimestamp = (await self.web3.eth.getBlock(toBlock)).timestamp;\n        return await self.apy.calculateApy(\n          fromTimestamp,\n          await self.poolToken.getExchangeRate(fromBlock),\n          toTimestamp,\n          await self.poolToken.getExchangeRate(toBlock)\n        );\n      },\n      getApyOverTime: async function (\n        fromTimestamp = 0,\n        toTimestamp = \"latest\"\n      ) {\n        var fromTimestamp =\n          fromTimestamp !== undefined\n            ? Math.max(fromTimestamp, 1593499687)\n            : 1593499687;\n        var toTimestamp =\n          toTimestamp !== undefined && toTimestamp !== \"latest\"\n            ? Math.min(toTimestamp, new Date().getTime() / 1000)\n            : Math.trunc(new Date().getTime() / 1000);\n\n        try {\n          return Web3.utils.toBN(\n            (\n              await axios.get(self.API_BASE_URL + \"apy\", {\n                params: { fromTimestamp, toTimestamp },\n              })\n            ).data\n          );\n        } catch (error) {\n          throw new Error(\"Error in Rari API: \" + error);\n        }\n      },\n    };\n\n    this.deposits = {\n      getDepositCurrencies: async function () {\n        var currencyCodes = self.allocations.CURRENCIES.slice();\n        currencyCodes.push(\"ETH\");\n        var allTokens = await self.getAllTokens();\n        for (const currencyCode of Object.keys(allTokens))\n          if (currencyCodes.indexOf(currencyCode) < 0)\n            currencyCodes.push(currencyCode);\n        return currencyCodes;\n      },\n      getDirectDepositCurrencies: async function () {\n        return await self.contracts.RariFundManager.methods\n          .getAcceptedCurrencies()\n          .call();\n      },\n      getAccountBalanceLimit: async function (account) {\n        return await self.contracts.RariFundManager.methods\n          .getAccountBalanceLimit(account)\n          .call();\n      },\n      getDefaultAccountBalanceLimit: async function (account) {\n        return await self.contracts.RariFundManager.methods\n          .getDefaultAccountBalanceLimit(account)\n          .call();\n      },\n      validateDeposit: async function (\n        currencyCode,\n        amount,\n        sender,\n        getSlippage\n      ) {\n        // Input validation\n        if (!sender) throw new Error(\"Sender parameter not set.\");\n        var allTokens = await self.getAllTokens();\n        if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n          throw new Error(\"Invalid currency code!\");\n        if (!amount || amount.lte(Web3.utils.toBN(0)))\n          throw new Error(\"Deposit amount must be greater than 0!\");\n        var accountBalanceBN = Web3.utils.toBN(\n          await (currencyCode == \"ETH\"\n            ? self.web3.eth.getBalance(sender)\n            : allTokens[currencyCode].contract.methods.balanceOf(sender).call())\n        );\n        if (amount.gt(accountBalanceBN))\n          throw new Error(\n            \"Not enough balance in your account to make a deposit of this amount.\"\n          );\n\n        // Check if currency is directly depositable\n        var directlyDepositableCurrencyCodes = await self.cache.getOrUpdate(\n          \"acceptedCurrencies\",\n          self.contracts.RariFundManager.methods.getAcceptedCurrencies().call\n        );\n        if (\n          !directlyDepositableCurrencyCodes ||\n          directlyDepositableCurrencyCodes.length == 0\n        )\n          throw new Error(\"No directly depositable currencies found.\");\n\n        if (directlyDepositableCurrencyCodes.indexOf(currencyCode) >= 0) {\n          // Get USD amount added to sender's fund balance\n          var allBalances = await self.cache.getOrUpdate(\n            \"allBalances\",\n            self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n              .call\n          );\n          var amountUsdBN = amount\n            .mul(\n              Web3.utils.toBN(\n                allBalances[\"4\"][\n                  self.allocations.CURRENCIES.indexOf(currencyCode)\n                ]\n              )\n            )\n            .div(\n              Web3.utils\n                .toBN(10)\n                .pow(\n                  Web3.utils.toBN(self.internalTokens[currencyCode].decimals)\n                )\n            );\n\n          // Return amountUsdBN\n          return [amountUsdBN, null, Web3.utils.toBN(0)];\n        } else {\n          // Get mStable output currency if possible\n          var mStableOutputCurrency = null;\n          var mStableOutputAmountAfterFeeBN = null;\n\n          if (\n            currencyCode === \"mUSD\" ||\n            MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(\n              currencyCode\n            ) >= 0\n          ) {\n            for (var acceptedCurrency of directlyDepositableCurrencyCodes)\n              if (\n                acceptedCurrency === \"mUSD\" ||\n                MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(\n                  acceptedCurrency\n                ) >= 0\n              ) {\n                if (currencyCode === \"mUSD\") {\n                  try {\n                    var redeemValidity = await self.pools[\n                      \"mStable\"\n                    ].externalContracts.MassetValidationHelper.methods\n                      .getRedeemValidity(\n                        \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                        amount,\n                        self.internalTokens[acceptedCurrency].address\n                      )\n                      .call();\n                  } catch (err) {\n                    console.error(\"Failed to check mUSD redeem validity:\", err);\n                    continue;\n                  }\n\n                  if (!redeemValidity || !redeemValidity[\"0\"]) continue;\n                  mStableOutputAmountAfterFeeBN = Web3.utils.toBN(\n                    redeemValidity[\"2\"]\n                  );\n                } else {\n                  try {\n                    var maxSwap = await self.pools[\n                      \"mStable\"\n                    ].externalContracts.MassetValidationHelper.methods\n                      .getMaxSwap(\n                        \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                        self.internalTokens[currencyCode].address,\n                        self.internalTokens[acceptedCurrency].address\n                      )\n                      .call();\n                  } catch (err) {\n                    console.error(\"Failed to check mUSD max swap:\", err);\n                    continue;\n                  }\n\n                  if (\n                    !maxSwap ||\n                    !maxSwap[\"0\"] ||\n                    amount.gt(Web3.utils.toBN(maxSwap[\"2\"]))\n                  )\n                    continue;\n                  var outputAmountBeforeFeesBN = amount\n                    .mul(\n                      Web3.utils.toBN(\n                        10 ** self.internalTokens[acceptedCurrency].decimals\n                      )\n                    )\n                    .div(\n                      Web3.utils.toBN(\n                        10 ** self.internalTokens[currencyCode].decimals\n                      )\n                    );\n\n                  if (acceptedCurrency === \"mUSD\")\n                    mStableOutputAmountAfterFeeBN = outputAmountBeforeFeesBN;\n                  else {\n                    var swapFeeBN = await self.pools[\n                      \"mStable\"\n                    ].getMUsdSwapFeeBN();\n                    mStableOutputAmountAfterFeeBN = outputAmountBeforeFeesBN.sub(\n                      outputAmountBeforeFeesBN\n                        .mul(swapFeeBN)\n                        .div(Web3.utils.toBN(1e18))\n                    );\n                  }\n                }\n\n                mStableOutputCurrency = acceptedCurrency;\n                break;\n              }\n          }\n\n          // Ideally mStable, but 0x works too\n          if (mStableOutputCurrency !== null) {\n            // Get USD amount added to sender's fund balance\n            var allBalances = await self.cache.getOrUpdate(\n              \"allBalances\",\n              self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n                .call\n            );\n            var outputAmountUsdBN = mStableOutputAmountAfterFeeBN\n              .mul(\n                Web3.utils.toBN(\n                  allBalances[\"4\"][\n                    self.allocations.CURRENCIES.indexOf(mStableOutputCurrency)\n                  ]\n                )\n              )\n              .div(\n                Web3.utils\n                  .toBN(10)\n                  .pow(\n                    Web3.utils.toBN(\n                      self.internalTokens[mStableOutputCurrency].decimals\n                    )\n                  )\n              );\n\n            // Return outputAmountUsdBN\n            return [\n              outputAmountUsdBN,\n              null,\n              getSlippage\n                ? await self.deposits.getDepositSlippage(\n                    currencyCode,\n                    amount,\n                    outputAmountUsdBN\n                  )\n                : null,\n            ];\n          } else {\n            // Otherwise, use first accepted currency for 0x\n            var acceptedCurrency = directlyDepositableCurrencyCodes[0];\n\n            // Get orders from 0x swap API\n            try {\n              var [\n                orders,\n                inputFilledAmountBN,\n                protocolFee,\n                takerAssetFilledAmountBN,\n                makerAssetFilledAmountBN,\n                gasPrice,\n              ] = await get0xSwapOrders(\n                currencyCode === \"ETH\"\n                  ? \"WETH\"\n                  : allTokens[currencyCode].address,\n                allTokens[acceptedCurrency].address,\n                amount\n              );\n            } catch (err) {\n              throw new Error(\"Failed to get swap orders from 0x API: \" + err);\n            }\n\n            // Get USD amount added to sender's fund balance\n            var allBalances = await self.cache.getOrUpdate(\n              \"allBalances\",\n              self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n                .call\n            );\n            var makerAssetFilledAmountUsdBN = makerAssetFilledAmountBN\n              .mul(\n                Web3.utils.toBN(\n                  allBalances[\"4\"][\n                    self.allocations.CURRENCIES.indexOf(acceptedCurrency)\n                  ]\n                )\n              )\n              .div(\n                Web3.utils\n                  .toBN(10)\n                  .pow(\n                    Web3.utils.toBN(\n                      self.internalTokens[acceptedCurrency].decimals\n                    )\n                  )\n              );\n\n            // Make sure input amount is completely filled\n            if (inputFilledAmountBN.lt(amount))\n              throw new Error(\n                \"Unable to find enough liquidity to exchange \" +\n                  currencyCode +\n                  \" before depositing.\"\n              );\n\n            // Multiply protocol fee by 1.5 to account for user upping the gas price\n            var protocolFeeBN = Web3.utils.toBN(protocolFee).muln(15).divn(10);\n\n            // Make sure we have enough ETH for the protocol fee\n            var ethBalanceBN =\n              currencyCode == \"ETH\"\n                ? accountBalanceBN\n                : Web3.utils.toBN(await self.web3.eth.getBalance(sender));\n            if (\n              protocolFeeBN.gt(\n                currencyCode === \"ETH\" ? ethBalanceBN.sub(amount) : ethBalanceBN\n              )\n            )\n              throw new Error(\n                \"ETH balance too low to cover 0x exchange protocol fee.\"\n              );\n\n            // Return makerAssetFilledAmountUsdBN and protocolFeeBN\n            return [\n              makerAssetFilledAmountUsdBN,\n              protocolFeeBN,\n              getSlippage\n                ? await self.deposits.getDepositSlippage(\n                    currencyCode,\n                    amount,\n                    makerAssetFilledAmountUsdBN\n                  )\n                : null,\n            ];\n          }\n        }\n      },\n      getDepositSlippage: async function (currencyCode, amount, usdAmount) {\n        if (self.POOL_TOKEN_SYMBOL === \"RYPT\") {\n          var directlyDepositableCurrencyCodes = await self.cache.getOrUpdate(\n            \"acceptedCurrencies\",\n            self.contracts.RariFundManager.methods.getAcceptedCurrencies().call\n          );\n          if (\n            directlyDepositableCurrencyCodes &&\n            directlyDepositableCurrencyCodes.length > 0 &&\n            directlyDepositableCurrencyCodes.indexOf(currencyCode) >= 0\n          ) {\n            var allBalances = await self.cache.getOrUpdate(\n              \"allBalances\",\n              self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n                .call\n            );\n            return Web3.utils\n              .toBN(1e18)\n              .sub(\n                usdAmount\n                  .mul(\n                    Web3.utils\n                      .toBN(10)\n                      .pow(\n                        Web3.utils.toBN(\n                          self.internalTokens[currencyCode].decimals\n                        )\n                      )\n                  )\n                  .div(\n                    amount\n                      .mul(\n                        Web3.utils.toBN(\n                          allBalances[\"4\"][\n                            self.allocations.CURRENCIES.indexOf(currencyCode)\n                          ]\n                        )\n                      )\n                      .div(Web3.utils.toBN(1e18))\n                  )\n              );\n          }\n        } else if (self.POOL_TOKEN_SYMBOL === \"RSPT\") {\n          if (currencyCode === \"USDC\")\n            return Web3.utils\n              .toBN(1e18)\n              .sub(usdAmount.mul(Web3.utils.toBN(1e6)).div(amount))\n              .toString();\n        } else if (self.POOL_TOKEN_SYMBOL === \"RDPT\") {\n          if (currencyCode === \"DAI\")\n            return Web3.utils\n              .toBN(1e18)\n              .sub(usdAmount.mul(Web3.utils.toBN(1e18)).div(amount))\n              .toString();\n        } else {\n          throw \"Not implemented for \" + self.POOL_TOKEN_SYMBOL;\n        }\n\n        // Get tokens\n        var allTokens = await self.getAllTokens();\n        if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n          throw new Error(\"Invalid currency code!\");\n\n        // Try cache\n        if (\n          self.cache._raw.coinGeckoUsdPrices &&\n          self.cache._raw.coinGeckoUsdPrices.value &&\n          self.cache._raw.coinGeckoUsdPrices.value[\"USDC\"] &&\n          self.cache._raw.coinGeckoUsdPrices.value[currencyCode] &&\n          new Date().getTime() / 1000 <=\n            self.cache._raw.coinGeckoUsdPrices.lastUpdated +\n              self.cache._raw.coinGeckoUsdPrices.timeout\n        ) {\n          if (self.POOL_TOKEN_SYMBOL === \"RSPT\")\n            usdAmount =\n              parseFloat(usdAmount.toString()) *\n              self.cache._raw.coinGeckoUsdPrices.value[\"USDC\"];\n          else if (self.POOL_TOKEN_SYMBOL === \"RDPT\")\n            usdAmount =\n              parseFloat(usdAmount.toString()) *\n              self.cache._raw.coinGeckoUsdPrices.value[\"DAI\"];\n          else usdAmount = parseFloat(usdAmount.toString());\n          return Web3.utils\n            .toBN(1e18)\n            .sub(\n              Web3.utils.toBN(\n                Math.trunc(\n                  usdAmount *\n                    (10 **\n                      (currencyCode === \"ETH\"\n                        ? 18\n                        : allTokens[currencyCode].decimals) /\n                      (parseFloat(amount.toString()) *\n                        self.cache._raw.coinGeckoUsdPrices.value[currencyCode]))\n                )\n              )\n            );\n        }\n\n        // Build currency code array\n        var currencyCodes = [...self.allocations.CURRENCIES];\n        if (currencyCodes.indexOf(currencyCode) < 0)\n          currencyCodes.push(currencyCode);\n\n        // Get CoinGecko IDs\n        var decoded = await self.cache.getOrUpdate(\n          \"coinGeckoList\",\n          async function () {\n            return (\n              await axios.get(\"https://api.coingecko.com/api/v3/coins/list\")\n            ).data;\n          }\n        );\n        if (!decoded)\n          throw new Error(\"Failed to decode coins list from CoinGecko\");\n        var currencyCodesByCoinGeckoIds = {};\n\n        for (const currencyCode of currencyCodes) {\n          var filtered = decoded.filter(\n            (coin) => coin.symbol.toLowerCase() === currencyCode.toLowerCase()\n          );\n          if (!filtered)\n            throw new Error(\"Failed to get currency IDs from CoinGecko\");\n          for (const coin of filtered)\n            currencyCodesByCoinGeckoIds[coin.id] = currencyCode;\n        }\n\n        // Get prices\n        var decoded = (\n          await axios.get(\"https://api.coingecko.com/api/v3/simple/price\", {\n            params: {\n              vs_currencies: \"usd\",\n              ids: Object.keys(currencyCodesByCoinGeckoIds).join(\",\"),\n              include_market_cap: true,\n            },\n          })\n        ).data;\n        if (!decoded)\n          throw new Error(\"Failed to decode USD exchange rates from CoinGecko\");\n        var prices = {};\n        var maxMarketCaps = {};\n\n        for (const key of Object.keys(decoded))\n          if (\n            prices[currencyCodesByCoinGeckoIds[key]] === undefined ||\n            decoded[key].usd_market_cap >\n              maxMarketCaps[currencyCodesByCoinGeckoIds[key]]\n          ) {\n            maxMarketCaps[currencyCodesByCoinGeckoIds[key]] =\n              decoded[key].usd_market_cap;\n            prices[currencyCodesByCoinGeckoIds[key]] = decoded[key].usd;\n          }\n\n        // Update cache\n        self.cache.update(\"coinGeckoUsdPrices\", prices);\n\n        // Return slippage\n        if (\n          self.cache._raw.coinGeckoUsdPrices.value[\"USDC\"] &&\n          self.cache._raw.coinGeckoUsdPrices.value[currencyCode]\n        ) {\n          if (self.POOL_TOKEN_SYMBOL === \"RSPT\")\n            usdAmount =\n              parseFloat(usdAmount.toString()) *\n              self.cache._raw.coinGeckoUsdPrices.value[\"USDC\"];\n          else if (self.POOL_TOKEN_SYMBOL === \"RDPT\")\n            usdAmount =\n              parseFloat(usdAmount.toString()) *\n              self.cache._raw.coinGeckoUsdPrices.value[\"DAI\"];\n          else usdAmount = parseFloat(usdAmount.toString());\n          return Web3.utils\n            .toBN(1e18)\n            .sub(\n              Web3.utils.toBN(\n                Math.trunc(\n                  usdAmount *\n                    (10 **\n                      (currencyCode === \"ETH\"\n                        ? 18\n                        : allTokens[currencyCode].decimals) /\n                      (parseFloat(amount.toString()) *\n                        self.cache._raw.coinGeckoUsdPrices.value[currencyCode]))\n                )\n              )\n            );\n        } else throw new Error(\"Failed to get currency prices from CoinGecko\");\n      },\n      deposit: async function (currencyCode, amount, minUsdAmount, options) {\n        // Input validation\n        if (!options || !options.from)\n          throw new Error(\"Options parameter not set or from address not set.\");\n        var allTokens = await self.getAllTokens();\n        if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n          throw new Error(\"Invalid currency code!\");\n        if (!amount || amount.lte(Web3.utils.toBN(0)))\n          throw new Error(\"Deposit amount must be greater than 0!\");\n        var accountBalanceBN = Web3.utils.toBN(\n          await (currencyCode == \"ETH\"\n            ? self.web3.eth.getBalance(options.from)\n            : allTokens[currencyCode].contract.methods\n                .balanceOf(options.from)\n                .call())\n        );\n        if (amount.gt(accountBalanceBN))\n          throw new Error(\n            \"Not enough balance in your account to make a deposit of this amount.\"\n          );\n\n        // Check if currency is directly depositable\n        var directlyDepositableCurrencyCodes = await self.cache.getOrUpdate(\n          \"acceptedCurrencies\",\n          self.contracts.RariFundManager.methods.getAcceptedCurrencies().call\n        );\n        if (\n          !directlyDepositableCurrencyCodes ||\n          directlyDepositableCurrencyCodes.length == 0\n        )\n          throw new Error(\"No directly depositable currencies found.\");\n\n        if (directlyDepositableCurrencyCodes.indexOf(currencyCode) >= 0) {\n          // Get USD amount added to sender's fund balance\n          var allBalances = await self.cache.getOrUpdate(\n            \"allBalances\",\n            self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n              .call\n          );\n          var amountUsdBN = amount\n            .mul(\n              Web3.utils.toBN(\n                allBalances[\"4\"][\n                  self.allocations.CURRENCIES.indexOf(currencyCode)\n                ]\n              )\n            )\n            .div(\n              Web3.utils\n                .toBN(10)\n                .pow(\n                  Web3.utils.toBN(self.internalTokens[currencyCode].decimals)\n                )\n            );\n\n          // Check amountUsdBN against minUsdAmount\n          if (\n            typeof minUsdAmount !== \"undefined\" &&\n            minUsdAmount !== null &&\n            amountUsdBN.lt(minUsdAmount)\n          )\n            return [amountUsdBN];\n\n          // Get deposit contract\n          var useGsn = /* amountUsdBN.gte(Web3.utils.toBN(250e18)) && myFundBalanceBN.isZero() */ false;\n          var approvalReceipt = null;\n          var receipt;\n\n          var approveAndDeposit = async function () {\n            var depositContract = useGsn\n              ? self.gsnContracts.RariFundProxy\n              : self.contracts.RariFundManager;\n\n            // Approve tokens to RariFundManager\n            try {\n              var allowanceBN = Web3.utils.toBN(\n                await allTokens[currencyCode].contract.methods\n                  .allowance(options.from, depositContract.options.address)\n                  .call()\n              );\n              if (allowanceBN.lt(amount)) {\n                if (\n                  allowanceBN.gt(Web3.utils.toBN(0)) &&\n                  currencyCode === \"USDT\"\n                )\n                  await allTokens[currencyCode].contract.methods\n                    .approve(depositContract.options.address, \"0\")\n                    .send(options);\n                approvalReceipt = await allTokens[currencyCode].contract.methods\n                  .approve(depositContract.options.address, amount)\n                  .send(options);\n              }\n            } catch (err) {\n              throw new Error(\n                \"Failed to approve tokens: \" + (err.message ? err.message : err)\n              );\n            }\n\n            // Deposit tokens to RariFundManager\n            try {\n              receipt = await depositContract.methods\n                .deposit(currencyCode, amount)\n                .send(options);\n            } catch (err) {\n              if (useGsn) {\n                useGsn = false;\n                return await approveAndDeposit();\n              }\n\n              throw err;\n            }\n          };\n\n          await approveAndDeposit();\n          self.cache.clear(\"allBalances\");\n          return [amountUsdBN, null, approvalReceipt, receipt];\n        } else {\n          // Get mStable output currency if possible\n          var mStableOutputCurrency = null;\n          var mStableOutputAmountAfterFeeBN = null;\n\n          if (\n            currencyCode === \"mUSD\" ||\n            MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(\n              currencyCode\n            ) >= 0\n          ) {\n            for (var acceptedCurrency of directlyDepositableCurrencyCodes)\n              if (\n                acceptedCurrency === \"mUSD\" ||\n                MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(\n                  acceptedCurrency\n                ) >= 0\n              ) {\n                if (currencyCode === \"mUSD\") {\n                  try {\n                    var redeemValidity = await self.pools[\n                      \"mStable\"\n                    ].externalContracts.MassetValidationHelper.methods\n                      .getRedeemValidity(\n                        \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                        amount,\n                        self.internalTokens[acceptedCurrency].address\n                      )\n                      .call();\n                  } catch (err) {\n                    console.error(\"Failed to check mUSD redeem validity:\", err);\n                    continue;\n                  }\n\n                  if (!redeemValidity || !redeemValidity[\"0\"]) continue;\n                  mStableOutputAmountAfterFeeBN = Web3.utils.toBN(\n                    redeemValidity[\"2\"]\n                  );\n                } else {\n                  try {\n                    var maxSwap = await self.pools[\n                      \"mStable\"\n                    ].externalContracts.MassetValidationHelper.methods\n                      .getMaxSwap(\n                        \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                        self.internalTokens[currencyCode].address,\n                        self.internalTokens[acceptedCurrency].address\n                      )\n                      .call();\n                  } catch (err) {\n                    console.error(\"Failed to check mUSD max swap:\", err);\n                    continue;\n                  }\n\n                  if (\n                    !maxSwap ||\n                    !maxSwap[\"0\"] ||\n                    amount.gt(Web3.utils.toBN(maxSwap[\"2\"]))\n                  )\n                    continue;\n                  var outputAmountBeforeFeesBN = amount\n                    .mul(\n                      Web3.utils.toBN(\n                        10 ** self.internalTokens[acceptedCurrency].decimals\n                      )\n                    )\n                    .div(\n                      Web3.utils.toBN(\n                        10 ** self.internalTokens[currencyCode].decimals\n                      )\n                    );\n\n                  if (acceptedCurrency === \"mUSD\")\n                    mStableOutputAmountAfterFeeBN = outputAmountBeforeFeesBN;\n                  else {\n                    var swapFeeBN = await self.pools[\n                      \"mStable\"\n                    ].getMUsdSwapFeeBN();\n                    mStableOutputAmountAfterFeeBN = outputAmountBeforeFeesBN.sub(\n                      outputAmountBeforeFeesBN\n                        .mul(swapFeeBN)\n                        .div(Web3.utils.toBN(1e18))\n                    );\n                  }\n                }\n\n                mStableOutputCurrency = acceptedCurrency;\n                break;\n              }\n          }\n\n          // Ideally mStable, but 0x works too\n          if (mStableOutputCurrency !== null) {\n            // Get USD amount added to sender's fund balance\n            var allBalances = await self.cache.getOrUpdate(\n              \"allBalances\",\n              self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n                .call\n            );\n            var outputAmountUsdBN = mStableOutputAmountAfterFeeBN\n              .mul(\n                Web3.utils.toBN(\n                  allBalances[\"4\"][\n                    self.allocations.CURRENCIES.indexOf(mStableOutputCurrency)\n                  ]\n                )\n              )\n              .div(\n                Web3.utils\n                  .toBN(10)\n                  .pow(\n                    Web3.utils.toBN(\n                      self.internalTokens[mStableOutputCurrency].decimals\n                    )\n                  )\n              );\n\n            // Check outputAmountUsdBN against minUsdAmount\n            if (\n              typeof minUsdAmount !== \"undefined\" &&\n              minUsdAmount !== null &&\n              outputAmountUsdBN.lt(minUsdAmount)\n            )\n              return [outputAmountUsdBN];\n\n            // Approve tokens to RariFundProxy\n            try {\n              var allowanceBN = Web3.utils.toBN(\n                await self.internalTokens[currencyCode].contract.methods\n                  .allowance(\n                    options.from,\n                    self.contracts.RariFundProxy.options.address\n                  )\n                  .call()\n              );\n              if (allowanceBN.lt(amount)) {\n                if (\n                  allowanceBN.gt(Web3.utils.toBN(0)) &&\n                  currencyCode === \"USDT\"\n                )\n                  await self.internalTokens[currencyCode].contract.methods\n                    .approve(self.contracts.RariFundProxy.options.address, \"0\")\n                    .send(options);\n                var approvalReceipt = await self.internalTokens[\n                  currencyCode\n                ].contract.methods\n                  .approve(self.contracts.RariFundProxy.options.address, amount)\n                  .send(options);\n              }\n            } catch (err) {\n              throw new Error(\n                \"Failed to approve tokens to RariFundProxy: \" +\n                  (err.message ? err.message : err)\n              );\n            }\n\n            // Exchange and deposit tokens via mStable via RariFundProxy\n            try {\n              var receipt = await self.contracts.RariFundProxy.methods[\n                \"exchangeAndDeposit(string,uint256,string)\"\n              ](currencyCode, amount, mStableOutputCurrency).send(options);\n            } catch (err) {\n              throw new Error(\n                \"RariFundProxy.exchangeAndDeposit failed: \" +\n                  (err.message ? err.message : err)\n              );\n            }\n\n            self.cache.clear(\"allBalances\");\n            return [\n              mStableOutputAmountAfterFeeBN,\n              null,\n              approvalReceipt,\n              receipt,\n            ];\n          } else {\n            // Use first accepted currency for 0x\n            var acceptedCurrency = directlyDepositableCurrencyCodes[0];\n\n            // Get orders from 0x swap API\n            try {\n              var [\n                orders,\n                inputFilledAmountBN,\n                protocolFee,\n                takerAssetFilledAmountBN,\n                makerAssetFilledAmountBN,\n                gasPrice,\n              ] = await get0xSwapOrders(\n                currencyCode === \"ETH\"\n                  ? \"WETH\"\n                  : allTokens[currencyCode].address,\n                allTokens[acceptedCurrency].address,\n                amount\n              );\n            } catch (err) {\n              throw new Error(\"Failed to get swap orders from 0x API: \" + err);\n            }\n\n            // Get USD amount added to sender's fund balance\n            var allBalances = await self.cache.getOrUpdate(\n              \"allBalances\",\n              self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n                .call\n            );\n            var makerAssetFilledAmountUsdBN = makerAssetFilledAmountBN\n              .mul(\n                Web3.utils.toBN(\n                  allBalances[\"4\"][\n                    self.allocations.CURRENCIES.indexOf(acceptedCurrency)\n                  ]\n                )\n              )\n              .div(\n                Web3.utils\n                  .toBN(10)\n                  .pow(\n                    Web3.utils.toBN(\n                      self.internalTokens[acceptedCurrency].decimals\n                    )\n                  )\n              );\n\n            // Make sure input amount is completely filled\n            if (inputFilledAmountBN.lt(amount))\n              throw new Error(\n                \"Unable to find enough liquidity to exchange \" +\n                  currencyCode +\n                  \" before depositing.\"\n              );\n\n            // Multiply protocol fee by 1.5 to account for user upping the gas price\n            var protocolFeeBN = Web3.utils.toBN(protocolFee).muln(15).divn(10);\n\n            // Make sure we have enough ETH for the protocol fee\n            var ethBalanceBN =\n              currencyCode == \"ETH\"\n                ? accountBalanceBN\n                : Web3.utils.toBN(await self.web3.eth.getBalance(options.from));\n            if (\n              protocolFeeBN.gt(\n                currencyCode === \"ETH\" ? ethBalanceBN.sub(amount) : ethBalanceBN\n              )\n            )\n              throw new Error(\n                \"ETH balance too low to cover 0x exchange protocol fee.\"\n              );\n\n            // Check makerAssetFilledAmountUsdBN against minUsdAmount\n            if (\n              typeof minUsdAmount !== \"undefined\" &&\n              minUsdAmount !== null &&\n              makerAssetFilledAmountUsdBN.lt(minUsdAmount)\n            )\n              return [makerAssetFilledAmountUsdBN];\n\n            // Approve tokens to RariFundProxy if token is not ETH\n            if (currencyCode !== \"ETH\")\n              try {\n                var allowanceBN = Web3.utils.toBN(\n                  await allTokens[currencyCode].contract.methods\n                    .allowance(\n                      options.from,\n                      self.contracts.RariFundProxy.options.address\n                    )\n                    .call()\n                );\n                if (allowanceBN.lt(amount)) {\n                  if (\n                    allowanceBN.gt(Web3.utils.toBN(0)) &&\n                    currencyCode === \"USDT\"\n                  )\n                    await allTokens[currencyCode].contract.methods\n                      .approve(\n                        self.contracts.RariFundProxy.options.address,\n                        \"0\"\n                      )\n                      .send(options);\n                  var approvalReceipt = await allTokens[\n                    currencyCode\n                  ].contract.methods\n                    .approve(\n                      self.contracts.RariFundProxy.options.address,\n                      amount\n                    )\n                    .send(options);\n                }\n              } catch (err) {\n                throw new Error(\n                  \"Failed to approve tokens to RariFundProxy: \" +\n                    (err.message ? err.message : err)\n                );\n              }\n\n            // Build array of orders and signatures\n            var signatures = [];\n\n            for (var j = 0; j < orders.length; j++) {\n              signatures[j] = orders[j].signature;\n\n              orders[j] = {\n                makerAddress: orders[j].makerAddress,\n                takerAddress: orders[j].takerAddress,\n                feeRecipientAddress: orders[j].feeRecipientAddress,\n                senderAddress: orders[j].senderAddress,\n                makerAssetAmount: orders[j].makerAssetAmount,\n                takerAssetAmount: orders[j].takerAssetAmount,\n                makerFee: orders[j].makerFee,\n                takerFee: orders[j].takerFee,\n                expirationTimeSeconds: orders[j].expirationTimeSeconds,\n                salt: orders[j].salt,\n                makerAssetData: orders[j].makerAssetData,\n                takerAssetData: orders[j].takerAssetData,\n                makerFeeAssetData: orders[j].makerFeeAssetData,\n                takerFeeAssetData: orders[j].takerFeeAssetData,\n              };\n            }\n\n            // Exchange and deposit tokens via RariFundProxy\n            try {\n              var receipt = await self.contracts.RariFundProxy.methods\n                .exchangeAndDeposit(\n                  currencyCode === \"ETH\"\n                    ? \"0x0000000000000000000000000000000000000000\"\n                    : allTokens[currencyCode].address,\n                  amount,\n                  acceptedCurrency,\n                  orders,\n                  signatures,\n                  takerAssetFilledAmountBN\n                )\n                .send(\n                  Object.assign(\n                    {\n                      value:\n                        currencyCode === \"ETH\"\n                          ? protocolFeeBN.add(amount).toString()\n                          : protocolFeeBN.toString(),\n                      gasPrice: gasPrice,\n                    },\n                    options\n                  )\n                );\n            } catch (err) {\n              throw new Error(\n                \"RariFundProxy.exchangeAndDeposit failed: \" +\n                  (err.message ? err.message : err)\n              );\n            }\n\n            self.cache.clear(\"allBalances\");\n            return [\n              makerAssetFilledAmountUsdBN,\n              protocolFeeBN,\n              approvalReceipt,\n              receipt,\n            ];\n          }\n        }\n      },\n    };\n\n    this.withdrawals = {\n      getWithdrawalCurrencies: async function () {\n        var currencyCodes = self.allocations.CURRENCIES.slice();\n        currencyCodes.push(\"ETH\");\n        var allTokens = await self.getAllTokens();\n        for (const currencyCode of Object.keys(allTokens))\n          if (currencyCodes.indexOf(currencyCode) < 0)\n            currencyCodes.push(currencyCode);\n        return currencyCodes;\n      },\n      getWithdrawalCurrenciesWithoutSlippage: async function () {\n        return await self.allocations.getRawCurrencyAllocations();\n      },\n      getMaxWithdrawalAmount: async function (currencyCode, senderUsdBalance) {\n        var allTokens = await self.getAllTokens();\n        if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n          throw new Error(\"Invalid currency code!\");\n        if (!senderUsdBalance || senderUsdBalance.lte(Web3.utils.toBN(0)))\n          return [Web3.utils.toBN(0)];\n\n        // Get user fund balance\n        if (senderUsdBalance === undefined)\n          senderUsdBalance = Web3.utils.toBN(\n            await self.contracts.RariFundManager.methods\n              .balanceOf(sender)\n              .call()\n          );\n\n        // Check balances to find withdrawal source\n        var allBalances = await self.cache.getOrUpdate(\n          \"allBalances\",\n          self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n            .call\n        );\n\n        // See how much we can withdraw directly if token is supported by the fund\n        var i = allBalances[\"0\"].indexOf(currencyCode);\n        var tokenRawFundBalanceBN = Web3.utils.toBN(0);\n\n        if (i >= 0) {\n          tokenRawFundBalanceBN = Web3.utils.toBN(allBalances[\"1\"][i]);\n          for (var j = 0; j < allBalances[\"3\"][i].length; j++)\n            tokenRawFundBalanceBN.iadd(Web3.utils.toBN(allBalances[\"3\"][i][j]));\n        }\n\n        if (tokenRawFundBalanceBN.gt(Web3.utils.toBN(0))) {\n          var maxWithdrawalAmountBN = senderUsdBalance\n            .mul(\n              Web3.utils\n                .toBN(10)\n                .pow(\n                  Web3.utils.toBN(self.internalTokens[currencyCode].decimals)\n                )\n            )\n            .div(\n              Web3.utils.toBN(\n                allBalances[\"4\"][\n                  self.allocations.CURRENCIES.indexOf(currencyCode)\n                ]\n              )\n            );\n\n          if (\n            maxWithdrawalAmountBN\n              .mul(\n                Web3.utils.toBN(\n                  allBalances[\"4\"][\n                    self.allocations.CURRENCIES.indexOf(currencyCode)\n                  ]\n                )\n              )\n              .div(\n                Web3.utils\n                  .toBN(10)\n                  .pow(\n                    Web3.utils.toBN(self.internalTokens[currencyCode].decimals)\n                  )\n              )\n              .gt(senderUsdBalance)\n          )\n            maxWithdrawalAmountBN.isubn(1);\n\n          // If tokenRawFundBalanceBN >= maxWithdrawalAmountBN, return maxWithdrawalAmountBN\n          if (tokenRawFundBalanceBN.gte(maxWithdrawalAmountBN))\n            return [maxWithdrawalAmountBN];\n        }\n\n        // Otherwise, exchange as few currencies as possible (ideally those with the lowest balances)\n        var amountInputtedUsdBN = Web3.utils.toBN(0);\n        var amountWithdrawnBN = Web3.utils.toBN(0);\n        var totalProtocolFeeBN = Web3.utils.toBN(0);\n\n        // Withdraw as much as we can of the output token first\n        if (tokenRawFundBalanceBN.gt(Web3.utils.toBN(0))) {\n          amountInputtedUsdBN.iadd(\n            tokenRawFundBalanceBN\n              .mul(\n                Web3.utils.toBN(\n                  allBalances[\"4\"][\n                    self.allocations.CURRENCIES.indexOf(currencyCode)\n                  ]\n                )\n              )\n              .div(\n                Web3.utils\n                  .toBN(10)\n                  .pow(\n                    Web3.utils.toBN(self.internalTokens[currencyCode].decimals)\n                  )\n              )\n          );\n          amountWithdrawnBN.iadd(tokenRawFundBalanceBN);\n        }\n\n        // Get input candidates\n        var inputCandidates = [];\n\n        for (var i = 0; i < allBalances[\"0\"].length; i++) {\n          var inputCurrencyCode = allBalances[\"0\"][i];\n          if (inputCurrencyCode !== currencyCode) {\n            var rawFundBalanceBN = Web3.utils.toBN(allBalances[\"1\"][i]);\n            for (var j = 0; j < allBalances[\"3\"][i].length; j++)\n              rawFundBalanceBN.iadd(Web3.utils.toBN(allBalances[\"3\"][i][j]));\n\n            if (rawFundBalanceBN.gt(Web3.utils.toBN(0))) {\n              inputCandidates.push({\n                currencyCode: inputCurrencyCode,\n                rawFundBalanceBN,\n              });\n            }\n          }\n        }\n\n        // Calculate max inputs\n        function updateMaxInputs() {\n          var inputCandidates2 = [];\n\n          for (const inputCandidate of inputCandidates) {\n            // Calculate inputAmountBN as maximum of sender USD balance left and rawFundBalanceBN\n            var usdAmountLeft = senderUsdBalance.sub(amountInputtedUsdBN);\n            var maxInputAmountLeftBN = usdAmountLeft\n              .mul(\n                Web3.utils\n                  .toBN(10)\n                  .pow(\n                    Web3.utils.toBN(\n                      self.internalTokens[inputCandidate.currencyCode].decimals\n                    )\n                  )\n              )\n              .div(\n                Web3.utils.toBN(\n                  allBalances[\"4\"][\n                    self.allocations.CURRENCIES.indexOf(\n                      inputCandidate.currencyCode\n                    )\n                  ]\n                )\n              );\n            if (\n              maxInputAmountLeftBN\n                .mul(\n                  Web3.utils.toBN(\n                    allBalances[\"4\"][\n                      self.allocations.CURRENCIES.indexOf(\n                        inputCandidate.currencyCode\n                      )\n                    ]\n                  )\n                )\n                .div(\n                  Web3.utils\n                    .toBN(10)\n                    .pow(\n                      Web3.utils.toBN(\n                        self.internalTokens[inputCandidate.currencyCode]\n                          .decimals\n                      )\n                    )\n                )\n                .gt(usdAmountLeft)\n            )\n              maxInputAmountLeftBN.isubn(1);\n            var inputAmountBN = Web3.utils.BN.min(\n              maxInputAmountLeftBN,\n              inputCandidate.rawFundBalanceBN\n            );\n\n            if (inputAmountBN.gt(Web3.utils.toBN(0)))\n              inputCandidates2.push({\n                currencyCode: inputCandidate.currencyCode,\n                rawFundBalanceBN: inputCandidate.rawFundBalanceBN,\n                inputAmountBN,\n              });\n          }\n\n          inputCandidates = inputCandidates2;\n        }\n\n        updateMaxInputs();\n\n        // TODO: Sort candidates from lowest to highest inputAmountUsdBN (or highest to lowest inputAmountUsdBN?)\n        /* inputCandidates.sort((a, b) =>\n          a.inputAmountUsdBN.gt(b.inputAmountUsdBN) ? 1 : -1\n        ); */\n\n        // mStable\n        if (\n          currencyCode === \"mUSD\" ||\n          MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(currencyCode) >=\n            0\n        ) {\n          var mStableSwapFeeBN = null;\n\n          for (var i = 0; i < inputCandidates.length; i++) {\n            if (\n              inputCandidates[i].currencyCode !== \"mUSD\" &&\n              MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(\n                inputCandidates[i].currencyCode\n              ) < 0\n            )\n              continue;\n\n            var mStableInputAmountBN = inputCandidates[i].inputAmountBN;\n            var mStableOutputAmountAfterFeesBN = Web3.utils.toBN(0);\n\n            // Check max swap/redeem validity\n            if (inputCandidates[i].currencyCode === \"mUSD\") {\n              try {\n                var redeemValidity = await self.pools[\n                  \"mStable\"\n                ].externalContracts.MassetValidationHelper.methods\n                  .getRedeemValidity(\n                    \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                    mStableInputAmountBN,\n                    self.internalTokens[currencyCode].address\n                  )\n                  .call();\n              } catch (err) {\n                console.error(\"Failed to check mUSD redeem validity:\", err);\n                continue;\n              }\n\n              if (!redeemValidity || !redeemValidity[\"0\"]) continue;\n              mStableOutputAmountAfterFeesBN = Web3.utils.toBN(\n                redeemValidity[\"2\"]\n              );\n            } else {\n              try {\n                var maxSwap = await self.pools[\n                  \"mStable\"\n                ].externalContracts.MassetValidationHelper.methods\n                  .getMaxSwap(\n                    \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                    self.internalTokens[inputCandidates[i].currencyCode]\n                      .address,\n                    self.internalTokens[currencyCode].address\n                  )\n                  .call();\n              } catch (err) {\n                console.error(\"Failed to check mUSD max swap:\", err);\n                continue;\n              }\n\n              if (\n                !maxSwap ||\n                !maxSwap[\"0\"] ||\n                Web3.utils.toBN(maxSwap[\"2\"]).lte(Web3.utils.toBN(0))\n              )\n                continue;\n              mStableInputAmountBN = Web3.utils.BN.min(\n                mStableInputAmountBN,\n                Web3.utils.toBN(maxSwap[\"2\"])\n              );\n              var outputAmountBeforeFeesBN = mStableInputAmountBN\n                .mul(\n                  Web3.utils.toBN(\n                    10 ** self.internalTokens[currencyCode].decimals\n                  )\n                )\n                .div(\n                  Web3.utils.toBN(\n                    10 **\n                      self.internalTokens[inputCandidates[i].currencyCode]\n                        .decimals\n                  )\n                );\n\n              if (currencyCode === \"mUSD\")\n                mStableOutputAmountAfterFeesBN = outputAmountBeforeFeesBN;\n              else {\n                if (mStableSwapFeeBN === null)\n                  mStableSwapFeeBN = await self.pools[\n                    \"mStable\"\n                  ].getMUsdSwapFeeBN();\n                mStableOutputAmountAfterFeesBN = outputAmountBeforeFeesBN.sub(\n                  outputAmountBeforeFeesBN\n                    .mul(mStableSwapFeeBN)\n                    .div(Web3.utils.toBN(1e18))\n                );\n              }\n            }\n\n            amountInputtedUsdBN.iadd(\n              mStableInputAmountBN\n                .mul(\n                  Web3.utils.toBN(\n                    allBalances[\"4\"][\n                      self.allocations.CURRENCIES.indexOf(\n                        inputCandidates[i].currencyCode\n                      )\n                    ]\n                  )\n                )\n                .div(\n                  Web3.utils\n                    .toBN(10)\n                    .pow(\n                      Web3.utils.toBN(\n                        self.internalTokens[inputCandidates[i].currencyCode]\n                          .decimals\n                      )\n                    )\n                )\n            );\n            amountWithdrawnBN.iadd(mStableOutputAmountAfterFeesBN);\n\n            // Update inputCandidates\n            updateMaxInputs();\n\n            // Stop if we have filled the USD amount\n            if (amountInputtedUsdBN.gt(senderUsdBalance))\n              throw new Error(\n                \"Amount inputted in USD greater than sender USD fund balance\"\n              );\n            if (\n              amountInputtedUsdBN.gte(\n                senderUsdBalance.sub(Web3.utils.toBN(1e16))\n              )\n            )\n              break;\n          }\n        }\n\n        // Use 0x if necessary\n        // Deal with amountInputtedUsdBN.lt(senderUsdBalance) not being accurate better than 1 cent margin of error\n        if (\n          amountInputtedUsdBN.lt(senderUsdBalance.sub(Web3.utils.toBN(1e16))) &&\n          inputCandidates.length > 0\n        ) {\n          // Get orders from 0x swap API for each input currency candidate\n          for (var i = 0; i < inputCandidates.length; i++) {\n            try {\n              var [\n                orders,\n                inputFilledAmountBN,\n                protocolFee,\n                takerAssetFilledAmountBN,\n                makerAssetFilledAmountBN,\n                gasPrice,\n              ] = await get0xSwapOrders(\n                self.internalTokens[inputCandidates[i].currencyCode].address,\n                currencyCode === \"ETH\"\n                  ? \"WETH\"\n                  : allTokens[currencyCode].address,\n                inputCandidates[i].inputAmountBN\n              );\n            } catch (err) {\n              if (err === \"Insufficient liquidity\") {\n                inputCandidates.splice(i, 1);\n                i--;\n                continue;\n              }\n\n              throw new Error(\"Failed to get swap orders from 0x API: \" + err);\n            }\n\n            inputCandidates[i].inputFillAmountBN = inputFilledAmountBN;\n            inputCandidates[i].protocolFeeBN = Web3.utils\n              .toBN(protocolFee)\n              .muln(15)\n              .divn(10); // Multiply protocol fee by 1.5 to account for user upping the gas price\n            inputCandidates[\n              i\n            ].takerAssetFillAmountBN = takerAssetFilledAmountBN;\n            inputCandidates[\n              i\n            ].makerAssetFillAmountBN = makerAssetFilledAmountBN;\n            inputCandidates[\n              i\n            ].takerAssetFillAmountUsdBN = takerAssetFilledAmountBN\n              .mul(\n                Web3.utils.toBN(\n                  allBalances[\"4\"][\n                    self.allocations.CURRENCIES.indexOf(\n                      inputCandidates[i].currencyCode\n                    )\n                  ]\n                )\n              )\n              .div(\n                Web3.utils\n                  .toBN(10)\n                  .pow(\n                    Web3.utils.toBN(\n                      self.internalTokens[inputCandidates[i].currencyCode]\n                        .decimals\n                    )\n                  )\n              );\n          }\n\n          // Sort candidates from highest to lowest output per USD burned\n          inputCandidates.sort((a, b) =>\n            b.makerAssetFillAmountBN\n              .mul(Web3.utils.toBN(1e18))\n              .div(b.takerAssetFillAmountUsdBN)\n              .gt(\n                a.makerAssetFillAmountBN\n                  .mul(Web3.utils.toBN(1e18))\n                  .div(a.takerAssetFillAmountUsdBN)\n              )\n              ? 1\n              : -1\n          );\n\n          // Loop through input currency candidates until we fill the withdrawal\n          for (var i = 0; i < inputCandidates.length; i++) {\n            // Is this order enough to cover the rest of the withdrawal?\n            var usdAmountLeft = senderUsdBalance.sub(amountInputtedUsdBN);\n            var inputFillAmountUsdBN = inputCandidates[i].inputFillAmountBN\n              .mul(\n                Web3.utils.toBN(\n                  allBalances[\"4\"][\n                    self.allocations.CURRENCIES.indexOf(\n                      inputCandidates[i].currencyCode\n                    )\n                  ]\n                )\n              )\n              .div(\n                Web3.utils\n                  .toBN(10)\n                  .pow(\n                    Web3.utils.toBN(\n                      self.internalTokens[inputCandidates[i].currencyCode]\n                        .decimals\n                    )\n                  )\n              );\n            if (\n              inputFillAmountUsdBN.gte(usdAmountLeft.sub(Web3.utils.toBN(1e16)))\n            ) {\n              // If order is enough to cover the rest of the withdrawal, cover it and stop looping through input candidates\n              var thisInputAmountBN = inputCandidates[i].inputFillAmountBN\n                .mul(usdAmountLeft)\n                .div(inputFillAmountUsdBN);\n              var thisOutputAmountBN = inputCandidates[i].makerAssetFillAmountBN\n                .mul(usdAmountLeft)\n                .div(inputFillAmountUsdBN);\n\n              amountInputtedUsdBN.iadd(\n                thisInputAmountBN\n                  .mul(\n                    Web3.utils.toBN(\n                      allBalances[\"4\"][\n                        self.allocations.CURRENCIES.indexOf(\n                          inputCandidates[i].currencyCode\n                        )\n                      ]\n                    )\n                  )\n                  .div(\n                    Web3.utils\n                      .toBN(10)\n                      .pow(\n                        Web3.utils.toBN(\n                          self.internalTokens[inputCandidates[i].currencyCode]\n                            .decimals\n                        )\n                      )\n                  )\n              );\n              amountWithdrawnBN.iadd(thisOutputAmountBN);\n              totalProtocolFeeBN.iadd(inputCandidates[i].protocolFeeBN);\n\n              break;\n            } else {\n              // Otherwise, add the whole order and keep looping through input candidates\n              amountInputtedUsdBN.iadd(\n                inputCandidates[i].inputFillAmountBN\n                  .mul(\n                    Web3.utils.toBN(\n                      allBalances[\"4\"][\n                        self.allocations.CURRENCIES.indexOf(\n                          inputCandidates[i].currencyCode\n                        )\n                      ]\n                    )\n                  )\n                  .div(\n                    Web3.utils\n                      .toBN(10)\n                      .pow(\n                        Web3.utils.toBN(\n                          self.internalTokens[inputCandidates[i].currencyCode]\n                            .decimals\n                        )\n                      )\n                  )\n              );\n              amountWithdrawnBN.iadd(inputCandidates[i].makerAssetFillAmountBN);\n              totalProtocolFeeBN.iadd(inputCandidates[i].protocolFeeBN);\n            }\n\n            // Stop if we have filled the USD amount\n            if (amountInputtedUsdBN.gt(senderUsdBalance))\n              throw new Error(\n                \"Amount inputted in USD greater than sender USD fund balance\"\n              );\n            if (\n              amountInputtedUsdBN.gte(\n                senderUsdBalance.sub(Web3.utils.toBN(1e16))\n              )\n            )\n              break;\n          }\n\n          // Make sure input amount is completely filled\n          if (\n            amountInputtedUsdBN.lt(senderUsdBalance.sub(Web3.utils.toBN(1e16)))\n          )\n            throw new Error(\n              \"Unable to find enough liquidity to exchange withdrawn tokens to \" +\n                currencyCode +\n                \".\"\n            );\n        }\n\n        // Return amountWithdrawnBN and totalProtocolFeeBN\n        return [amountWithdrawnBN, totalProtocolFeeBN];\n      },\n      validateWithdrawal: async function (\n        currencyCode,\n        amount,\n        sender,\n        getSlippage\n      ) {\n        var allTokens = await self.getAllTokens();\n        if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n          throw new Error(\"Invalid currency code!\");\n        if (!amount || amount.lte(Web3.utils.toBN(0)))\n          throw new Error(\"Withdrawal amount must be greater than 0!\");\n\n        // Check balances to find withdrawal source\n        var allBalances = await self.cache.getOrUpdate(\n          \"allBalances\",\n          self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n            .call\n        );\n\n        // See how much we can withdraw directly if token is supported by the fund\n        var i = allBalances[\"0\"].indexOf(currencyCode);\n        var tokenRawFundBalanceBN = Web3.utils.toBN(0);\n\n        if (i >= 0) {\n          tokenRawFundBalanceBN = Web3.utils.toBN(allBalances[\"1\"][i]);\n          for (var j = 0; j < allBalances[\"3\"][i].length; j++)\n            tokenRawFundBalanceBN.iadd(Web3.utils.toBN(allBalances[\"3\"][i][j]));\n        }\n\n        if (tokenRawFundBalanceBN.gte(amount)) {\n          var amountUsdBN = amount\n            .mul(\n              Web3.utils.toBN(\n                allBalances[\"4\"][\n                  self.allocations.CURRENCIES.indexOf(currencyCode)\n                ]\n              )\n            )\n            .div(\n              Web3.utils\n                .toBN(10)\n                .pow(\n                  Web3.utils.toBN(self.internalTokens[currencyCode].decimals)\n                )\n            );\n\n          // Check amountUsdBN against user fund balance\n          var senderUsdBalance = Web3.utils.toBN(\n            await self.contracts.RariFundManager.methods\n              .balanceOf(sender)\n              .call()\n          );\n\n          if (amountUsdBN.gt(senderUsdBalance))\n            throw new Error(\n              \"Requested withdrawal amount is greater than the sender's \" +\n                self.POOL_NAME +\n                \" balance. Please click the max button and try again (or reload and try again later if the issue persists).\"\n            );\n\n          // Return amountUsdBN\n          return [amountUsdBN, null, Web3.utils.toBN(0)];\n        } else {\n          // Otherwise, exchange as few currencies as possible (ideally those with the lowest balances)\n          var amountInputtedUsdBN = Web3.utils.toBN(0);\n          var amountWithdrawnBN = Web3.utils.toBN(0);\n          var totalProtocolFeeBN = Web3.utils.toBN(0);\n\n          // Withdraw as much as we can of the output token first\n          if (tokenRawFundBalanceBN.gt(Web3.utils.toBN(0))) {\n            amountInputtedUsdBN.iadd(\n              tokenRawFundBalanceBN\n                .mul(\n                  Web3.utils.toBN(\n                    allBalances[\"4\"][\n                      self.allocations.CURRENCIES.indexOf(currencyCode)\n                    ]\n                  )\n                )\n                .div(\n                  Web3.utils\n                    .toBN(10)\n                    .pow(\n                      Web3.utils.toBN(\n                        self.internalTokens[currencyCode].decimals\n                      )\n                    )\n                )\n            );\n            amountWithdrawnBN.iadd(tokenRawFundBalanceBN);\n          }\n\n          // Get input candidates\n          var inputCandidates = [];\n\n          for (var i = 0; i < allBalances[\"0\"].length; i++)\n            if (allBalances[\"0\"][i] !== currencyCode) {\n              var rawFundBalanceBN = Web3.utils.toBN(0);\n              for (var j = 0; j < allBalances[\"3\"][i].length; j++)\n                rawFundBalanceBN.iadd(Web3.utils.toBN(allBalances[\"3\"][i][j]));\n              if (rawFundBalanceBN.gt(Web3.utils.toBN(0)))\n                inputCandidates.push({\n                  currencyCode: allBalances[\"0\"][i],\n                  rawFundBalanceBN,\n                });\n            }\n\n          // TODO: Sort candidates from lowest to highest rawFundBalanceUsdBN (or highest to lowest?)\n          /* inputCandidates.sort((a, b) =>\n            a.rawFundBalanceUsdBN.gt(b.rawFundBalanceUsdBN) ? 1 : -1\n          ); */\n\n          // mStable\n\n          if (\n            currencyCode === \"mUSD\" ||\n            MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(\n              currencyCode\n            ) >= 0\n          ) {\n            var mStableSwapFeeBN = null;\n\n            for (var i = 0; i < inputCandidates.length; i++) {\n              if (\n                inputCandidates[i].currencyCode !== \"mUSD\" &&\n                MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(\n                  inputCandidates[i].currencyCode\n                ) < 0\n              )\n                continue;\n\n              // Get swap fee and calculate input amount needed to fill output amount\n              if (currencyCode !== \"mUSD\" && mStableSwapFeeBN === null)\n                mStableSwapFeeBN = await self.pools[\n                  \"mStable\"\n                ].getMUsdSwapFeeBN();\n              var inputAmountBN = amount\n                .sub(amountWithdrawnBN)\n                .mul(Web3.utils.toBN(1e18))\n                .div(Web3.utils.toBN(1e18).sub(mStableSwapFeeBN))\n                .mul(\n                  Web3.utils.toBN(\n                    10 **\n                      self.internalTokens[inputCandidates[i].currencyCode]\n                        .decimals\n                  )\n                )\n                .div(Web3.utils.toBN(10 ** allTokens[currencyCode].decimals));\n              var outputAmountBeforeFeesBN = inputAmountBN\n                .mul(Web3.utils.toBN(10 ** allTokens[currencyCode].decimals))\n                .div(\n                  Web3.utils.toBN(\n                    10 **\n                      self.internalTokens[inputCandidates[i].currencyCode]\n                        .decimals\n                  )\n                );\n              var outputAmountBN =\n                currencyCode === \"mUSD\"\n                  ? outputAmountBeforeFeesBN\n                  : outputAmountBeforeFeesBN.sub(\n                      outputAmountBeforeFeesBN\n                        .mul(mStableSwapFeeBN)\n                        .div(Web3.utils.toBN(1e18))\n                    );\n\n              var tries = 0;\n              while (outputAmountBN.lt(amount.sub(amountWithdrawnBN))) {\n                if (tries >= 1000)\n                  throw new Error(\n                    \"Failed to get increment order input amount to achieve desired output amount.\"\n                  );\n                inputAmountBN.iadd(Web3.utils.toBN(1)); // Make sure we have enough input amount to receive amount.sub(amountWithdrawnBN)\n                outputAmountBeforeFeesBN = inputAmountBN\n                  .mul(Web3.utils.toBN(10 ** allTokens[currencyCode].decimals))\n                  .div(\n                    Web3.utils.toBN(\n                      10 **\n                        self.internalTokens[inputCandidates[i].currencyCode]\n                          .decimals\n                    )\n                  );\n                outputAmountBN =\n                  currencyCode === \"mUSD\"\n                    ? outputAmountBeforeFeesBN\n                    : outputAmountBeforeFeesBN.sub(\n                        outputAmountBeforeFeesBN\n                          .mul(mStableSwapFeeBN)\n                          .div(Web3.utils.toBN(1e18))\n                      );\n                tries++;\n              }\n\n              if (inputAmountBN.gt(inputCandidates[i].rawFundBalanceBN)) {\n                inputAmountBN = inputCandidates[i].rawFundBalanceBN;\n                outputAmountBeforeFeesBN = inputAmountBN\n                  .mul(Web3.utils.toBN(10 ** allTokens[currencyCode].decimals))\n                  .div(\n                    Web3.utils.toBN(\n                      10 **\n                        self.internalTokens[inputCandidates[i].currencyCode]\n                          .decimals\n                    )\n                  );\n                outputAmountBN =\n                  currencyCode === \"mUSD\"\n                    ? outputAmountBeforeFeesBN\n                    : outputAmountBeforeFeesBN.sub(\n                        outputAmountBeforeFeesBN\n                          .mul(mStableSwapFeeBN)\n                          .div(Web3.utils.toBN(1e18))\n                      );\n              }\n\n              // Check max swap/redeem validity\n              if (inputCandidates[i].currencyCode === \"mUSD\") {\n                try {\n                  var redeemValidity = await self.pools[\n                    \"mStable\"\n                  ].externalContracts.MassetValidationHelper.methods\n                    .getRedeemValidity(\n                      \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                      inputAmountBN,\n                      self.internalTokens[currencyCode].address\n                    )\n                    .call();\n                } catch (err) {\n                  console.error(\"Failed to check mUSD redeem validity:\", err);\n                  continue;\n                }\n\n                if (!redeemValidity || !redeemValidity[\"0\"]) continue;\n                if (!outputAmountBN.eq(Web3.utils.toBN(redeemValidity[\"2\"])))\n                  throw new Error(\n                    \"Predicted mStable output amount and output amount returned by getRedeemValidity not equal.\"\n                  );\n              } else {\n                try {\n                  var maxSwap = await self.pools[\n                    \"mStable\"\n                  ].externalContracts.MassetValidationHelper.methods\n                    .getMaxSwap(\n                      \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                      self.internalTokens[inputCandidates[i].currencyCode]\n                        .address,\n                      self.internalTokens[currencyCode].address\n                    )\n                    .call();\n                } catch (err) {\n                  console.error(\"Failed to check mUSD max swap:\", err);\n                  continue;\n                }\n\n                if (\n                  !maxSwap ||\n                  !maxSwap[\"0\"] ||\n                  Web3.utils.toBN(maxSwap[\"2\"]).lt(inputAmountBN)\n                )\n                  continue;\n              }\n\n              amountInputtedUsdBN.iadd(\n                inputAmountBN\n                  .mul(\n                    Web3.utils.toBN(\n                      allBalances[\"4\"][\n                        self.allocations.CURRENCIES.indexOf(\n                          inputCandidates[i].currencyCode\n                        )\n                      ]\n                    )\n                  )\n                  .div(\n                    Web3.utils\n                      .toBN(10)\n                      .pow(\n                        Web3.utils.toBN(\n                          self.internalTokens[inputCandidates[i].currencyCode]\n                            .decimals\n                        )\n                      )\n                  )\n              );\n              amountWithdrawnBN.iadd(outputAmountBN);\n\n              inputCandidates[i].rawFundBalanceBN.isub(inputAmountBN);\n              if (inputCandidates[i].rawFundBalanceBN.isZero()) {\n                inputCandidates.splice(i, 1);\n                i--;\n              }\n\n              // Stop if we have filled the withdrawal\n              if (amountWithdrawnBN.gte(amount)) break;\n            }\n          }\n\n          // Use 0x if necessary\n          if (amountWithdrawnBN.lt(amount)) {\n            // Get orders from 0x swap API for each input currency candidate\n            for (var i = 0; i < inputCandidates.length; i++) {\n              try {\n                var [\n                  orders,\n                  inputFilledAmountBN,\n                  protocolFee,\n                  takerAssetFilledAmountBN,\n                  makerAssetFilledAmountBN,\n                  gasPrice,\n                ] = await get0xSwapOrders(\n                  self.internalTokens[inputCandidates[i].currencyCode].address,\n                  currencyCode === \"ETH\"\n                    ? \"WETH\"\n                    : allTokens[currencyCode].address,\n                  inputCandidates[i].rawFundBalanceBN,\n                  amount.sub(amountWithdrawnBN)\n                );\n              } catch (err) {\n                if (err === \"Insufficient liquidity\") {\n                  inputCandidates.splice(i, 1);\n                  i--;\n                  continue;\n                }\n\n                throw new Error(\n                  \"Failed to get swap orders from 0x API: \" + err\n                );\n              }\n\n              inputCandidates[i].inputFillAmountBN = inputFilledAmountBN;\n              inputCandidates[i].protocolFeeBN = Web3.utils\n                .toBN(protocolFee)\n                .muln(15)\n                .divn(10); // Multiply protocol fee by 1.5 to account for user upping the gas price\n              inputCandidates[\n                i\n              ].takerAssetFillAmountBN = takerAssetFilledAmountBN;\n              inputCandidates[\n                i\n              ].makerAssetFillAmountBN = makerAssetFilledAmountBN;\n              inputCandidates[\n                i\n              ].takerAssetFillAmountUsdBN = takerAssetFilledAmountBN\n                .mul(\n                  Web3.utils.toBN(\n                    allBalances[\"4\"][\n                      self.allocations.CURRENCIES.indexOf(\n                        inputCandidates[i].currencyCode\n                      )\n                    ]\n                  )\n                )\n                .div(\n                  Web3.utils\n                    .toBN(10)\n                    .pow(\n                      Web3.utils.toBN(\n                        self.internalTokens[inputCandidates[i].currencyCode]\n                          .decimals\n                      )\n                    )\n                );\n            }\n\n            // Sort candidates from highest to lowest output per USD burned\n            inputCandidates.sort((a, b) =>\n              b.makerAssetFillAmountBN\n                .mul(Web3.utils.toBN(1e18))\n                .div(b.takerAssetFillAmountUsdBN)\n                .gt(\n                  a.makerAssetFillAmountBN\n                    .mul(Web3.utils.toBN(1e18))\n                    .div(a.takerAssetFillAmountUsdBN)\n                )\n                ? 1\n                : -1\n            );\n\n            // Loop through input currency candidates until we fill the withdrawal\n            for (var i = 0; i < inputCandidates.length; i++) {\n              // Is this order enough to cover the rest of the withdrawal?\n              if (\n                inputCandidates[i].makerAssetFillAmountBN.gte(\n                  amount.sub(amountWithdrawnBN)\n                )\n              ) {\n                // If order is enough to cover the rest of the withdrawal, cover it and stop looping through input candidates\n                var thisOutputAmountBN = amount.sub(amountWithdrawnBN);\n                var thisInputAmountBN = inputCandidates[i].inputFillAmountBN\n                  .mul(thisOutputAmountBN)\n                  .div(inputCandidates[i].makerAssetFillAmountBN);\n\n                var tries = 0;\n                while (\n                  inputCandidates[i].makerAssetFillAmountBN\n                    .mul(thisInputAmountBN)\n                    .div(inputCandidates[i].inputFillAmountBN)\n                    .lt(thisOutputAmountBN)\n                ) {\n                  if (tries >= 1000)\n                    throw new Error(\n                      \"Failed to get increment order input amount to achieve desired output amount.\"\n                    );\n                  thisInputAmountBN.iadd(Web3.utils.toBN(1)); // Make sure we have enough input fill amount to achieve this maker asset fill amount\n                  tries++;\n                }\n\n                amountInputtedUsdBN.iadd(\n                  thisInputAmountBN\n                    .mul(\n                      Web3.utils.toBN(\n                        allBalances[\"4\"][\n                          self.allocations.CURRENCIES.indexOf(\n                            inputCandidates[i].currencyCode\n                          )\n                        ]\n                      )\n                    )\n                    .div(\n                      Web3.utils\n                        .toBN(10)\n                        .pow(\n                          Web3.utils.toBN(\n                            self.internalTokens[inputCandidates[i].currencyCode]\n                              .decimals\n                          )\n                        )\n                    )\n                );\n                amountWithdrawnBN.iadd(thisOutputAmountBN);\n                totalProtocolFeeBN.iadd(inputCandidates[i].protocolFeeBN);\n\n                break;\n              } else {\n                // Otherwise, add the whole order and keep looping through input candidates\n                amountInputtedUsdBN.iadd(\n                  inputCandidates[i].inputFillAmountBN\n                    .mul(\n                      Web3.utils.toBN(\n                        allBalances[\"4\"][\n                          self.allocations.CURRENCIES.indexOf(\n                            inputCandidates[i].currencyCode\n                          )\n                        ]\n                      )\n                    )\n                    .div(\n                      Web3.utils\n                        .toBN(10)\n                        .pow(\n                          Web3.utils.toBN(\n                            self.internalTokens[inputCandidates[i].currencyCode]\n                              .decimals\n                          )\n                        )\n                    )\n                );\n                amountWithdrawnBN.iadd(\n                  inputCandidates[i].makerAssetFillAmountBN\n                );\n                totalProtocolFeeBN.iadd(inputCandidates[i].protocolFeeBN);\n              }\n\n              // Stop if we have filled the withdrawal\n              if (amountWithdrawnBN.gte(amount)) break;\n            }\n\n            // Make sure input amount is completely filled\n            if (amountWithdrawnBN.lt(amount))\n              throw new Error(\n                \"Unable to find enough liquidity to exchange withdrawn tokens to \" +\n                  currencyCode +\n                  \".\"\n              );\n          }\n\n          // Check amountInputtedUsdBN against user fund balance\n          var senderUsdBalance = Web3.utils.toBN(\n            await self.contracts.RariFundManager.methods\n              .balanceOf(sender)\n              .call()\n          );\n\n          if (amountInputtedUsdBN.gt(senderUsdBalance))\n            throw new Error(\n              \"Requested withdrawal amount is greater than the sender's \" +\n                self.POOL_NAME +\n                \" balance. Please click the max button and try again (or reload and try again later if the issue persists).\"\n            );\n\n          // Return amountInputtedUsdBN\n          return [\n            amountInputtedUsdBN,\n            totalProtocolFeeBN,\n            getSlippage\n              ? await self.withdrawals.getWithdrawalSlippage(\n                  currencyCode,\n                  amount,\n                  amountInputtedUsdBN\n                )\n              : null,\n          ];\n        }\n      },\n      getWithdrawalSlippage: async function (currencyCode, amount, usdAmount) {\n        if (self.POOL_TOKEN_SYMBOL === \"RYPT\") {\n          var directlyDepositableCurrencyCodes = await self.cache.getOrUpdate(\n            \"acceptedCurrencies\",\n            self.contracts.RariFundManager.methods.getAcceptedCurrencies().call\n          );\n          if (\n            directlyDepositableCurrencyCodes &&\n            directlyDepositableCurrencyCodes.length > 0 &&\n            directlyDepositableCurrencyCodes.indexOf(currencyCode) >= 0\n          ) {\n            var allBalances = await self.cache.getOrUpdate(\n              \"allBalances\",\n              self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n                .call\n            );\n            return Web3.utils.toBN(1e18).sub(\n              amount\n                .mul(\n                  Web3.utils.toBN(\n                    allBalances[\"4\"][\n                      self.allocations.CURRENCIES.indexOf(currencyCode)\n                    ]\n                  )\n                )\n                .div(Web3.utils.toBN(1e18))\n                .mul(\n                  Web3.utils\n                    .toBN(10)\n                    .pow(\n                      Web3.utils.toBN(\n                        36 - self.internalTokens[currencyCode].decimals\n                      )\n                    )\n                )\n                .div(usdAmount)\n            );\n          }\n        } else if (self.POOL_TOKEN_SYMBOL === \"RSPT\") {\n          if (currencyCode === \"USDC\")\n            return Web3.utils\n              .toBN(1e18)\n              .sub(\n                amount\n                  .mul(Web3.utils.toBN(10).pow(Web3.utils.toBN(36 - 6)))\n                  .div(usdAmount)\n              )\n              .toString();\n          if (currencyCode === \"mUSD\")\n            return Web3.utils\n              .toBN(1e18)\n              .sub(amount.mul(Web3.utils.toBN(1e18)).div(usdAmount))\n              .toString();\n        } else if (self.POOL_TOKEN_SYMBOL === \"RDPT\") {\n          if (currencyCode === \"DAI\")\n            return Web3.utils\n              .toBN(1e18)\n              .sub(amount.mul(Web3.utils.toBN(1e18)).div(usdAmount))\n              .toString();\n        } else {\n          throw \"Not implemented for \" + self.POOL_TOKEN_SYMBOL;\n        }\n\n        // Get tokens\n        var allTokens = await self.getAllTokens();\n        if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n          throw new Error(\"Invalid currency code!\");\n\n        // Try cache\n        if (\n          self.cache._raw.coinGeckoUsdPrices &&\n          self.cache._raw.coinGeckoUsdPrices.value &&\n          self.cache._raw.coinGeckoUsdPrices.value[\"USDC\"] &&\n          self.cache._raw.coinGeckoUsdPrices.value[currencyCode] &&\n          new Date().getTime() / 1000 <=\n            self.cache._raw.coinGeckoUsdPrices.lastUpdated +\n              self.cache._raw.coinGeckoUsdPrices.timeout\n        ) {\n          if (self.POOL_TOKEN_SYMBOL === \"RSPT\")\n            usdAmount =\n              parseFloat(usdAmount.toString()) *\n              self.cache._raw.coinGeckoUsdPrices.value[\"USDC\"];\n          else if (self.POOL_TOKEN_SYMBOL === \"RDPT\")\n            usdAmount =\n              parseFloat(usdAmount.toString()) *\n              self.cache._raw.coinGeckoUsdPrices.value[\"DAI\"];\n          else usdAmount = parseFloat(usdAmount.toString());\n          return Web3.utils\n            .toBN(1e18)\n            .sub(\n              Web3.utils.toBN(\n                Math.trunc(\n                  (parseFloat(amount.toString()) *\n                    self.cache._raw.coinGeckoUsdPrices.value[currencyCode] *\n                    10 **\n                      Web3.utils.toBN(\n                        currencyCode === \"ETH\"\n                          ? 18\n                          : 36 - allTokens[currencyCode].decimals\n                      )) /\n                    usdAmount\n                )\n              )\n            );\n        }\n\n        // Build currency code array\n        var currencyCodes = [...self.allocations.CURRENCIES];\n        currencyCodes.push(currencyCode);\n\n        // Get CoinGecko IDs\n        var decoded = await self.cache.getOrUpdate(\n          \"coinGeckoList\",\n          async function () {\n            return (\n              await axios.get(\"https://api.coingecko.com/api/v3/coins/list\")\n            ).data;\n          }\n        );\n        if (!decoded)\n          throw new Error(\"Failed to decode coins list from CoinGecko\");\n        var currencyCodesByCoinGeckoIds = {};\n\n        for (const currencyCode of currencyCodes) {\n          var filtered = decoded.filter(\n            (coin) => coin.symbol.toLowerCase() === currencyCode.toLowerCase()\n          );\n          if (!filtered)\n            throw new Error(\"Failed to get currency IDs from CoinGecko\");\n          for (const coin of filtered)\n            currencyCodesByCoinGeckoIds[coin.id] = currencyCode;\n        }\n\n        // Get prices\n        var decoded = (\n          await axios.get(\"https://api.coingecko.com/api/v3/simple/price\", {\n            params: {\n              vs_currencies: \"usd\",\n              ids: Object.keys(currencyCodesByCoinGeckoIds).join(\",\"),\n              include_market_cap: true,\n            },\n          })\n        ).data;\n        if (!decoded)\n          throw new Error(\"Failed to decode USD exchange rates from CoinGecko\");\n        var prices = {};\n        var maxMarketCaps = {};\n\n        for (const key of Object.keys(decoded))\n          if (\n            prices[currencyCodesByCoinGeckoIds[key]] === undefined ||\n            decoded[key].usd_market_cap >\n              maxMarketCaps[currencyCodesByCoinGeckoIds[key]]\n          ) {\n            maxMarketCaps[currencyCodesByCoinGeckoIds[key]] =\n              decoded[key].usd_market_cap;\n            prices[currencyCodesByCoinGeckoIds[key]] = decoded[key].usd;\n          }\n\n        // Update cache\n        self.cache.update(\"coinGeckoUsdPrices\", prices);\n\n        // Return slippage\n        if (\n          self.cache._raw.coinGeckoUsdPrices.value[\"USDC\"] &&\n          self.cache._raw.coinGeckoUsdPrices.value[currencyCode]\n        ) {\n          if (self.POOL_TOKEN_SYMBOL === \"RSPT\")\n            usdAmount =\n              parseFloat(usdAmount.toString()) *\n              self.cache._raw.coinGeckoUsdPrices.value[\"USDC\"];\n          else if (self.POOL_TOKEN_SYMBOL === \"RDPT\")\n            usdAmount =\n              parseFloat(usdAmount.toString()) *\n              self.cache._raw.coinGeckoUsdPrices.value[\"DAI\"];\n          else usdAmount = parseFloat(usdAmount.toString());\n          return Web3.utils\n            .toBN(1e18)\n            .sub(\n              Web3.utils.toBN(\n                Math.trunc(\n                  (parseFloat(amount.toString()) *\n                    self.cache._raw.coinGeckoUsdPrices.value[currencyCode] *\n                    10 **\n                      Web3.utils.toBN(\n                        currencyCode === \"ETH\"\n                          ? 18\n                          : 36 - allTokens[currencyCode].decimals\n                      )) /\n                    usdAmount\n                )\n              )\n            );\n        } else throw new Error(\"Failed to get currency prices from CoinGecko\");\n      },\n      withdraw: async function (currencyCode, amount, maxUsdAmount, options) {\n        if (!options || !options.from)\n          throw new Error(\"Options parameter not set or from address not set.\");\n        var allTokens = await self.getAllTokens();\n        if (currencyCode !== \"ETH\" && !allTokens[currencyCode])\n          throw new Error(\"Invalid currency code!\");\n        if (!amount || amount.lte(Web3.utils.toBN(0)))\n          throw new Error(\"Withdrawal amount must be greater than 0!\");\n\n        // Check balances to find withdrawal source\n        var allBalances = await self.cache.getOrUpdate(\n          \"allBalances\",\n          self.contracts.RariFundProxy.methods.getRawFundBalancesAndPrices()\n            .call\n        );\n\n        // See how much we can withdraw directly if token is supported by the fund\n        var i = allBalances[\"0\"].indexOf(currencyCode);\n        var tokenRawFundBalanceBN = Web3.utils.toBN(0);\n\n        if (i >= 0) {\n          tokenRawFundBalanceBN = Web3.utils.toBN(allBalances[\"1\"][i]);\n          for (var j = 0; j < allBalances[\"3\"][i].length; j++)\n            tokenRawFundBalanceBN.iadd(Web3.utils.toBN(allBalances[\"3\"][i][j]));\n        }\n\n        if (tokenRawFundBalanceBN.gte(amount)) {\n          // Check maxUsdAmount\n          var amountUsdBN = amount\n            .mul(\n              Web3.utils.toBN(\n                allBalances[\"4\"][\n                  self.allocations.CURRENCIES.indexOf(currencyCode)\n                ]\n              )\n            )\n            .div(\n              Web3.utils\n                .toBN(10)\n                .pow(\n                  Web3.utils.toBN(self.internalTokens[currencyCode].decimals)\n                )\n            );\n          if (\n            typeof maxUsdAmount !== \"undefined\" &&\n            maxUsdAmount !== null &&\n            amountUsdBN.gt(maxUsdAmount)\n          )\n            return [amountUsdBN];\n\n          // If we can withdraw everything directly, do so\n          try {\n            var receipt = await self.contracts.RariFundManager.methods\n              .withdraw(currencyCode, amount)\n              .send(options);\n          } catch (err) {\n            throw new Error(\n              \"RariFundManager.withdraw failed: \" +\n                (err.message ? err.message : err)\n            );\n          }\n\n          self.cache.clear(\"allBalances\");\n          return [amountUsdBN, null, receipt];\n        } else {\n          // Otherwise, exchange as few currencies as possible (ideally those with the lowest balances)\n          var inputCurrencyCodes = [];\n          var inputAmountBNs = [];\n          var allOrders = [];\n          var allSignatures = [];\n          var makerAssetFillAmountBNs = [];\n          var protocolFeeBNs = [];\n\n          var amountInputtedUsdBN = Web3.utils.toBN(0);\n          var amountWithdrawnBN = Web3.utils.toBN(0);\n          var totalProtocolFeeBN = Web3.utils.toBN(0);\n\n          // Withdraw as much as we can of the output token first\n          if (tokenRawFundBalanceBN.gt(Web3.utils.toBN(0))) {\n            inputCurrencyCodes.push(currencyCode);\n            inputAmountBNs.push(tokenRawFundBalanceBN);\n            allOrders.push([]);\n            allSignatures.push([]);\n            makerAssetFillAmountBNs.push(Web3.utils.toBN(0));\n            protocolFeeBNs.push(Web3.utils.toBN(0));\n\n            amountInputtedUsdBN.iadd(\n              tokenRawFundBalanceBN\n                .mul(\n                  Web3.utils.toBN(\n                    allBalances[\"4\"][ \n                      self.allocations.CURRENCIES.indexOf(currencyCode)\n                    ]\n                  )\n                )\n                .div(\n                  Web3.utils\n                    .toBN(10)\n                    .pow(\n                      Web3.utils.toBN(\n                        self.internalTokens[currencyCode].decimals\n                      )\n                    )\n                )\n            );\n            amountWithdrawnBN.iadd(tokenRawFundBalanceBN);\n          }\n\n          // Get input candidates\n          var inputCandidates = [];\n\n          for (var i = 0; i < allBalances[\"0\"].length; i++)\n            if (allBalances[\"0\"][i] !== currencyCode) {\n              var rawFundBalanceBN = Web3.utils.toBN(0);\n              for (var j = 0; j < allBalances[\"3\"][i].length; j++)\n                rawFundBalanceBN.iadd(Web3.utils.toBN(allBalances[\"3\"][i][j]));\n              if (rawFundBalanceBN.gt(Web3.utils.toBN(0)))\n                inputCandidates.push({\n                  currencyCode: allBalances[\"0\"][i],\n                  rawFundBalanceBN,\n                });\n            }\n\n          // TODO: Sort candidates from lowest to highest rawFundBalanceUsdBN (or highest to lowest?)\n          /* inputCandidates.sort((a, b) =>\n            a.rawFundBalanceUsdBN.gt(b.rawFundBalanceUsdBN) ? 1 : -1\n          ); */\n\n          // mStable\n          if (\n            currencyCode === \"mUSD\" ||\n            MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(\n              currencyCode\n            ) >= 0\n          ) {\n            var mStableSwapFeeBN = null;\n\n            for (var i = 0; i < inputCandidates.length; i++) {\n              if (\n                inputCandidates[i].currencyCode !== \"mUSD\" &&\n                MStableSubpool.SUPPORTED_EXCHANGE_CURRENCIES.indexOf(\n                  inputCandidates[i].currencyCode\n                ) < 0\n              )\n                continue;\n\n              // Get swap fee and calculate input amount needed to fill output amount\n              if (mStableSwapFeeBN === null)\n                mStableSwapFeeBN = await self.pools[\n                  \"mStable\"\n                ].getMUsdSwapFeeBN();\n              var inputAmountBN = amount\n                .sub(amountWithdrawnBN)\n                .mul(Web3.utils.toBN(1e18))\n                .div(Web3.utils.toBN(1e18).sub(mStableSwapFeeBN))\n                .mul(\n                  Web3.utils.toBN(\n                    10 **\n                      self.internalTokens[inputCandidates[i].currencyCode]\n                        .decimals\n                  )\n                )\n                .div(Web3.utils.toBN(10 ** allTokens[currencyCode].decimals));\n              var outputAmountBeforeFeesBN = inputAmountBN\n                .mul(Web3.utils.toBN(10 ** allTokens[currencyCode].decimals))\n                .div(\n                  Web3.utils.toBN(\n                    10 **\n                      self.internalTokens[inputCandidates[i].currencyCode]\n                        .decimals\n                  )\n                );\n              var outputAmountBN = outputAmountBeforeFeesBN.sub(\n                outputAmountBeforeFeesBN\n                  .mul(mStableSwapFeeBN)\n                  .div(Web3.utils.toBN(1e18))\n              );\n\n              var tries = 0;\n              while (outputAmountBN.lt(amount.sub(amountWithdrawnBN))) {\n                if (tries >= 1000)\n                  throw new Error(\n                    \"Failed to get increment order input amount to achieve desired output amount.\"\n                  );\n                inputAmountBN.iadd(Web3.utils.toBN(1)); // Make sure we have enough input amount to receive amount.sub(amountWithdrawnBN)\n                outputAmountBeforeFeesBN = inputAmountBN\n                  .mul(Web3.utils.toBN(10 ** allTokens[currencyCode].decimals))\n                  .div(\n                    Web3.utils.toBN(\n                      10 **\n                        self.internalTokens[inputCandidates[i].currencyCode]\n                          .decimals\n                    )\n                  );\n                outputAmountBN = outputAmountBeforeFeesBN.sub(\n                  outputAmountBeforeFeesBN\n                    .mul(mStableSwapFeeBN)\n                    .div(Web3.utils.toBN(1e18))\n                );\n                tries++;\n              }\n\n              if (inputAmountBN.gt(inputCandidates[i].rawFundBalanceBN)) {\n                inputAmountBN = inputCandidates[i].rawFundBalanceBN;\n                outputAmountBeforeFeesBN = inputAmountBN\n                  .mul(Web3.utils.toBN(10 ** allTokens[currencyCode].decimals))\n                  .div(\n                    Web3.utils.toBN(\n                      10 **\n                        self.internalTokens[inputCandidates[i].currencyCode]\n                          .decimals\n                    )\n                  );\n                outputAmountBN = outputAmountBeforeFeesBN.sub(\n                  outputAmountBeforeFeesBN\n                    .mul(mStableSwapFeeBN)\n                    .div(Web3.utils.toBN(1e18))\n                );\n              }\n\n              // Check max swap/redeem validity\n              if (inputCandidates[i].currencyCode === \"mUSD\") {\n                try {\n                  var redeemValidity = await self.pools[\n                    \"mStable\"\n                  ].externalContracts.MassetValidationHelper.methods\n                    .getRedeemValidity(\n                      \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                      inputAmountBN,\n                      self.internalTokens[currencyCode].address\n                    )\n                    .call();\n                } catch (err) {\n                  console.error(\"Failed to check mUSD redeem validity:\", err);\n                  continue;\n                }\n\n                if (!redeemValidity || !redeemValidity[\"0\"]) continue;\n                if (!outputAmountBN.eq(Web3.utils.toBN(redeemValidity[\"2\"])))\n                  throw new Error(\n                    \"Predicted mStable output amount and output amount returned by getRedeemValidity not equal.\"\n                  );\n              } else {\n                try {\n                  var maxSwap = await self.pools[\n                    \"mStable\"\n                  ].externalContracts.MassetValidationHelper.methods\n                    .getMaxSwap(\n                      \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n                      self.internalTokens[inputCandidates[i].currencyCode]\n                        .address,\n                      self.internalTokens[currencyCode].address\n                    )\n                    .call();\n                } catch (err) {\n                  console.error(\"Failed to check mUSD max swap:\", err);\n                  continue;\n                }\n\n                if (\n                  !maxSwap ||\n                  !maxSwap[\"0\"] ||\n                  Web3.utils.toBN(maxSwap[\"2\"]).lt(inputAmountBN)\n                )\n                  continue;\n              }\n\n              inputCurrencyCodes.push(inputCandidates[i].currencyCode);\n              inputAmountBNs.push(inputAmountBN);\n              allOrders.push([]);\n              allSignatures.push([]);\n              makerAssetFillAmountBNs.push(Web3.utils.toBN(0));\n              protocolFeeBNs.push(Web3.utils.toBN(0));\n\n              amountInputtedUsdBN.iadd(\n                inputAmountBN\n                  .mul(\n                    Web3.utils.toBN(\n                      allBalances[\"4\"][\n                        self.allocations.CURRENCIES.indexOf(\n                          inputCandidates[i].currencyCode\n                        )\n                      ]\n                    )\n                  )\n                  .div(\n                    Web3.utils\n                      .toBN(10)\n                      .pow(\n                        Web3.utils.toBN(\n                          self.internalTokens[inputCandidates[i].currencyCode]\n                            .decimals\n                        )\n                      )\n                  )\n              );\n              amountWithdrawnBN.iadd(outputAmountBN);\n\n              inputCandidates[i].rawFundBalanceBN.isub(inputAmountBN);\n              if (inputCandidates[i].rawFundBalanceBN.isZero()) {\n                inputCandidates.splice(i, 1);\n                i--;\n              }\n\n              // Stop if we have filled the withdrawal\n              if (amountWithdrawnBN.gte(amount)) break;\n            }\n          }\n\n          // Use 0x if necessary\n          if (amountWithdrawnBN.lt(amount)) {\n            // Get orders from 0x swap API for each input currency candidate\n            for (var i = 0; i < inputCandidates.length; i++) {\n              try {\n                var [\n                  orders,\n                  inputFilledAmountBN,\n                  protocolFee,\n                  takerAssetFilledAmountBN,\n                  makerAssetFilledAmountBN,\n                  gasPrice,\n                ] = await get0xSwapOrders(\n                  self.internalTokens[inputCandidates[i].currencyCode].address,\n                  currencyCode === \"ETH\"\n                    ? \"WETH\"\n                    : allTokens[currencyCode].address,\n                  inputCandidates[i].rawFundBalanceBN,\n                  amount.sub(amountWithdrawnBN)\n                );\n              } catch (err) {\n                if (err === \"Insufficient liquidity\") {\n                  inputCandidates.splice(i, 1);\n                  i--;\n                  continue;\n                }\n\n                throw new Error(\n                  \"Failed to get swap orders from 0x API: \" + err\n                );\n              }\n\n              // Build array of orders and signatures\n              var signatures = [];\n\n              for (var j = 0; j < orders.length; j++) {\n                signatures[j] = orders[j].signature;\n\n                orders[j] = {\n                  makerAddress: orders[j].makerAddress,\n                  takerAddress: orders[j].takerAddress,\n                  feeRecipientAddress: orders[j].feeRecipientAddress,\n                  senderAddress: orders[j].senderAddress,\n                  makerAssetAmount: orders[j].makerAssetAmount,\n                  takerAssetAmount: orders[j].takerAssetAmount,\n                  makerFee: orders[j].makerFee,\n                  takerFee: orders[j].takerFee,\n                  expirationTimeSeconds: orders[j].expirationTimeSeconds,\n                  salt: orders[j].salt,\n                  makerAssetData: orders[j].makerAssetData,\n                  takerAssetData: orders[j].takerAssetData,\n                  makerFeeAssetData: orders[j].makerFeeAssetData,\n                  takerFeeAssetData: orders[j].takerFeeAssetData,\n                };\n              }\n\n              inputCandidates[i].orders = orders;\n              inputCandidates[i].signatures = signatures;\n              inputCandidates[i].inputFillAmountBN = inputFilledAmountBN;\n              inputCandidates[i].protocolFeeBN = Web3.utils\n                .toBN(protocolFee)\n                .muln(15)\n                .divn(10); // Multiply protocol fee by 1.5 to account for user upping the gas price\n              inputCandidates[\n                i\n              ].takerAssetFillAmountBN = takerAssetFilledAmountBN;\n              inputCandidates[\n                i\n              ].makerAssetFillAmountBN = makerAssetFilledAmountBN;\n              inputCandidates[\n                i\n              ].takerAssetFillAmountUsdBN = takerAssetFilledAmountBN\n                .mul(\n                  Web3.utils.toBN(\n                    allBalances[\"4\"][\n                      self.allocations.CURRENCIES.indexOf(\n                        inputCandidates[i].currencyCode\n                      )\n                    ]\n                  )\n                )\n                .div(\n                  Web3.utils\n                    .toBN(10)\n                    .pow(\n                      Web3.utils.toBN(\n                        self.internalTokens[inputCandidates[i].currencyCode]\n                          .decimals\n                      )\n                    )\n                );\n            }\n\n            // Sort candidates from highest to lowest output per USD burned\n            inputCandidates.sort((a, b) =>\n              b.makerAssetFillAmountBN\n                .mul(Web3.utils.toBN(1e18))\n                .div(b.takerAssetFillAmountUsdBN)\n                .gt(\n                  a.makerAssetFillAmountBN\n                    .mul(Web3.utils.toBN(1e18))\n                    .div(a.takerAssetFillAmountUsdBN)\n                )\n                ? 1\n                : -1\n            );\n\n            // Loop through input currency candidates until we fill the withdrawal\n            for (var i = 0; i < inputCandidates.length; i++) {\n              // Is this order enough to cover the rest of the withdrawal?\n              if (\n                inputCandidates[i].makerAssetFillAmountBN.gte(\n                  amount.sub(amountWithdrawnBN)\n                )\n              ) {\n                // If order is enough to cover the rest of the withdrawal, cover it and stop looping through input candidates\n                var thisOutputAmountBN = amount.sub(amountWithdrawnBN);\n                var thisInputAmountBN = inputCandidates[i].inputFillAmountBN\n                  .mul(thisOutputAmountBN)\n                  .div(inputCandidates[i].makerAssetFillAmountBN);\n\n                var tries = 0;\n                while (\n                  inputCandidates[i].makerAssetFillAmountBN\n                    .mul(thisInputAmountBN)\n                    .div(inputCandidates[i].inputFillAmountBN)\n                    .lt(thisOutputAmountBN)\n                ) {\n                  if (tries >= 1000)\n                    throw new Error(\n                      \"Failed to get increment order input amount to achieve desired output amount.\"\n                    );\n                  thisInputAmountBN.iadd(Web3.utils.toBN(1)); // Make sure we have enough input fill amount to achieve this maker asset fill amount\n                  tries++;\n                }\n\n                inputCurrencyCodes.push(inputCandidates[i].currencyCode);\n                inputAmountBNs.push(thisInputAmountBN);\n                allOrders.push(inputCandidates[i].orders);\n                allSignatures.push(inputCandidates[i].signatures);\n                makerAssetFillAmountBNs.push(thisOutputAmountBN);\n                protocolFeeBNs.push(inputCandidates[i].protocolFeeBN);\n\n                amountInputtedUsdBN.iadd(\n                  thisInputAmountBN\n                    .mul(\n                      Web3.utils.toBN(\n                        allBalances[\"4\"][\n                          self.allocations.CURRENCIES.indexOf(\n                            inputCandidates[i].currencyCode\n                          )\n                        ]\n                      )\n                    )\n                    .div(\n                      Web3.utils\n                        .toBN(10)\n                        .pow(\n                          Web3.utils.toBN(\n                            self.internalTokens[inputCandidates[i].currencyCode]\n                              .decimals\n                          )\n                        )\n                    )\n                );\n                amountWithdrawnBN.iadd(thisOutputAmountBN);\n                totalProtocolFeeBN.iadd(inputCandidates[i].protocolFeeBN);\n\n                break;\n              } else {\n                // Otherwise, add the whole order and keep looping through input candidates\n                inputCurrencyCodes.push(inputCandidates[i].currencyCode);\n                inputAmountBNs.push(inputCandidates[i].inputFillAmountBN);\n                allOrders.push(inputCandidates[i].orders);\n                allSignatures.push(inputCandidates[i].signatures);\n                makerAssetFillAmountBNs.push(\n                  inputCandidates[i].makerAssetFillAmountBN\n                );\n                protocolFeeBNs.push(inputCandidates[i].protocolFeeBN);\n\n                amountInputtedUsdBN.iadd(\n                  inputCandidates[i].inputFillAmountBN\n                    .mul(\n                      Web3.utils.toBN(\n                        allBalances[\"4\"][\n                          self.allocations.CURRENCIES.indexOf(\n                            inputCandidates[i].currencyCode\n                          )\n                        ]\n                      )\n                    )\n                    .div(\n                      Web3.utils\n                        .toBN(10)\n                        .pow(\n                          Web3.utils.toBN(\n                            self.internalTokens[inputCandidates[i].currencyCode]\n                              .decimals\n                          )\n                        )\n                    )\n                );\n                amountWithdrawnBN.iadd(\n                  inputCandidates[i].makerAssetFillAmountBN\n                );\n                totalProtocolFeeBN.iadd(inputCandidates[i].protocolFeeBN);\n              }\n\n              // Stop if we have filled the withdrawal\n              if (amountWithdrawnBN.gte(amount)) break;\n            }\n\n            // Make sure input amount is completely filled\n            if (amountWithdrawnBN.lt(amount))\n              throw new Error(\n                \"Unable to find enough liquidity to exchange withdrawn tokens to \" +\n                  currencyCode +\n                  \".\"\n              );\n          }\n\n          // Check maxUsdAmount\n          if (\n            typeof maxUsdAmount !== \"undefined\" &&\n            maxUsdAmount !== null &&\n            amountInputtedUsdBN.gt(maxUsdAmount)\n          )\n            return [amountInputtedUsdBN];\n\n          // Withdraw and exchange tokens via RariFundProxy\n          try {\n            var inputAmountStrings = [];\n            for (var i = 0; i < inputAmountBNs.length; i++)\n              inputAmountStrings[i] = inputAmountBNs[i].toString();\n            var makerAssetFillAmountStrings = [];\n            for (var i = 0; i < makerAssetFillAmountBNs.length; i++)\n              makerAssetFillAmountStrings[i] = makerAssetFillAmountBNs[\n                i\n              ].toString();\n            var protocolFeeStrings = [];\n            for (var i = 0; i < protocolFeeBNs.length; i++)\n              protocolFeeStrings[i] = protocolFeeBNs[i].toString();\n            var receipt = await self.contracts.RariFundProxy.methods\n              .withdrawAndExchange(\n                inputCurrencyCodes,\n                inputAmountStrings,\n                currencyCode === \"ETH\"\n                  ? \"0x0000000000000000000000000000000000000000\"\n                  : allTokens[currencyCode].address,\n                allOrders,\n                allSignatures,\n                makerAssetFillAmountStrings,\n                protocolFeeStrings\n              )\n              .send({\n                from: options.from,\n                value: totalProtocolFeeBN,\n                gasPrice: gasPrice,\n                nonce: await self.web3.eth.getTransactionCount(options.from),\n              });\n          } catch (err) {\n            throw new Error(\n              \"RariFundProxy.withdrawAndExchange failed: \" +\n                (err.message ? err.message : err)\n            );\n          }\n\n          self.cache.clear(\"allBalances\");\n          return [amountInputtedUsdBN, totalProtocolFeeBN, receipt];\n        }\n      },\n    };\n\n    this.rspt = this.poolToken = {\n      getExchangeRate: async function (blockNumber) {\n        if (!blockNumber) blockNumber = \"latest\";\n        return Web3.utils\n          .toBN(\n            await self.contracts.RariFundManager.methods\n              .getFundBalance()\n              .call(blockNumber)\n          )\n          .mul(Web3.utils.toBN(1e18))\n          .div(\n            Web3.utils.toBN(\n              await self.contracts.RariFundToken.methods\n                .totalSupply()\n                .call(blockNumber)\n            )\n          );\n      },\n      balanceOf: async function (account) {\n        return Web3.utils.toBN(\n          await self.contracts.RariFundToken.methods.balanceOf(account).call()\n        );\n      },\n      transfer: async function (recipient, amount, options) {\n        return await self.contracts.RariFundToken.methods\n          .transfer(recipient, amount)\n          .send(options);\n      },\n    };\n\n    this.fees = {\n      getInterestFeeRate: async function () {\n        return Web3.utils.toBN(\n          await self.contracts.RariFundManager.methods\n            .getInterestFeeRate()\n            .call()\n        );\n      },\n    };\n\n    this.history = {\n      getApyHistory: async function (\n        fromTimestamp,\n        toTimestamp,\n        intervalSeconds = 86400\n      ) {\n        if (fromTimestamp === undefined || fromTimestamp === \"latest\")\n          fromTimestamp = Math.trunc(new Date().getTime() / 1000);\n        if (toTimestamp === undefined || toTimestamp === \"latest\")\n          toTimestamp = Math.trunc(new Date().getTime() / 1000);\n        if (!intervalSeconds) intervalSeconds = 86400;\n\n        try {\n          return (\n            await axios.get(self.API_BASE_URL + \"apys\", {\n              params: { fromTimestamp, toTimestamp, intervalSeconds },\n            })\n          ).data;\n        } catch (error) {\n          throw new Error(\"Error in Rari API: \" + error);\n        }\n      },\n      getTotalSupplyHistory: async function (\n        fromTimestamp = \"latest\",\n        toTimestamp = \"latest\",\n        intervalSeconds = 86400\n      ) {\n        if (fromTimestamp === undefined || fromTimestamp === \"latest\")\n          fromTimestamp = Math.trunc(new Date().getTime() / 1000);\n        if (toTimestamp === undefined || toTimestamp === \"latest\")\n          toTimestamp = Math.trunc(new Date().getTime() / 1000);\n        if (!intervalSeconds) intervalSeconds = 86400;\n\n        try {\n          return (\n            await axios.get(self.API_BASE_URL + \"balances\", {\n              params: { fromTimestamp, toTimestamp, intervalSeconds },\n            })\n          ).data;\n        } catch (error) {\n          throw new Error(\"Error in Rari API: \" + error);\n        }\n      },\n      getBalanceHistoryOf: async function (\n        account,\n        fromBlock,\n        toBlock,\n        intervalBlocks = 6500\n      ) {\n        if (!account) throw new Error(\"No account specified\");\n        if (fromBlock === undefined) fromBlock = \"latest\";\n        if (toBlock === undefined) toBlock = \"latest\";\n        if (!intervalBlocks) intervalBlocks = 6500;\n\n        try {\n          return (\n            await axios.get(self.API_BASE_URL + \"balances/\" + account, {\n              params: { fromBlock, toBlock, intervalBlocks },\n            })\n          ).data;\n        } catch (error) {\n          throw new Error(\"Error in Rari API: \" + error);\n        }\n      },\n      getPoolTokenExchangeRateHistory: async function (\n        fromTimestamp,\n        toTimestamp,\n        intervalSeconds = 86400\n      ) {\n        if (fromTimestamp === undefined || fromTimestamp === \"latest\")\n          fromTimestamp = Math.trunc(new Date().getTime() / 1000);\n        if (toTimestamp === undefined || toTimestamp === \"latest\")\n          toTimestamp = Math.trunc(new Date().getTime() / 1000);\n        if (!intervalSeconds) intervalSeconds = 86400;\n\n        try {\n          return (\n            await axios.get(\n              self.API_BASE_URL +\n                self.POOL_TOKEN_SYMBOL.toLowerCase() +\n                \"/rates\",\n              {\n                params: { fromTimestamp, toTimestamp, intervalSeconds },\n              }\n            )\n          ).data;\n        } catch (error) {\n          throw new Error(\"Error in Rari API: \" + error);\n        }\n      },\n      getRsptExchangeRateHistory: this.getPoolTokenExchangeRateHistory,\n      getPredictedDailyRawFundApyHistoryLastYear: async function () {\n        // TODO: Get results from app.rari.capital\n      },\n      getPredictedDailyFundApyHistoryLastYear: async function () {\n        var history = await self.history.getDailyRawFundApyHistoryLastYear();\n        for (const timestamp of Object.keys(history))\n          history[timestamp] -=\n            (history[timestamp] *\n              parseFloat(\n                await self.contracts.RariFundManager.methods\n                  .getInterestFeeRate()\n                  .call()\n              )) /\n            1e18;\n      },\n      getPredictedDailyRawFundReturnHistoryLastYear: async function (\n        principal\n      ) {\n        var apyHistory = await self.history.getPredictedDailyRawFundApyHistoryLastYear();\n        var returns = {};\n        for (const timestamp of Object.keys(apyHistory))\n          returns[timestamp] = principal *=\n            1 + apyHistory[timestamp] / 100 / 365;\n        return returns;\n      },\n      getPredictedDailyFundReturnHistoryLastYear: async function (principal) {\n        var apyHistory = await self.history.getPredictedDailyFundApyHistoryLastYear();\n        var returns = {};\n        for (const timestamp of Object.keys(apyHistory))\n          returns[timestamp] = principal *=\n            1 + apyHistory[timestamp] / 100 / 365;\n        return returns;\n      },\n      getPoolAllocationHistory: async function (fromBlock, toBlock, filter) {\n        var events = [];\n        if (toBlock >= 10909705 && fromBlock <= 11821040)\n          events = await self.legacyContracts[\n            \"v2.0.0\"\n          ].RariFundController.getPastEvents(\"PoolAllocation\", {\n            fromBlock: Math.max(fromBlock, 10909705),\n            toBlock: Math.min(toBlock, 11821040),\n            filter,\n          });\n        if (toBlock >= 11821040)\n          events = events.concat(\n            await self.contracts.RariFundController.getPastEvents(\n              \"PoolAllocation\",\n              {\n                fromBlock: Math.max(fromBlock, 11821040),\n                toBlock,\n                filter,\n              }\n            )\n          );\n        return events;\n      },\n      getCurrencyExchangeHistory: async function (fromBlock, toBlock, filter) {\n        var events = [];\n        if (toBlock >= 10926182 && fromBlock <= 11821040)\n          events = await self.legacyContracts[\n            \"v2.0.0\"\n          ].RariFundController.getPastEvents(\"CurrencyTrade\", {\n            fromBlock: Math.max(fromBlock, 10926182),\n            toBlock: Math.min(toBlock, 11821040),\n            filter,\n          });\n        if (toBlock >= 11821040)\n          events = events.concat(\n            await self.contracts.RariFundController.getPastEvents(\n              \"CurrencyTrade\",\n              {\n                fromBlock: Math.max(fromBlock, 11821040),\n                toBlock,\n                filter,\n              }\n            )\n          );\n        return events;\n      },\n      getDepositHistory: async function (fromBlock, toBlock, filter) {\n        var events = [];\n        if (toBlock >= 10365607 && fromBlock <= 10457338)\n          events = await self.legacyContracts[\n            \"v1.0.0\"\n          ].RariFundManager.getPastEvents(\"Deposit\", {\n            fromBlock: Math.max(fromBlock, 10365607),\n            toBlock: Math.min(toBlock, 10457338),\n            filter,\n          });\n        if (toBlock >= 10458405 && fromBlock <= 10889999)\n          events = events.concat(\n            await self.legacyContracts[\"v1.1.0\"].RariFundManager.getPastEvents(\n              \"Deposit\",\n              {\n                fromBlock: Math.max(fromBlock, 10458405),\n                toBlock: Math.min(toBlock, 10889999),\n                filter,\n              }\n            )\n          );\n        if (toBlock >= 10922173)\n          events = events.concat(\n            await self.contracts.RariFundManager.getPastEvents(\"Deposit\", {\n              fromBlock: Math.max(fromBlock, 10922173),\n              toBlock,\n              filter,\n            })\n          );\n        return events;\n      },\n      getWithdrawalHistory: async function (fromBlock, toBlock, filter) {\n        var events = [];\n        if (toBlock >= 10365668 && fromBlock <= 10365914)\n          events = await self.legacyContracts[\n            \"v1.0.0\"\n          ].RariFundManager.getPastEvents(\"Withdrawal\", {\n            fromBlock: Math.max(fromBlock, 10365668),\n            toBlock: Math.min(toBlock, 10365914),\n            filter,\n          });\n        if (toBlock >= 10468624 && fromBlock <= 10890985)\n          events = events.concat(\n            await self.legacyContracts[\"v1.1.0\"].RariFundManager.getPastEvents(\n              \"Withdrawal\",\n              {\n                fromBlock: Math.max(fromBlock, 10468624),\n                toBlock: Math.min(toBlock, 10890985),\n                filter,\n              }\n            )\n          );\n        if (toBlock >= 10932051)\n          events = events.concat(\n            await self.contracts.RariFundManager.getPastEvents(\"Withdrawal\", {\n              fromBlock: Math.max(fromBlock, 10932051),\n              toBlock,\n              filter,\n            })\n          );\n        return events;\n      },\n      getPreDepositExchangeHistory: async function (\n        fromBlock,\n        toBlock,\n        filter\n      ) {\n        var events = [];\n        if (toBlock >= 10365738 && fromBlock <= 10395897)\n          events = await self.legacyContracts[\n            \"v1.0.0\"\n          ].RariFundProxy.getPastEvents(\"PreDepositExchange\", {\n            fromBlock: Math.max(fromBlock, 10365738),\n            toBlock: Math.min(toBlock, 10395897),\n            filter,\n          });\n        if (toBlock >= 10458408 && fromBlock <= 10489095)\n          events = events.concat(\n            await self.legacyContracts[\"v1.1.0\"].RariFundProxy.getPastEvents(\n              \"PreDepositExchange\",\n              {\n                fromBlock: Math.max(fromBlock, 10458408),\n                toBlock: Math.min(toBlock, 10489095),\n                filter,\n              }\n            )\n          );\n        if (toBlock >= 10499014 && fromBlock <= 10833530)\n          events = events.concat(\n            await self.legacyContracts[\"v1.2.0\"].RariFundProxy.getPastEvents(\n              \"PreDepositExchange\",\n              {\n                fromBlock: Math.max(fromBlock, 10499014),\n                toBlock: Math.min(toBlock, 10833530),\n                filter,\n              }\n            )\n          );\n        if (toBlock >= 10967766)\n          events = events.concat(\n            await self.contracts.RariFundProxy.getPastEvents(\n              \"PreDepositExchange\",\n              { fromBlock: Math.max(fromBlock, 10967766), toBlock, filter }\n            )\n          );\n        return events;\n      },\n      getPostWithdrawalExchangeHistory: async function (\n        fromBlock,\n        toBlock,\n        filter\n      ) {\n        var events = [];\n        if (toBlock >= 10365914 && fromBlock <= 10365914)\n          events = await self.legacyContracts[\n            \"v1.0.0\"\n          ].RariFundToken.getPastEvents(\"PostWithdrawalExchange\", {\n            fromBlock: Math.max(fromBlock, 10365914),\n            toBlock: Math.min(toBlock, 10365914),\n            filter,\n          });\n        if (toBlock >= 10545467 && fromBlock <= 10545467)\n          events = events.concat(\n            await self.legacyContracts[\"v1.2.0\"].RariFundProxy.getPastEvents(\n              \"PostWithdrawalExchange\",\n              {\n                fromBlock: Math.max(fromBlock, 10545467),\n                toBlock: Math.min(toBlock, 10545467),\n                filter,\n              }\n            )\n          );\n        if (toBlock >= 10932051 && fromBlock <= 10932051)\n          events = events.concat(\n            await self.legacyContracts[\"v2.0.0\"].RariFundProxy.getPastEvents(\n              \"PostWithdrawalExchange\",\n              {\n                fromBlock: Math.max(fromBlock, 10932051),\n                toBlock: Math.min(toBlock, 10932051),\n                filter,\n              }\n            )\n          );\n        if (toBlock >= 11141845)\n          events = events.concat(\n            self.contracts.RariFundProxy.getPastEvents(\n              \"PostWithdrawalExchange\",\n              {\n                fromBlock: Math.max(fromBlock, 11141845),\n                toBlock,\n                filter,\n              }\n            )\n          );\n        return events;\n      },\n      getPoolTokenTransferHistory: async function (fromBlock, toBlock, filter) {\n        var events = [];\n        if (toBlock >= 10365607 && fromBlock <= 10890985)\n          events = await self.legacyContracts[\n            \"v1.0.0\"\n          ].RariFundToken.getPastEvents(\"Transfer\", {\n            fromBlock: Math.max(fromBlock, 10365607),\n            toBlock: Math.min(toBlock, 10890985),\n            filter,\n          });\n        if (toBlock >= 10909582)\n          events = events.concat(\n            await self.contracts.RariFundToken.getPastEvents(\"Transfer\", {\n              fromBlock: Math.max(fromBlock, 10909582),\n              toBlock,\n              filter,\n            })\n          );\n        return events;\n      },\n      getRsptTransferHistory: this.getPoolTokenTransferHistory,\n    };\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/pools/yield/abi/legacy/v1.0.0/RariFundController.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"inputAmountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmountUsd\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.CurrencyExchange\",\n        \"name\": \"exchange\",\n        \"type\": \"uint8\"\n      }\n    ],\n    \"name\": \"CurrencyTrade\",\n    \"type\": \"event\"\n  },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundDisabled\", \"type\": \"event\" },\n  { \"anonymous\": false, \"inputs\": [], \"name\": \"FundEnabled\", \"type\": \"event\" },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundRebalancerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.PoolAllocationAction\",\n        \"name\": \"action\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"currencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PoolAllocation\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"IS_RARI_FUND_CONTROLLER\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"fundDisabled\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" }\n    ],\n    \"name\": \"upgradeFundController\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"checkPoolForFunds\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundRebalancer\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bool\", \"name\": \"disabled\", \"type\": \"bool\" }],\n    \"name\": \"setFundDisabled\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolsByCurrency\",\n    \"outputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool[]\",\n        \"name\": \"\",\n        \"type\": \"uint8[]\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getDydxBalances\",\n    \"outputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"\", \"type\": \"address[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"_getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"getPoolBalance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"hasCurrencyInPool\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint16\", \"name\": \"referralCode\", \"type\": \"uint16\" }\n    ],\n    \"name\": \"setAaveReferralCode\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"depositToPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" },\n      { \"internalType\": \"bool\", \"name\": \"all\", \"type\": \"bool\" }\n    ],\n    \"name\": \"withdrawFromPoolOptimized\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPool\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool\",\n        \"name\": \"pool\",\n        \"type\": \"uint8\"\n      },\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" }\n    ],\n    \"name\": \"withdrawAllFromPoolOnUpgrade\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveTo0x\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"limit\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setDailyLossRateLimit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"marketSell0xOrdersFillOrKill\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approveToMUsd\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"swapMStable\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/yield/abi/legacy/v1.0.0/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"GsnTrustedSignerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmountAfterFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"oldRelayHub\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newRelayHub\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"RelayHubChanged\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getHubAddr\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n      { \"internalType\": \"bool\", \"name\": \"success\", \"type\": \"bool\" },\n      { \"internalType\": \"uint256\", \"name\": \"actualCharge\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes32\", \"name\": \"preRetVal\", \"type\": \"bytes32\" }\n    ],\n    \"name\": \"postRelayedCall\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" }],\n    \"name\": \"preRelayedCall\",\n    \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"relayHubVersion\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"setDefaultRelayHub\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setGsnTrustedSigner\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"inputCurrencyCodes\",\n        \"type\": \"string[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"inputAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[][]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[][]\"\n      },\n      {\n        \"internalType\": \"bytes[][]\",\n        \"name\": \"signatures\",\n        \"type\": \"bytes[][]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"makerAssetFillAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"protocolFees\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"relay\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"bytes\", \"name\": \"encodedFunction\", \"type\": \"bytes\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"transactionFee\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"gasPrice\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"gasLimit\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"approvalData\", \"type\": \"bytes\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"acceptRelayedCall\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }\n    ],\n    \"name\": \"forwardLostFunds\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalancesAndPrices\",\n    \"outputs\": [\n      { \"internalType\": \"string[]\", \"name\": \"\", \"type\": \"string[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" },\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool[][]\",\n        \"name\": \"\",\n        \"type\": \"uint8[][]\"\n      },\n      { \"internalType\": \"uint256[][]\", \"name\": \"\", \"type\": \"uint256[][]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/yield/abi/legacy/v1.1.0/RariFundProxy.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newContract\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"FundManagerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAddress\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"GsnTrustedSignerSet\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"withdrawalAmountAfterFee\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"makerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PostWithdrawalExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payee\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFilledAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"depositAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PreDepositExchange\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"oldRelayHub\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newRelayHub\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"RelayHubChanged\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getHubAddr\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" },\n      { \"internalType\": \"bool\", \"name\": \"success\", \"type\": \"bool\" },\n      { \"internalType\": \"uint256\", \"name\": \"actualCharge\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes32\", \"name\": \"preRetVal\", \"type\": \"bytes32\" }\n    ],\n    \"name\": \"postRelayedCall\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"context\", \"type\": \"bytes\" }],\n    \"name\": \"preRelayedCall\",\n    \"outputs\": [{ \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"rariFundManager\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract RariFundManager\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"relayHubVersion\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"setDefaultRelayHub\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newContract\", \"type\": \"address\" }\n    ],\n    \"name\": \"setFundManager\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newAddress\", \"type\": \"address\" }\n    ],\n    \"name\": \"setGsnTrustedSigner\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string\",\n        \"name\": \"inputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"inputErc20Contract\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"inputAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"string\",\n        \"name\": \"outputCurrencyCode\",\n        \"type\": \"string\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[]\"\n      },\n      { \"internalType\": \"bytes[]\", \"name\": \"signatures\", \"type\": \"bytes[]\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"takerAssetFillAmount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"exchangeAndDeposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"string[]\",\n        \"name\": \"inputCurrencyCodes\",\n        \"type\": \"string[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"inputAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"outputErc20Contract\",\n        \"type\": \"address\"\n      },\n      {\n        \"components\": [\n          {\n            \"internalType\": \"address\",\n            \"name\": \"makerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"takerAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"feeRecipientAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"address\",\n            \"name\": \"senderAddress\",\n            \"type\": \"address\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"makerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"takerAssetAmount\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"makerFee\", \"type\": \"uint256\" },\n          { \"internalType\": \"uint256\", \"name\": \"takerFee\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"uint256\",\n            \"name\": \"expirationTimeSeconds\",\n            \"type\": \"uint256\"\n          },\n          { \"internalType\": \"uint256\", \"name\": \"salt\", \"type\": \"uint256\" },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"makerFeeAssetData\",\n            \"type\": \"bytes\"\n          },\n          {\n            \"internalType\": \"bytes\",\n            \"name\": \"takerFeeAssetData\",\n            \"type\": \"bytes\"\n          }\n        ],\n        \"internalType\": \"struct LibOrder.Order[][]\",\n        \"name\": \"orders\",\n        \"type\": \"tuple[][]\"\n      },\n      {\n        \"internalType\": \"bytes[][]\",\n        \"name\": \"signatures\",\n        \"type\": \"bytes[][]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"makerAssetFillAmounts\",\n        \"type\": \"uint256[]\"\n      },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"protocolFees\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"withdrawAndExchange\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"currencyCode\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"relay\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"from\", \"type\": \"address\" },\n      { \"internalType\": \"bytes\", \"name\": \"encodedFunction\", \"type\": \"bytes\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"transactionFee\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"gasPrice\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"gasLimit\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"nonce\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"approvalData\", \"type\": \"bytes\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"acceptRelayedCall\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"erc20Contract\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" }\n    ],\n    \"name\": \"forwardLostFunds\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"getRawFundBalancesAndPrices\",\n    \"outputs\": [\n      { \"internalType\": \"string[]\", \"name\": \"\", \"type\": \"string[]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" },\n      {\n        \"internalType\": \"enum RariFundController.LiquidityPool[][]\",\n        \"name\": \"\",\n        \"type\": \"uint8[][]\"\n      },\n      { \"internalType\": \"uint256[][]\", \"name\": \"\", \"type\": \"uint256[][]\" },\n      { \"internalType\": \"uint256[]\", \"name\": \"\", \"type\": \"uint256[]\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/pools/yield.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\n\nimport StablePool from \"./stable.js\";\n\nconst contractAddresses = {\n  RariFundController: \"0x9245efB59f6491Ed1652c2DD8a4880cBFADc3ffA\",\n  RariFundManager: \"0x59FA438cD0731EBF5F4cDCaf72D4960EFd13FCe6\",\n  RariFundToken: \"0x3baa6B7Af0D72006d3ea770ca29100Eb848559ae\",\n  RariFundPriceConsumer: \"0x00815e0e9d118769542ce24be95f8e21c60e5561\",\n  RariFundProxy: \"0x35DDEFa2a30474E64314aAA7370abE14c042C6e8\",\n};\n\nconst legacyContractAddresses = {\n  \"v1.0.0\": {\n    RariFundController: \"0x6afE6C37bF75f80D512b9D89C19EC0B346b09a8d\",\n    RariFundProxy: \"0x6dd8e1Df9F366e6494c2601e515813e0f9219A88\",\n  },\n  \"v1.1.0\": {\n    RariFundProxy: \"0x626d6979F3607d13051594d8B27a0A64E413bC11\",\n  },\n};\n\nvar legacyAbis = {};\n\n// 1.0.0\nlegacyAbis[\"v1.0.0\"] = {};\nlegacyAbis[\"v1.0.0\"][\"RariFundController\"] = require(\".\" +\n  \"/yield/abi/legacy/\" +\n  \"v1.0.0\" +\n  \"/\" +\n  \"RariFundController\" +\n  \".json\");\n\nlegacyAbis[\"v1.0.0\"][\"RariFundProxy\"] = require(\".\" +\n  \"/yield/abi/legacy/\" +\n  \"v1.0.0\" +\n  \"/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\n// 1.1.0\nlegacyAbis[\"v1.1.0\"] = {};\nlegacyAbis[\"v1.1.0\"][\"RariFundProxy\"] = require(\".\" +\n  \"/yield/abi/legacy/\" +\n  \"v1.1.0\" +\n  \"/\" +\n  \"RariFundProxy\" +\n  \".json\");\n\nexport default class YieldPool extends StablePool {\n  API_BASE_URL = \"http://206.81.6.235:3000/pools/yield/\";\n  POOL_NAME = \"Rari Yield Pool\";\n  POOL_TOKEN_SYMBOL = \"RYPT\";\n\n  static CONTRACT_ADDRESSES = contractAddresses;\n  static LEGACY_CONTRACT_ADDRESSES = legacyContractAddresses;\n  static LEGACY_CONTRACT_ABIS = legacyAbis;\n\n  constructor(web3, subpools, getAllTokens) {\n    super(web3, subpools, getAllTokens);\n\n    this.contracts = {};\n    for (const contractName of Object.keys(contractAddresses))\n      this.contracts[contractName] = new web3.eth.Contract(\n        YieldPool.CONTRACT_ABIS[contractName],\n        contractAddresses[contractName]\n      );\n    // this.gsnContracts = { RariFundProxy: new web3Gsn.eth.Contract(abis.RariFundProxy, contractAddresses.RariFundProxy) };\n    this.legacyContracts = {};\n\n    for (const version of Object.keys(legacyContractAddresses)) {\n      if (!this.legacyContracts[version]) this.legacyContracts[version] = {};\n      for (const contractName of Object.keys(legacyContractAddresses[version]))\n        this.legacyContracts[version][\n          contractName\n        ] = new this.web3.eth.Contract(\n          legacyAbis[version][contractName],\n          legacyContractAddresses[version][contractName]\n        );\n    }\n\n    this.rypt = this.rspt;\n    delete this.rspt;\n\n    this.allocations.POOLS = [\"dYdX\", \"Compound\", \"Aave\", \"mStable\", \"yVault\"];\n    this.allocations.POOLS_BY_CURRENCY = {\n      DAI: [\"dYdX\", \"Compound\", \"Aave\", \"yVault\"],\n      USDC: [\"dYdX\", \"Compound\", \"Aave\", \"yVault\"],\n      USDT: [\"Compound\", \"Aave\", \"yVault\"],\n      TUSD: [\"Aave\", \"yVault\"],\n      BUSD: [\"Aave\"],\n      sUSD: [\"Aave\"],\n      mUSD: [\"mStable\"],\n    };\n    this.allocations.CURRENCIES_BY_POOL = {\n      dYdX: [\"DAI\", \"USDC\"],\n      Compound: [\"DAI\", \"USDC\", \"USDT\"],\n      Aave: [\"DAI\", \"USDC\", \"USDT\", \"TUSD\", \"BUSD\", \"sUSD\"],\n      mStable: [\"mUSD\"],\n      yVault: [\"DAI\", \"USDC\", \"USDT\", \"TUSD\"],\n    };\n\n    delete this.history.getRsptExchangeRateHistory;\n    this.history.getRyptExchangeRateHistory = this.history.getPoolTokenExchangeRateHistory;\n\n    var self = this;\n\n    this.history.getPoolAllocationHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      var events = [];\n      if (toBlock >= 11085000 && fromBlock <= 11854009)\n        events = await self.legacyContracts[\n          \"v1.0.0\"\n        ].RariFundController.getPastEvents(\"PoolAllocation\", {\n          fromBlock: Math.max(fromBlock, 11085000),\n          toBlock: Math.min(toBlock, 11854009),\n          filter,\n        });\n      if (toBlock >= 11854009)\n        events = events.concat(\n          await self.contracts.RariFundController.getPastEvents(\n            \"PoolAllocation\",\n            {\n              fromBlock: Math.max(fromBlock, 11854009),\n              toBlock,\n              filter,\n            }\n          )\n        );\n      return events;\n    };\n\n    this.history.getCurrencyExchangeHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      var events = [];\n      if (toBlock >= 11085000 && fromBlock <= 11854009)\n        events = await self.legacyContracts[\n          \"v1.0.0\"\n        ].RariFundController.getPastEvents(\"CurrencyTrade\", {\n          fromBlock: Math.max(fromBlock, 11085000),\n          toBlock: Math.min(toBlock, 11854009),\n          filter,\n        });\n      if (toBlock >= 11854009)\n        events = events.concat(\n          await self.contracts.RariFundController.getPastEvents(\n            \"CurrencyTrade\",\n            {\n              fromBlock: Math.max(fromBlock, 11854009),\n              toBlock,\n              filter,\n            }\n          )\n        );\n      return events;\n    };\n\n    this.history.getDepositHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundManager.getPastEvents(\"Deposit\", {\n            fromBlock: Math.max(fromBlock, 11085000),\n            toBlock,\n            filter,\n          })\n        : [];\n    };\n\n    this.history.getWithdrawalHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundManager.getPastEvents(\"Withdrawal\", {\n            fromBlock: Math.max(fromBlock, 11085000),\n            toBlock,\n            filter,\n          })\n        : [];\n    };\n\n    this.history.getPreDepositExchangeHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundProxy.getPastEvents(\n            \"PreDepositExchange\",\n            { fromBlock: Math.max(fromBlock, 11085000), toBlock, filter }\n          )\n        : [];\n    };\n\n    this.history.getPostWithdrawalExchangeHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundProxy.getPastEvents(\n            \"PostWithdrawalExchange\",\n            { fromBlock: Math.max(fromBlock, 20000001), toBlock, filter }\n          )\n        : [];\n    };\n\n    this.history.getPoolTokenTransferHistory = async function (\n      fromBlock,\n      toBlock,\n      filter\n    ) {\n      return toBlock >= 11085000\n        ? await self.contracts.RariFundToken.getPastEvents(\"Transfer\", {\n            fromBlock: Math.max(fromBlock, 10909582),\n            toBlock,\n            filter,\n          })\n        : [];\n    };\n\n    delete this.history.getRsptTransferHistory;\n    this.history.getRyptTransferHistory = this.history.getPoolTokenTransferHistory;\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/subpools/aave.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\n\nimport Cache from \"../cache.js\";\n\nexport default class AaveSubpool {\n  constructor(web3) {\n    this.web3 = web3;\n    this.cache = new Cache({\n      aaveCurrencyApys: 300,\n    });\n  }\n\n  async getCurrencyApys() {\n    return await this.cache.getOrUpdate(\"aaveCurrencyApys\", async function () {\n      let currencyCodes = [\n        \"DAI\",\n        \"USDC\",\n        \"USDT\",\n        \"TUSD\",\n        \"BUSD\",\n        \"SUSD\",\n        \"mUSD\",\n        \"ETH\",\n      ];\n\n      const data = (\n        await axios.post(\n          \"https://api.thegraph.com/subgraphs/name/aave/protocol-multy-raw\",\n          {\n            query:\n              `{\n                    reserves(where: {\n                        symbol_in: ` +\n              JSON.stringify(currencyCodes) +\n              `\n                    }) {\n                        id\n                        symbol\n                        liquidityRate\n                    }\n                }`,\n          }\n        )\n      ).data;\n\n      var apyBNs = {};\n\n      for (var i = 0; i < data.data.reserves.length; i++) {\n        if (\n          data.data.reserves[i].symbol === \"ETH\" &&\n          data.data.reserves[i].id !==\n            \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0x24a42fd28c976a61df5d00d0599c34c4f90748c8\"\n        )\n          continue;\n        apyBNs[\n          data.data.reserves[i].symbol == \"SUSD\"\n            ? \"sUSD\"\n            : data.data.reserves[i].symbol\n        ] = Web3.utils\n          .toBN(data.data.reserves[i].liquidityRate)\n          .div(Web3.utils.toBN(1e9));\n      }\n\n      return apyBNs;\n    });\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/subpools/alpha/abi/Bank.json",
    "content": "[\n  {\n    \"inputs\": [\n      {\n        \"internalType\": \"contract BankConfig\",\n        \"name\": \"_config\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"id\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"debtShare\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"AddDebt\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"id\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"killer\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"prize\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"left\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Kill\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"id\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"debtShare\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"RemoveDebt\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"uint256\",\n        \"name\": \"id\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"loan\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Work\",\n    \"type\": \"event\"\n  },\n  { \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\" },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"config\",\n    \"outputs\": [\n      { \"internalType\": \"contract BankConfig\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"debtShare\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"debtShareToVal\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"debtVal\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"debtValToShare\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"subtractedValue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"decreaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"deposit\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"glbDebtShare\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"glbDebtVal\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"addedValue\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"increaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"id\", \"type\": \"uint256\" }],\n    \"name\": \"kill\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"lastAccrueTime\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"nextPositionID\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"msgValue\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"pendingInterest\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"id\", \"type\": \"uint256\" }],\n    \"name\": \"positionInfo\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"name\": \"positions\",\n    \"outputs\": [\n      { \"internalType\": \"address\", \"name\": \"goblin\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"debtShare\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"recover\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"reduceReserve\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"reservePool\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalETH\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract BankConfig\",\n        \"name\": \"_config\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"updateConfig\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"share\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdraw\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"to\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"withdrawReserve\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"id\", \"type\": \"uint256\" },\n      { \"internalType\": \"address\", \"name\": \"goblin\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"loan\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"maxReturn\", \"type\": \"uint256\" },\n      { \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }\n    ],\n    \"name\": \"work\",\n    \"outputs\": [],\n    \"payable\": true,\n    \"stateMutability\": \"payable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/subpools/alpha/abi/ConfigurableInterestBankConfig.json",
    "content": "[\n  {\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"_minDebtSize\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_reservePoolBps\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"_killBps\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"contract InterestModel\",\n        \"name\": \"_interestModel\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"previousOwner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"newOwner\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"OwnershipTransferred\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"goblin\", \"type\": \"address\" }\n    ],\n    \"name\": \"acceptDebt\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"debt\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"floating\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"getInterestRate\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getKillBps\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getReservePoolBps\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"name\": \"goblins\",\n    \"outputs\": [\n      { \"internalType\": \"contract GoblinConfig\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"interestModel\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract InterestModel\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"goblin\", \"type\": \"address\" }\n    ],\n    \"name\": \"isGoblin\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isOwner\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"goblin\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"debt\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"killFactor\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"minDebtSize\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"owner\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"renounceOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"addrs\", \"type\": \"address[]\" },\n      {\n        \"internalType\": \"contract GoblinConfig[]\",\n        \"name\": \"configs\",\n        \"type\": \"address[]\"\n      }\n    ],\n    \"name\": \"setGoblins\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"_minDebtSize\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_reservePoolBps\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"_killBps\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"contract InterestModel\",\n        \"name\": \"_interestModel\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"setParams\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n    ],\n    \"name\": \"transferOwnership\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"goblin\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"debt\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"workFactor\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/subpools/alpha.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\n\nimport Cache from \"../cache.js\";\n\nconst externalContractAddresses = {\n  Bank: \"0x67B66C99D3Eb37Fa76Aa3Ed1ff33E8e39F0b9c7A\",\n  ConfigurableInterestBankConfig: \"0x97a49f8eec63c0dfeb9db4c791229477962dc692\",\n};\n\nvar externalAbis = {};\n\nexternalAbis[\"Bank\"] = require(\".\" + \"/alpha/abi/\" + \"Bank\" + \".json\");\n\nexternalAbis[\"ConfigurableInterestBankConfig\"] = require(\".\" +\n  \"/alpha/abi/\" +\n  \"ConfigurableInterestBankConfig\" +\n  \".json\");\n\nexport default class AlphaSubpool {\n  static EXTERNAL_CONTRACT_ADDRESSES = externalContractAddresses;\n  static EXTERNAL_CONTRACT_ABIS = externalAbis;\n\n  constructor(web3) {\n    this.web3 = web3;\n    this.cache = new Cache({\n      alphaIBEthApy: 300,\n    });\n\n    this.externalContracts = {};\n    for (const contractName of Object.keys(externalContractAddresses))\n      this.externalContracts[contractName] = new this.web3.eth.Contract(\n        externalAbis[contractName],\n        externalContractAddresses[contractName]\n      );\n  }\n\n  async getCurrencyApys() {\n    return { ETH: await this.getIBEthApyBN() };\n  }\n\n  async getIBEthApyBN() {\n    var self = this;\n    return await this.cache.getOrUpdate(\"alphaIBEthApy\", async function () {\n      try {\n        var glbDebtVal = await self.externalContracts.Bank.methods\n          .glbDebtVal()\n          .call();\n        var balance = await self.web3.eth.getBalance(\n          self.externalContracts.Bank.options.address\n        );\n        var interestRatePerSecondBN = await self.externalContracts.ConfigurableInterestBankConfig.methods\n          .getInterestRate(glbDebtVal, balance)\n          .call();\n        return Web3.utils.toBN(\n          Math.trunc(\n            ((1 + interestRatePerSecondBN / 1e18) ** (365 * 24 * 60 * 60) - 1) *\n              1e18\n          )\n        );\n      } catch (err) {\n        throw new Error(\"Failed to get Alpha Homora V1 interest rate: \" + err);\n      }\n    });\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/subpools/compound.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\n\nimport Cache from \"../cache.js\";\n\nexport default class CompoundSubpool {\n  constructor(web3) {\n    this.web3 = web3;\n    this.cache = new Cache({\n      compoundCurrencySupplierAndCompApys: 300,\n    });\n  }\n\n  async getCurrencySupplierAndCompApys() {\n    return await this.cache.getOrUpdate(\n      \"compoundCurrencySupplierAndCompApys\",\n      async function () {\n        const data = (\n          await axios.get(\"https://api.compound.finance/api/v2/ctoken\")\n        ).data;\n        var apyBNs = {};\n\n        for (var i = 0; i < data.cToken.length; i++) {\n          var supplyApy = Web3.utils.toBN(\n            Math.trunc(parseFloat(data.cToken[i].supply_rate.value) * 1e18)\n          );\n          var compApy = Web3.utils.toBN(\n            Math.trunc(\n              (parseFloat(data.cToken[i].comp_supply_apy.value) / 100) * 1e18\n            )\n          );\n          apyBNs[data.cToken[i].underlying_symbol] = [supplyApy, compApy];\n        }\n\n        return apyBNs;\n      }\n    );\n  }\n\n  async getCurrencyApys() {\n    var compoundApyBNs = await this.getCurrencySupplierAndCompApys();\n    var compoundCombinedApyBNs = {};\n    for (const currencyCode of Object.keys(compoundApyBNs))\n      compoundCombinedApyBNs[currencyCode] = compoundApyBNs[\n        currencyCode\n      ][0].add(compoundApyBNs[currencyCode][1]);\n    return compoundCombinedApyBNs;\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/subpools/dydx.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\n\nimport Cache from \"../cache.js\";\n\nexport default class DydxSubpool {\n  constructor(web3) {\n    this.web3 = web3;\n    this.cache = new Cache({\n      dydxCurrencyApys: 300,\n    });\n  }\n\n  async getCurrencyApys() {\n    return {}\n    return await this.cache.getOrUpdate(\"dydxCurrencyApys\", async function () {\n      const data = (await axios.get(\"https://api.dydx.exchange/v1/markets\"))\n        .data;\n      var apyBNs = {};\n\n      for (var i = 0; i < data.markets.length; i++)\n        apyBNs[data.markets[i].symbol] = Web3.utils.toBN(\n          Math.trunc(parseFloat(data.markets[i].totalSupplyAPR) * 1e18)\n        );\n\n      return apyBNs;\n    });\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/subpools/fuse/abi/CErc20Delegate.json",
    "content": "[\n  {\n    \"inputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"constructor\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"cashPrior\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"interestAccumulated\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"borrowIndex\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"totalBorrows\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"AccrueInterest\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [],\n    \"name\": \"AdminRightsRenounced\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"borrower\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"borrowAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"accountBorrows\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"totalBorrows\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Borrow\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"error\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"info\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"detail\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Failure\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [],\n    \"name\": \"FuseAdminRightsRenounced\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"liquidator\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"borrower\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"repayAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"cTokenCollateral\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"seizeTokens\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"LiquidateBorrow\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"minter\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"mintAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"mintTokens\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Mint\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"oldAdmin\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newAdmin\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewAdmin\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"oldAdminFeeMantissa\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"newAdminFeeMantissa\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"NewAdminFee\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"oldComptroller\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"newComptroller\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewComptroller\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"oldFuseFeeMantissa\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"newFuseFeeMantissa\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"NewFuseFee\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"oldInterestRateModel\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"newInterestRateModel\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewMarketInterestRateModel\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"oldPendingAdmin\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"newPendingAdmin\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"NewPendingAdmin\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"oldReserveFactorMantissa\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"newReserveFactorMantissa\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"NewReserveFactor\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"redeemer\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"redeemAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"redeemTokens\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Redeem\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"payer\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"borrower\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"repayAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"accountBorrows\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"totalBorrows\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"RepayBorrow\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"benefactor\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"addAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"newTotalReserves\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"ReservesAdded\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"admin\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"reduceAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"newTotalReserves\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"ReservesReduced\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"amount\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"_acceptAdmin\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"addAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"_addReserves\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [{ \"internalType\": \"bytes\", \"name\": \"data\", \"type\": \"bytes\" }],\n    \"name\": \"_becomeImplementation\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"reduceAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"_reduceReserves\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"_renounceAdminRights\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"_renounceFuseAdminRights\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"_resignImplementation\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"newAdminFeeMantissa\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"_setAdminFee\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"newComptroller\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"_setComptroller\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"_setFuseFee\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"newInterestRateModel\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"_setInterestRateModel\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address payable\",\n        \"name\": \"newPendingAdmin\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"_setPendingAdmin\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"newReserveFactorMantissa\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"_setReserveFactor\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"withdrawAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"_withdrawAdminFees\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"withdrawAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"_withdrawFuseFees\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"accrualBlockNumber\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"accrueInterest\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"admin\",\n    \"outputs\": [\n      { \"internalType\": \"address payable\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"adminFeeMantissa\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"adminHasRights\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOfUnderlying\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"borrowAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"borrow\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"borrowBalanceCurrent\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"borrowBalanceStored\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"borrowIndex\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"borrowRatePerBlock\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"comptroller\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"exchangeRateCurrent\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"exchangeRateStored\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"fuseAdminHasRights\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"fuseFeeMantissa\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"getAccountSnapshot\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getCash\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"implementation\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"comptroller_\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"interestRateModel_\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"initialExchangeRateMantissa_\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"string\", \"name\": \"name_\", \"type\": \"string\" },\n      { \"internalType\": \"string\", \"name\": \"symbol_\", \"type\": \"string\" },\n      { \"internalType\": \"uint8\", \"name\": \"decimals_\", \"type\": \"uint8\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"reserveFactorMantissa_\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"adminFeeMantissa_\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"underlying_\", \"type\": \"address\" },\n      {\n        \"internalType\": \"contract ComptrollerInterface\",\n        \"name\": \"comptroller_\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"interestRateModel_\",\n        \"type\": \"address\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"initialExchangeRateMantissa_\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"string\", \"name\": \"name_\", \"type\": \"string\" },\n      { \"internalType\": \"string\", \"name\": \"symbol_\", \"type\": \"string\" },\n      { \"internalType\": \"uint8\", \"name\": \"decimals_\", \"type\": \"uint8\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"reserveFactorMantissa_\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"adminFeeMantissa_\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"interestRateModel\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract InterestRateModel\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isCEther\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"isCToken\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"borrower\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"repayAmount\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"contract CTokenInterface\",\n        \"name\": \"cTokenCollateral\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"liquidateBorrow\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"mintAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"mint\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"pendingAdmin\",\n    \"outputs\": [\n      { \"internalType\": \"address payable\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"redeemTokens\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"redeem\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"redeemAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"redeemUnderlying\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"repayAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"repayBorrow\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"borrower\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"repayAmount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"repayBorrowBehalf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"reserveFactorMantissa\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"liquidator\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"borrower\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"seizeTokens\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"seize\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"supplyRatePerBlock\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalAdminFees\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalBorrows\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"totalBorrowsCurrent\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalFuseFees\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalReserves\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"dst\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"src\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"dst\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"underlying\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/subpools/fuse.js",
    "content": "/* eslint-disable */\nimport Cache from \"../cache.js\";\n\nvar cErc20DelegateAbi = require(\"./fuse/abi/CErc20Delegate.json\");\n\nexport default class FuseSubpool {\n  constructor(web3, cTokens) {\n    this.web3 = web3;\n    this.cTokens = cTokens;\n    this.cache = new Cache({\n      currencyApys: 300,\n    });\n  }\n\n  async getCurrencyApy(cTokenAddress) {\n    var cToken = new this.web3.eth.Contract(cErc20DelegateAbi, cTokenAddress);\n    var supplyRatePerBlock = await cToken.methods.supplyRatePerBlock().call();\n    return this.web3.utils.toBN(\n      (\n        (Math.pow((supplyRatePerBlock / 1e18) * (4 * 60 * 24) + 1, 365) - 1) *\n        1e18\n      ).toFixed(0)\n    );\n  }\n\n  async getCurrencyApys() {\n    var self = this;\n\n    return await self.cache.getOrUpdate(\"currencyApys\", async function () {\n      var apyBNs = {};\n      for (const currencyCode of Object.keys(self.cTokens))\n        apyBNs[currencyCode] = await self.getCurrencyApy(\n          self.cTokens[currencyCode]\n        );\n      return apyBNs;\n    });\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/subpools/keeperdao.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\n\nexport default class KeeperDAOSubpool {\n  constructor(web3) {\n    this.web3 = web3;\n  }\n\n  getCurrencyApys() {\n    // TODO: KeeperDAO APYs\n    return {\n      ETH: Web3.utils.toBN(0),\n    };\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/subpools/mstable/abi/Masset.json",
    "content": "[\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"owner\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"spender\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Approval\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"forgeValidator\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"ForgeValidatorChanged\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"minter\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"recipient\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"mAssetQuantity\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"bAsset\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"bAssetQuantity\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Minted\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"minter\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"recipient\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"mAssetQuantity\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address[]\",\n        \"name\": \"bAssets\",\n        \"type\": \"address[]\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256[]\",\n        \"name\": \"bAssetQuantities\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"MintedMulti\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"payer\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"asset\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"feeQuantity\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"PaidFee\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"redeemer\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"recipient\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"mAssetQuantity\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address[]\",\n        \"name\": \"bAssets\",\n        \"type\": \"address[]\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256[]\",\n        \"name\": \"bAssetQuantities\",\n        \"type\": \"uint256[]\"\n      }\n    ],\n    \"name\": \"Redeemed\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"redeemer\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"recipient\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"mAssetQuantity\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"RedeemedMasset\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"RedemptionFeeChanged\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"fee\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"SwapFeeChanged\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"swapper\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"input\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"output\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"outputAmount\",\n        \"type\": \"uint256\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"address\",\n        \"name\": \"recipient\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"Swapped\",\n    \"type\": \"event\"\n  },\n  {\n    \"anonymous\": false,\n    \"inputs\": [\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"from\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": true,\n        \"internalType\": \"address\",\n        \"name\": \"to\",\n        \"type\": \"address\"\n      },\n      {\n        \"indexed\": false,\n        \"internalType\": \"uint256\",\n        \"name\": \"value\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"Transfer\",\n    \"type\": \"event\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" }\n    ],\n    \"name\": \"allowance\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"approve\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n    ],\n    \"name\": \"balanceOf\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"collectInterest\",\n    \"outputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"totalInterestGained\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"uint256\", \"name\": \"newSupply\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"decimals\",\n    \"outputs\": [{ \"internalType\": \"uint8\", \"name\": \"\", \"type\": \"uint8\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"subtractedValue\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"decreaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"forgeValidator\",\n    \"outputs\": [\n      {\n        \"internalType\": \"contract IForgeValidator\",\n        \"name\": \"\",\n        \"type\": \"address\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"getBasketManager\",\n    \"outputs\": [{ \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_input\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"_output\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"_quantity\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"getSwapOutput\",\n    \"outputs\": [\n      { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" },\n      { \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"output\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"spender\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"addedValue\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"increaseAllowance\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"string\", \"name\": \"_nameArg\", \"type\": \"string\" },\n      { \"internalType\": \"string\", \"name\": \"_symbolArg\", \"type\": \"string\" },\n      { \"internalType\": \"address\", \"name\": \"_nexus\", \"type\": \"address\" },\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_forgeValidator\",\n        \"type\": \"address\"\n      },\n      { \"internalType\": \"address\", \"name\": \"_basketManager\", \"type\": \"address\" }\n    ],\n    \"name\": \"initialize\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [],\n    \"name\": \"lockForgeValidator\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_bAsset\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_bAssetQuantity\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"mint\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"massetMinted\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"_bAssets\", \"type\": \"address[]\" },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_bAssetQuantity\",\n        \"type\": \"uint256[]\"\n      },\n      { \"internalType\": \"address\", \"name\": \"_recipient\", \"type\": \"address\" }\n    ],\n    \"name\": \"mintMulti\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"massetMinted\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_bAsset\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_bAssetQuantity\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"address\", \"name\": \"_recipient\", \"type\": \"address\" }\n    ],\n    \"name\": \"mintTo\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"massetMinted\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"name\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"nexus\",\n    \"outputs\": [\n      { \"internalType\": \"contract INexus\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_bAsset\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_bAssetQuantity\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"name\": \"redeem\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"massetRedeemed\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_mAssetQuantity\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"address\", \"name\": \"_recipient\", \"type\": \"address\" }\n    ],\n    \"name\": \"redeemMasset\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address[]\", \"name\": \"_bAssets\", \"type\": \"address[]\" },\n      {\n        \"internalType\": \"uint256[]\",\n        \"name\": \"_bAssetQuantities\",\n        \"type\": \"uint256[]\"\n      },\n      { \"internalType\": \"address\", \"name\": \"_recipient\", \"type\": \"address\" }\n    ],\n    \"name\": \"redeemMulti\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"massetRedeemed\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_bAsset\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_bAssetQuantity\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"address\", \"name\": \"_recipient\", \"type\": \"address\" }\n    ],\n    \"name\": \"redeemTo\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"massetRedeemed\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"redemptionFee\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"_redemptionFee\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setRedemptionFee\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"_swapFee\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"setSwapFee\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_input\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"_output\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"_quantity\", \"type\": \"uint256\" },\n      { \"internalType\": \"address\", \"name\": \"_recipient\", \"type\": \"address\" }\n    ],\n    \"name\": \"swap\",\n    \"outputs\": [\n      { \"internalType\": \"uint256\", \"name\": \"output\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"swapFee\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"symbol\",\n    \"outputs\": [{ \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [],\n    \"name\": \"totalSupply\",\n    \"outputs\": [{ \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transfer\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n      { \"internalType\": \"uint256\", \"name\": \"amount\", \"type\": \"uint256\" }\n    ],\n    \"name\": \"transferFrom\",\n    \"outputs\": [{ \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": false,\n    \"inputs\": [\n      {\n        \"internalType\": \"address\",\n        \"name\": \"_newForgeValidator\",\n        \"type\": \"address\"\n      }\n    ],\n    \"name\": \"upgradeForgeValidator\",\n    \"outputs\": [],\n    \"payable\": false,\n    \"stateMutability\": \"nonpayable\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/subpools/mstable/abi/MassetValidationHelper.json",
    "content": "[\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_mAsset\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"_input\", \"type\": \"address\" },\n      { \"internalType\": \"address\", \"name\": \"_output\", \"type\": \"address\" }\n    ],\n    \"name\": \"getMaxSwap\",\n    \"outputs\": [\n      { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" },\n      { \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" },\n      { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_mAsset\", \"type\": \"address\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"_mAssetQuantity\",\n        \"type\": \"uint256\"\n      },\n      { \"internalType\": \"address\", \"name\": \"_outputBasset\", \"type\": \"address\" }\n    ],\n    \"name\": \"getRedeemValidity\",\n    \"outputs\": [\n      { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" },\n      { \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" },\n      { \"internalType\": \"uint256\", \"name\": \"output\", \"type\": \"uint256\" },\n      {\n        \"internalType\": \"uint256\",\n        \"name\": \"bassetQuantityArg\",\n        \"type\": \"uint256\"\n      }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_mAsset\", \"type\": \"address\" }\n    ],\n    \"name\": \"suggestMintAsset\",\n    \"outputs\": [\n      { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" },\n      { \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" },\n      { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  },\n  {\n    \"constant\": true,\n    \"inputs\": [\n      { \"internalType\": \"address\", \"name\": \"_mAsset\", \"type\": \"address\" }\n    ],\n    \"name\": \"suggestRedeemAsset\",\n    \"outputs\": [\n      { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" },\n      { \"internalType\": \"string\", \"name\": \"\", \"type\": \"string\" },\n      { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n    ],\n    \"payable\": false,\n    \"stateMutability\": \"view\",\n    \"type\": \"function\"\n  }\n]\n"
  },
  {
    "path": "src/rari-sdk/subpools/mstable.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\nimport axios from \"axios\";\n\nimport Cache from \"../cache.js\";\n\nvar erc20Abi = require(\".\" + \"/../abi/ERC20.json\");\n\nconst externalContractAddresses = {\n  Masset: \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\n  MassetValidationHelper: \"0xabcc93c3be238884cc3309c19afd128fafc16911\",\n};\n\nvar externalAbis = {};\nexternalAbis[\"Masset\"] = require(\".\" + \"/mstable/abi/\" + \"Masset\" + \".json\");\n\nexternalAbis[\"MassetValidationHelper\"] = require(\".\" +\n  \"/mstable/abi/\" +\n  \"MassetValidationHelper\" +\n  \".json\");\n\nexport default class MStableSubpool {\n  static EXTERNAL_CONTRACT_ADDRESSES = externalContractAddresses;\n  static EXTERNAL_CONTRACT_ABIS = externalAbis;\n\n  static SUPPORTED_EXCHANGE_CURRENCIES = [\"USDC\", \"USDT\", \"TUSD\"];\n\n  constructor(web3) {\n    this.web3 = web3;\n    this.cache = new Cache({\n      mStableCurrencyApys: 300,\n      mUsdSwapFee: 3600,\n    });\n\n    this.externalContracts = {};\n    for (const contractName of Object.keys(externalContractAddresses))\n      this.externalContracts[contractName] = new this.web3.eth.Contract(\n        externalAbis[contractName],\n        externalContractAddresses[contractName]\n      );\n  }\n\n  async getMUsdSavingsApy(includeIMUsdVaultApy) {\n    const data = (\n      await axios.post(\n        \"https://api.thegraph.com/subgraphs/name/mstable/mstable-protocol-staging\",\n        {\n          operationName: \"MUSD\",\n          query:\n            'query MUSD {\\n  masset(id: \"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\") {\\n    feeRate\\n    savingsContractsV2: savingsContracts(where: {version: 2}) {\\n      ...SavingsContractAll\\n      token {\\n        ...TokenAll\\n        __typename\\n      }\\n      boostedSavingsVaults {\\n        id\\n        lastUpdateTime\\n        lockupDuration\\n        unlockPercentage\\n        periodDuration\\n        periodFinish\\n        rewardPerTokenStored\\n        rewardRate\\n        stakingContract\\n        totalStakingRewards\\n        totalSupply\\n        __typename\\n      }\\n      __typename\\n    }\\n    __typename\\n  }\\n}\\n\\nfragment TokenAll on Token {\\n  id\\n  address\\n  decimals\\n  symbol\\n  totalSupply {\\n    ...MetricFields\\n    __typename\\n  }\\n  __typename\\n}\\n\\nfragment MetricFields on Metric {\\n  exact\\n  decimals\\n  simple\\n  __typename\\n}\\n\\nfragment SavingsContractAll on SavingsContract {\\n  id\\n  totalSavings {\\n    ...MetricFields\\n    __typename\\n  }\\n  latestExchangeRate {\\n    rate\\n    timestamp\\n    __typename\\n  }\\n  dailyAPY\\n  version\\n  active\\n  __typename\\n}\\n',\n        }\n      )\n    ).data;\n\n    if (!data || !data.data)\n      return console.error(\n        \"Failed to decode exchange rates from The Graph when calculating mStable 24-hour APY\"\n      );\n    this.cache.update(\"mUsdSwapFee\", Web3.utils.toBN(data.data.masset.feeRate));\n    var apy = Web3.utils.toBN(\n      (\n        parseFloat(data.data.masset.savingsContractsV2[0].dailyAPY) * 1e16\n      ).toFixed(0)\n    );\n    if (includeIMUsdVaultApy)\n      apy.iadd(\n        await this.getIMUsdVaultApy(\n          data.data.masset.savingsContractsV2[0].boostedSavingsVaults[0]\n            .totalStakingRewards,\n          data.data.masset.savingsContractsV2[0].latestExchangeRate.rate\n        )\n      );\n    return apy;\n  }\n\n  async getCurrencyApys() {\n    var self = this;\n    return await self.cache.getOrUpdate(\n      \"mStableCurrencyApys\",\n      async function () {\n        return { mUSD: await self.getMUsdSavingsApy(true) };\n      }\n    );\n  }\n\n  async getMUsdSwapFeeBN() {\n    var self = this;\n    return await this.cache.getOrUpdate(\"mUsdSwapFee\", async function () {\n      try {\n        return Web3.utils.toBN(\n          await self.externalContracts.Masset.methods.swapFee().call()\n        );\n      } catch (err) {\n        throw new Error(\"Failed to get mUSD swap fee: \" + err);\n      }\n    });\n  }\n\n  async getMtaUsdPrice() {\n    return (\n      await axios(\n        \"https://api.coingecko.com/api/v3/simple/token_price/ethereum?contract_addresses=0xa3bed4e1c75d00fa6f4e5e6922db7261b5e9acd2&vs_currencies=USD\"\n      )\n    ).data[\"0xa3bed4e1c75d00fa6f4e5e6922db7261b5e9acd2\"].usd;\n  }\n\n  async getIMUsdVaultWeeklyRoi(totalStakingRewards, stakingTokenPrice) {\n    var totalStaked =\n      (await new this.web3.eth.Contract(\n        erc20Abi,\n        \"0x30647a72dc82d7fbb1123ea74716ab8a317eac19\"\n      ).methods\n        .balanceOf(\"0x78befca7de27d07dc6e71da295cc2946681a6c7b\")\n        .call()) / 1e18;\n    // https://github.com/mstable/mStable-app/blob/56055318f23b43479455cdf0a9521dfec493b01c/src/hooks/useVaultWeeklyROI.ts#L43\n    const mtaPerWeekInUsd = totalStakingRewards * (await this.getMtaUsdPrice());\n    const totalStakedInUsd = stakingTokenPrice * totalStaked;\n    return mtaPerWeekInUsd / totalStakedInUsd;\n  }\n\n  async getIMUsdVaultApy(totalStakingRewards, stakingTokenPrice) {\n    return Web3.utils.toBN(\n      (\n        ((1 +\n          (await this.getIMUsdVaultWeeklyRoi(\n            totalStakingRewards,\n            stakingTokenPrice\n          ))) **\n          52 -\n          1) *\n        1e18\n      ).toFixed(0)\n    );\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk/subpools/yvault.js",
    "content": "/* eslint-disable */\nimport Web3 from \"web3\";\n\nexport default class YVaultSubpool {\n  constructor(web3) {\n    this.web3 = web3;\n  }\n\n  getCurrencyApys() {\n    // TODO: yVault APYs\n    return {\n      DAI: Web3.utils.toBN(0),\n      USDC: Web3.utils.toBN(0),\n      USDT: Web3.utils.toBN(0),\n      TUSD: Web3.utils.toBN(0),\n    };\n  }\n}\n"
  },
  {
    "path": "src/rari-sdk.d.ts",
    "content": "declare module \"rari-sdk\" {\n  export function interestEarnedDuringRange(\n    range: \"week\" | \"month\" | \"year\" | \"all-time\"\n  ): number;\n\n  export function accountBalanceEachDayDuringRange(\n    range: \"week\" | \"month\" | \"year\" | \"all-time\"\n  ): number[];\n\n  export function getRGTApy(): number;\n\n  export function getFundPerformanceDuringRange(\n    range: \"week\" | \"month\" | \"year\" | \"all-time\"\n  ): { eth: number[]; yield: number[]; stable: number[] };\n}\n"
  },
  {
    "path": "src/react-app-env.d.ts",
    "content": "/// <reference types=\"react-scripts\" />\n"
  },
  {
    "path": "src/setupTests.ts",
    "content": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).toHaveTextContent(/react/i)\n// learn more: https://github.com/testing-library/jest-dom\nimport \"@testing-library/jest-dom\";\n"
  },
  {
    "path": "src/static/compiled/info.txt",
    "content": "See README for information about this directory."
  },
  {
    "path": "src/static/compiled/tokens.json",
    "content": "{\"DAI\":{\"symbol\":\"DAI\",\"address\":\"0x6b175474e89094c44da98b954eedeac495271d0f\",\"name\":\"Dai Stablecoin\",\"decimals\":18,\"color\":\"#fcac17\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6B175474E89094C44Da98b954EedeAC495271d0F/logo.png\"},\"REP\":{\"symbol\":\"REP\",\"address\":\"0x1985365e9f78359a9B6AD760e32412f4a445E862\",\"name\":\"Augur Reputation\",\"decimals\":18,\"color\":\"#b14d94\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1985365e9f78359a9B6AD760e32412f4a445E862/logo.png\"},\"ETH\":{\"symbol\":\"ETH\",\"address\":\"NO_ADDRESS_HERE_USE_WETH_FOR_ADDRESS\",\"name\":\"Ethereum Network Token\",\"decimals\":18,\"color\":\"#7b7b83\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\"},\"WETH\":{\"symbol\":\"WETH\",\"address\":\"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",\"name\":\"Wrapped Ether\",\"decimals\":18,\"color\":\"#7b7b83\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png\"},\"ZRX\":{\"symbol\":\"ZRX\",\"address\":\"0xe41d2489571d322189246dafa5ebde1f4699f498\",\"name\":\"0x Protocol Token\",\"decimals\":18,\"color\":\"#7f7f7f\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xE41d2489571d322189246DaFA5ebDe1F4699F498/logo.png\"},\"USDC\":{\"symbol\":\"USDC\",\"address\":\"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\"name\":\"USD Coin\",\"decimals\":6,\"color\":\"#2474cc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\"},\"BAT\":{\"symbol\":\"BAT\",\"address\":\"0x0d8775f648430679a709e98d2b0cb6250d2887ef\",\"name\":\"Basic Attention Token\",\"decimals\":18,\"color\":\"#fc5404\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0D8775F648430679A709E98d2b0Cb6250d2887EF/logo.png\"},\"MKR\":{\"symbol\":\"MKR\",\"address\":\"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2\",\"name\":\"Maker\",\"decimals\":18,\"color\":\"#5cbbac\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2/logo.png\"},\"WBTC\":{\"symbol\":\"WBTC\",\"address\":\"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599\",\"name\":\"Wrapped BTC\",\"decimals\":8,\"color\":\"#f49445\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png\"},\"SNX\":{\"symbol\":\"SNX\",\"address\":\"0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f\",\"name\":\"Synthetix Network Token\",\"decimals\":18,\"color\":\"#04d3fb\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F/logo.png\"},\"sUSD\":{\"symbol\":\"sUSD\",\"address\":\"0x57ab1ec28d129707052df4df418d58a2d46d5f51\",\"name\":\"sUSD\",\"decimals\":18,\"color\":\"#3f3fbf\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x57Ab1ec28D129707052df4dF418D58a2D46d5f51/logo.png\"},\"KNC\":{\"symbol\":\"KNC\",\"address\":\"0xdd974d5c2e2928dea5f71b9825b8b646686bd200\",\"name\":\"Kyber Network Crystal\",\"decimals\":18,\"color\":\"#33cc9c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdd974D5C2e2928deA5F71b9825b8b646686BD200/logo.png\"},\"BNT\":{\"symbol\":\"BNT\",\"address\":\"0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c\",\"name\":\"Bancor Network Token\",\"decimals\":18,\"color\":\"#3636c8\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C/logo.png\"},\"GNO\":{\"symbol\":\"GNO\",\"address\":\"0x6810e776880c02933d47db1b9fc05908e5386b96\",\"name\":\"Gnosis Token\",\"decimals\":18,\"color\":\"#0f6fef\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6810e776880C02933D47DB1b9fc05908e5386b96/logo.png\"},\"LINK\":{\"symbol\":\"LINK\",\"address\":\"0x514910771af9ca656af840dff83e8264ecf986ca\",\"name\":\"Chainlink Token\",\"decimals\":18,\"color\":\"#345cd3\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x514910771AF9Ca656af840dff83E8264EcF986CA/logo.png\"},\"REN\":{\"symbol\":\"REN\",\"address\":\"0x408e41876cccdc0f92210600ef50372656052a38\",\"name\":\"Republic Protocol\",\"decimals\":18,\"color\":\"#7f7f7f\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x408e41876cCCDC0F92210600ef50372656052a38/logo.png\"},\"GNT\":{\"symbol\":\"GNT\",\"address\":\"0xa74476443119a942de498590fe1f2454d7d4ac0d\",\"name\":\"Golem Network Token\",\"decimals\":18,\"color\":\"#04bcc0\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xa74476443119A942dE498590Fe1f2454d7D4aC0d/logo.png\"},\"OMG\":{\"symbol\":\"OMG\",\"address\":\"0xd26114cd6ee289accf82350c8d8487fedb8a0c07\",\"name\":\"OmiseGO\",\"decimals\":18,\"color\":\"#7f7f7f\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xd26114cd6EE289AccF82350c8d8487fedB8A0C07/logo.png\"},\"ANT\":{\"symbol\":\"ANT\",\"address\":\"0x960b236a07cf122663c4303350609a66a7b288c0\",\"name\":\"Aragon Network Token\",\"decimals\":18,\"color\":\"#04d4fc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x960b236A07cf122663c4303350609A66A7B288C0/logo.png\"},\"SAI\":{\"symbol\":\"SAI\",\"address\":\"0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359\",\"name\":\"Sai Stablecoin v1.0\",\"decimals\":18,\"color\":\"#fccc24\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359/logo.png\"},\"CVL\":{\"symbol\":\"CVL\",\"address\":\"0x01fa555c97d7958fa6f771f3bbd5ccd508f81e22\",\"name\":\"Civil Token\",\"decimals\":18,\"color\":\"#FFFFFF\",\"overlayTextColor\":\"#000\",\"logoURL\":\"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"},\"DTH\":{\"symbol\":\"DTH\",\"address\":\"0x5adc961d6ac3f7062d2ea45fefb8d8167d44b190\",\"name\":\"Dether\",\"decimals\":18,\"color\":\"#546cfc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5adc961D6AC3f7062D2eA45FEFB8D8167d44b190/logo.png\"},\"FOAM\":{\"symbol\":\"FOAM\",\"address\":\"0x4946fcea7c692606e8908002e55a582af44ac121\",\"name\":\"FOAM\",\"decimals\":18,\"color\":\"#c89c8c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4946Fcea7C692606e8908002e55A582af44AC121/logo.png\"},\"AST\":{\"symbol\":\"AST\",\"address\":\"0x27054b13b1b798b345b591a4d22e6562d47ea75a\",\"name\":\"AirSwap Token\",\"decimals\":4,\"color\":\"#2c74fc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x27054b13b1B798B345b591a4d22e6562d47eA75a/logo.png\"},\"AION\":{\"symbol\":\"AION\",\"address\":\"0x4ceda7906a5ed2179785cd3a40a69ee8bc99c466\",\"name\":\"Aion Network\",\"decimals\":8,\"color\":\"#08bdec\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4CEdA7906a5Ed2179785Cd3A40A69ee8bc99C466/logo.png\"},\"GEN\":{\"symbol\":\"GEN\",\"address\":\"0x543ff227f64aa17ea132bf9886cab5db55dcaddf\",\"name\":\"DAOstack\",\"decimals\":18,\"color\":\"#7f7f7f\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x543Ff227F64Aa17eA132Bf9886cAb5DB55DCAddf/logo.png\"},\"STORJ\":{\"symbol\":\"STORJ\",\"address\":\"0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac\",\"name\":\"Storj\",\"decimals\":8,\"color\":\"#147ccc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB64ef51C888972c908CFacf59B47C1AfBC0Ab8aC/logo.png\"},\"MANA\":{\"symbol\":\"MANA\",\"address\":\"0x0f5d2fb29fb7d3cfee444a200298f468908cc942\",\"name\":\"Decentraland\",\"decimals\":18,\"color\":\"#fc0d4d\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0F5D2fB29fb7d3CFeE444a200298f468908cC942/logo.png\"},\"ENTRP\":{\"symbol\":\"ENTRP\",\"address\":\"0x5bc7e5f0ab8b2e10d2d0a3f21739fce62459aef3\",\"name\":\"Hut34 Entropy Token\",\"decimals\":18,\"color\":\"#fc5c34\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5BC7e5f0Ab8b2E10D2D0a3F21739FCe62459aeF3/logo.png\"},\"MLN\":{\"symbol\":\"MLN\",\"address\":\"0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1\",\"name\":\"Melon\",\"decimals\":18,\"color\":\"#FFFFFF\",\"overlayTextColor\":\"#000\",\"logoURL\":\"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"},\"LOOM\":{\"symbol\":\"LOOM\",\"address\":\"0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0\",\"name\":\"Loom Network Token\",\"decimals\":18,\"color\":\"#449fa5\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA4e8C3Ec456107eA67d3075bF9e3DF3A75823DB0/logo.png\"},\"CELR\":{\"symbol\":\"CELR\",\"address\":\"0x4f9254c83eb525f9fcf346490bbb3ed28a81c667\",\"name\":\"Celer Network Token\",\"decimals\":18,\"color\":\"#7f7f7f\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4F9254C83EB525f9FCf346490bbb3ed28a81C667/logo.png\"},\"RLC\":{\"symbol\":\"RLC\",\"address\":\"0x607f4c5bb672230e8672085532f7e901544a7375\",\"name\":\"iExec RLC Token\",\"decimals\":9,\"color\":\"#f7dd06\",\"overlayTextColor\":\"#000\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x607F4C5BB672230e8672085532f7e901544a7375/logo.png\"},\"ICN\":{\"symbol\":\"ICN\",\"address\":\"0x888666ca69e0f178ded6d75b5726cee99a87d698\",\"name\":\"ICONOMI\",\"decimals\":18,\"color\":\"#148c6c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x888666CA69E0f178DED6D75b5726Cee99A87D698/logo.png\"},\"DGD\":{\"symbol\":\"DGD\",\"address\":\"0xe0b7927c4af23765cb51314a0e0521a9645f0e2a\",\"name\":\"Digix\",\"decimals\":9,\"color\":\"#b49454\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A/logo.png\"},\"ZIL\":{\"symbol\":\"ZIL\",\"address\":\"0x05f4a42e251f2d52b8ed15e9fedaacfcef1fad27\",\"name\":\"Zilliqa\",\"decimals\":12,\"color\":\"#4bc3bc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x05f4a42e251f2d52b8ed15E9FEdAacFcEF1FAD27/logo.png\"},\"cBAT\":{\"symbol\":\"cBAT\",\"address\":\"0x6c8c6b02e7b2be14d4fa6022dfd6d75921d90e4e\",\"name\":\"Compound Basic Attention Token\",\"decimals\":8,\"color\":\"#2bd4a4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E/logo.png\"},\"cDAI\":{\"symbol\":\"cDAI\",\"address\":\"0x5d3a536e4d6dbd6114cc1ead35777bab948e3643\",\"name\":\"Compound Dai\",\"decimals\":8,\"color\":\"#0ccb9c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643/logo.png\"},\"cSAI\":{\"symbol\":\"cSAI\",\"address\":\"0xf5dce57282a584d2746faf1593d3121fcac444dc\",\"name\":\"Compound Sai (Legacy Dai)\",\"decimals\":8,\"color\":\"#2bd4a4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xF5DCe57282A584D2746FaF1593d3121Fcac444dC/logo.png\"},\"cETH\":{\"symbol\":\"cETH\",\"address\":\"0x4ddc2d193948926d02f9b1fe9e1daa0718270ed5\",\"name\":\"Compound Ether\",\"decimals\":8,\"color\":\"#29d4a4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5/logo.png\"},\"cREP\":{\"symbol\":\"cREP\",\"address\":\"0x158079ee67fce2f58472a96584a73c7ab9ac95c1\",\"name\":\"Compound Augur\",\"decimals\":8,\"color\":\"#2bd4a4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1/logo.png\"},\"cUSDC\":{\"symbol\":\"cUSDC\",\"address\":\"0x39aa39c021dfbae8fac545936693ac917d5e7563\",\"name\":\"Compound USD Coin\",\"decimals\":8,\"color\":\"#2bd4a4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x39AA39c021dfbaE8faC545936693aC917d5E7563/logo.png\"},\"cZRX\":{\"symbol\":\"cZRX\",\"address\":\"0xb3319f5d18bc0d84dd1b4825dcde5d5f7266d407\",\"name\":\"Compound 0x\",\"decimals\":8,\"color\":\"#2bd4a4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407/logo.png\"},\"0xBTC\":{\"symbol\":\"0xBTC\",\"address\":\"0xb6ed7644c69416d67b522e20bc294a9a9b405b31\",\"name\":\"0xBitcoin Token\",\"decimals\":8,\"color\":\"#fc7c04\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB6eD7644C69416d67B522e20bC294A9a9B405B31/logo.png\"},\"SNT\":{\"symbol\":\"SNT\",\"address\":\"0x744d70fdbe2ba4cf95131626614a1763df805b9e\",\"name\":\"Status Network Token\",\"decimals\":18,\"color\":\"#4463dc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x744d70FDBE2Ba4CF95131626614a1763DF805B9E/logo.png\"},\"SPANK\":{\"symbol\":\"SPANK\",\"address\":\"0x42d6622dece394b54999fbd73d108123806f6a18\",\"name\":\"SPANK\",\"decimals\":18,\"color\":\"#fc3c84\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x42d6622deCe394b54999Fbd73D108123806f6a18/logo.png\"},\"BOOTY\":{\"symbol\":\"BOOTY\",\"address\":\"0x6b01c3170ae1efebee1a3159172cb3f7a5ecf9e5\",\"name\":\"BOOTY\",\"decimals\":18,\"color\":\"#04b4f4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6B01c3170ae1EFEBEe1a3159172CB3F7A5ECf9E5/logo.png\"},\"UBT\":{\"symbol\":\"UBT\",\"address\":\"0x8400d94a5cb0fa0d041a3788e395285d61c9ee5e\",\"name\":\"UniBright\",\"decimals\":8,\"color\":\"#05a494\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e/logo.png\"},\"ICX\":{\"symbol\":\"ICX\",\"address\":\"0xb5a5f22694352c15b00323844ad545abb2b11028\",\"name\":\"ICON\",\"decimals\":18,\"color\":\"#48a7ae\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xb5A5F22694352C15B00323844aD545ABb2B11028/logo.png\"},\"NMR\":{\"symbol\":\"NMR\",\"address\":\"0x1776e1f26f98b1a5df9cd347953a26dd3cb46671\",\"name\":\"Numeraire\",\"decimals\":18,\"color\":\"#3f3fbf\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671/logo.png\"},\"GUSD\":{\"symbol\":\"GUSD\",\"address\":\"0x056fd409e1d7a124bd7017459dfea2f387b6d5cd\",\"name\":\"Gemini Dollar\",\"decimals\":2,\"color\":\"#04dcfc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd/logo.png\"},\"FUN\":{\"symbol\":\"FUN\",\"address\":\"0x419d0d8bdd9af5e606ae2232ed285aff190e711b\",\"name\":\"FunFair\",\"decimals\":8,\"color\":\"#ec345c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b/logo.png\"},\"PAX\":{\"symbol\":\"PAX\",\"address\":\"0x8e870d67f660d95d5be530380d0ec0bd388289e1\",\"name\":\"PAX Stablecoin\",\"decimals\":18,\"color\":\"#0693d2\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8E870D67F660D95d5be530380D0eC0bd388289E1/logo.png\"},\"TUSD\":{\"symbol\":\"TUSD\",\"address\":\"0x0000000000085d4780b73119b644ae5ecd22b376\",\"name\":\"TrueUSD\",\"decimals\":18,\"color\":\"#1c5cfc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0000000000085d4780B73119b644AE5ecd22b376/logo.png\"},\"LPT\":{\"symbol\":\"LPT\",\"address\":\"0x58b6a8a3302369daec383334672404ee733ab239\",\"name\":\"Livepeer\",\"decimals\":18,\"color\":\"#7f7f7f\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x58b6A8A3302369DAEc383334672404Ee733aB239/logo.png\"},\"ENJ\":{\"symbol\":\"ENJ\",\"address\":\"0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c\",\"name\":\"EnjinCoin\",\"decimals\":18,\"color\":\"#04fcf1\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c/logo.png\"},\"POWR\":{\"symbol\":\"POWR\",\"address\":\"0x595832f8fc6bf59c85c527fec3740a1b7a361269\",\"name\":\"PowerLedger\",\"decimals\":6,\"color\":\"#17baaa\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x595832F8FC6BF59c85C527fEC3740A1b7a361269/logo.png\"},\"REQ\":{\"symbol\":\"REQ\",\"address\":\"0x8f8221afbb33998d8584a2b05749ba73c37a938a\",\"name\":\"Request\",\"decimals\":18,\"color\":\"#04e3a3\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x8f8221aFbB33998d8584A2B05749bA73c37a938a/logo.png\"},\"DNT\":{\"symbol\":\"DNT\",\"address\":\"0x0abdace70d3790235af448c88547603b945604ea\",\"name\":\"district0x\",\"decimals\":18,\"color\":\"#2c3c8c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0AbdAce70D3790235af448C88547603b945604ea/logo.png\"},\"MATIC\":{\"symbol\":\"MATIC\",\"address\":\"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0\",\"name\":\"Matic Network Token\",\"decimals\":18,\"color\":\"#2c94fc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0/logo.png\"},\"LRC\":{\"symbol\":\"LRC\",\"address\":\"0xbbbbca6a901c926f240b89eacb641d8aec7aeafd\",\"name\":\"Loopring\",\"decimals\":18,\"color\":\"#2c64f4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD/logo.png\"},\"RDN\":{\"symbol\":\"RDN\",\"address\":\"0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6\",\"name\":\"Raiden Network Token\",\"decimals\":18,\"color\":\"#3f3fbf\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x255Aa6DF07540Cb5d3d297f0D0D4D84cb52bc8e6/logo.png\"},\"USDT\":{\"symbol\":\"USDT\",\"address\":\"0xdac17f958d2ee523a2206206994597c13d831ec7\",\"name\":\"Tether USD\",\"decimals\":6,\"color\":\"#24a47c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xdAC17F958D2ee523a2206206994597C13D831ec7/logo.png\"},\"GST2\":{\"symbol\":\"GST2\",\"address\":\"0x0000000000b3f879cb30fe243b4dfee438691c04\",\"name\":\"Gas Token 2\",\"decimals\":2,\"color\":\"#7e7e80\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0000000000b3F879cb30FE243b4Dfee438691c04/logo.png\"},\"COMP\":{\"symbol\":\"COMP\",\"address\":\"0xc00e94cb662c3520282e6f5717214004a7f26888\",\"name\":\"Compound\",\"decimals\":18,\"color\":\"#04d494\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xc00e94Cb662C3520282E6f5717214004A7f26888/logo.png\"},\"UMA\":{\"symbol\":\"UMA\",\"address\":\"0x04fa0d235c4abf4bcf4787af4cf447de572ef828\",\"name\":\"Universal Market Access\",\"decimals\":18,\"color\":\"#fc4c4c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x04Fa0d235C4abf4BcF4787aF4CF447DE572eF828/logo.png\"},\"BZRX\":{\"symbol\":\"BZRX\",\"address\":\"0x56d811088235f11c8920698a204a5010a788f4b3\",\"name\":\"bZx Protocol Token\",\"decimals\":18,\"color\":\"#0443dc\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x56d811088235F11C8920698a204A5010a788f4b3/logo.png\"},\"renBTC\":{\"symbol\":\"renBTC\",\"address\":\"0xeb4c2781e4eba804ce9a9803c67d0893436bb27d\",\"name\":\"renBTC\",\"decimals\":8,\"color\":\"#7a7a84\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D/logo.png\"},\"BAL\":{\"symbol\":\"BAL\",\"address\":\"0xba100000625a3754423978a60c9317c58a424e3d\",\"name\":\"Balancer\",\"decimals\":18,\"color\":\"#7f7f7f\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xba100000625a3754423978a60c9317c58a424e3D/logo.png\"},\"LEND\":{\"symbol\":\"LEND\",\"address\":\"0x80fb784b7ed66730e8b1dbd9820afd29931aab03\",\"name\":\"Aave\",\"decimals\":18,\"color\":\"#FFFFFF\",\"overlayTextColor\":\"#000\",\"logoURL\":\"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"},\"YFI\":{\"symbol\":\"YFI\",\"address\":\"0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e\",\"name\":\"yearn.finance\",\"decimals\":18,\"color\":\"#0472f4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e/logo.png\"},\"AMPL\":{\"symbol\":\"AMPL\",\"address\":\"0xd46ba6d942050d489dbd938a2c909a5d5039a161\",\"name\":\"Ampleforth\",\"decimals\":9,\"color\":\"#7f7f7f\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD46bA6D942050d489DBd938a2C909A5d5039A161/logo.png\"},\"KEEP\":{\"symbol\":\"KEEP\",\"address\":\"0x85eee30c52b0b379b046fb0f85f4f3dc3009afec\",\"name\":\"Keep\",\"decimals\":18,\"color\":\"#4bdbb3\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x85Eee30c52B0b379b046Fb0F85F4f3Dc3009aFEC/logo.png\"},\"mUSD\":{\"symbol\":\"mUSD\",\"address\":\"0xe2f2a5c287993345a840db3b0845fbc70f5935a5\",\"name\":\"mStable USD\",\"decimals\":18,\"color\":\"#7f7f7f\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xe2f2a5C287993345a840Db3B0845fbC70f5935a5/logo.png\"},\"BUSD\":{\"symbol\":\"BUSD\",\"address\":\"0x4Fabb145d64652a948d72533023f6E7A623C7C53\",\"name\":\"Binance USD\",\"decimals\":18,\"color\":\"#f4bc0c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x4Fabb145d64652a948d72533023f6E7A623C7C53/logo.png\"},\"CRV\":{\"symbol\":\"CRV\",\"address\":\"0xd533a949740bb3306d119cc777fa900ba034cd52\",\"name\":\"Curve DAO Token\",\"decimals\":18,\"color\":\"#fb9304\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xD533a949740bb3306d119CC777fa900bA034cd52/logo.png\"},\"SUSHI\":{\"symbol\":\"SUSHI\",\"address\":\"0x6b3595068778dd592e39a122f4f5a5cf09c90fe2\",\"name\":\"Sushi\",\"decimals\":18,\"color\":\"#f855a4\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6B3595068778DD592e39A122f4f5a5cF09C90fE2/logo.png\"},\"swUSD\":{\"symbol\":\"swUSD\",\"address\":\"0x77C6E4a580c0dCE4E5c7a17d0bc077188a83A059\",\"name\":\"Swerve.fi swUSD\",\"decimals\":18,\"color\":\"#FFFFFF\",\"overlayTextColor\":\"#000\",\"logoURL\":\"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"},\"SWRV\":{\"symbol\":\"SWRV\",\"address\":\"0xB8BAa0e4287890a5F79863aB62b7F175ceCbD433\",\"name\":\"Swerve DAO Token\",\"decimals\":18,\"color\":\"#7d8181\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xB8BAa0e4287890a5F79863aB62b7F175ceCbD433/logo.png\"},\"sBTC\":{\"symbol\":\"sBTC\",\"address\":\"0xfe18be6b3bd88a2d2a7f928d00292e7a9963cfc6\",\"name\":\"Synth sBTC\",\"decimals\":18,\"color\":\"#FFFFFF\",\"overlayTextColor\":\"#000\",\"logoURL\":\"https://raw.githubusercontent.com/feathericons/feather/master/icons/help-circle.svg\"},\"UNI\":{\"symbol\":\"UNI\",\"address\":\"0x1f9840a85d5af5bf1d1762f925bdaddc4201f984\",\"name\":\"Uniswap Protocol Governance Token\",\"decimals\":18,\"color\":\"#fc067c\",\"overlayTextColor\":\"#fff\",\"logoURL\":\"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984/logo.png\"}}"
  },
  {
    "path": "src/utils/apyUtils.ts",
    "content": "export const convertMantissaToAPY = (mantissa: any, dayRange: number) => {\n  return (Math.pow((mantissa / 1e18) * 6500 + 1, dayRange) - 1) * 100;\n};\n\nexport const convertMantissaToAPR = (mantissa: any) => {\n  return (mantissa * 2372500) / 1e16;\n};\n\n// for supply-side rewards apy:\n// export const\n// convertMantissaToAPY((rewardSupplySpeed * rewardEthPrice) / (totalSupply * underlyingEthPrice))\n\n//  - CToken\n// -\n\n// for borrow-side rewards apy:\n// convertMantissaToAPY((rewardBorrowSpeed * rewardEthPrice) / (totalBorrow * underlyingEthPrice))\n"
  },
  {
    "path": "src/utils/bigUtils.ts",
    "content": "import Web3 from \"web3\";\n\nconst formatter = Intl.NumberFormat(\"en-US\", {\n  style: \"currency\",\n  currency: \"USD\",\n  minimumFractionDigits: 5,\n  maximumFractionDigits: 5,\n});\n\nconst smallFormatter = Intl.NumberFormat(\"en-US\", {\n  style: \"currency\",\n  currency: \"USD\",\n  minimumFractionDigits: 2,\n  maximumFractionDigits: 2,\n});\n\nconst shortFormatter = new Intl.NumberFormat(\"en-US\", {\n  maximumFractionDigits: 1,\n  notation: \"compact\",\n});\n\nexport function smallStringUsdFormatter(num: string | number) {\n\n  return smallFormatter.format(parseFloat(num.toString()));\n}\n\nexport function stringUsdFormatter(num: string) {\n  return formatter.format(parseFloat(num));\n}\n\nexport function smallUsdFormatter(num: number) {\n  return smallFormatter.format(num);\n}\n\nexport function usdFormatter(num: number) {\n  return formatter.format(num);\n}\n\nexport function shortUsdFormatter(num: number) {\n  return \"$\" + shortFormatter.format(num);\n}\n\nexport const toBN = Web3.utils.toBN;\n\nexport type BN = ReturnType<typeof toBN>;\n"
  },
  {
    "path": "src/utils/chakraUtils.tsx",
    "content": "import React, { useState, useEffect } from \"react\";\nimport { Flex, FlexProps } from \"@chakra-ui/react\";\n\n/* Typings */\nexport type MainAxisAlignmentStrings =\n  | \"space-between\"\n  | \"space-around\"\n  | \"flex-start\"\n  | \"center\"\n  | \"flex-end\";\n\nexport type MainAxisAlignment =\n  | MainAxisAlignmentStrings\n  | { md: MainAxisAlignmentStrings; base: MainAxisAlignmentStrings };\n\nexport type CrossAxisAlignmentStrings =\n  | \"flex-start\"\n  | \"center\"\n  | \"flex-end\"\n  | \"stretch\";\n\nexport type CrossAxisAlignment =\n  | CrossAxisAlignmentStrings\n  | {\n      md: CrossAxisAlignmentStrings;\n      base: CrossAxisAlignmentStrings;\n    };\n\nexport class PixelMeasurement {\n  size: number;\n\n  constructor(num: number) {\n    this.size = num;\n  }\n\n  asPxString(): string {\n    return this.size + \"px\";\n  }\n\n  toString(): string {\n    return this.asPxString();\n  }\n\n  asNumber(): number {\n    return this.size;\n  }\n}\n\n\nexport class PercentageSize {\n  percent: number\n\n  constructor(num: number) {\n    if (num > 1) {\n      throw new Error('Cannot have a percentage higher than 1!')\n    }\n\n    this.percent = num\n  }\n}\n\nexport class PercentOnDesktopPixelOnMobileSize {\n  percent: number\n  pixel: number\n\n  constructor({\n    percentageSize,\n    pixelSize\n  }: {\n    percentageSize: number\n    pixelSize: number\n  }) {\n    if (percentageSize > 1) {\n      throw new Error('Cannot have a percentage higher than 1!')\n    }\n\n    this.percent = percentageSize\n    this.pixel = pixelSize\n  }\n}\n\nexport class PixelSize {\n  pixel: number\n\n  constructor(num: number) {\n    this.pixel = num\n  }\n}\n\nexport class ResponsivePixelSize {\n  desktop: number\n  mobile: number\n\n  constructor({ desktop, mobile }: { desktop: number; mobile: number }) {\n    this.mobile = mobile\n    this.desktop = desktop\n  }\n}\n\n/**************************************\n *\n *\n *  Components\n *    - Center.tsx\n *    - Column.tsx\n *    - Row.tsx\n *    - RowOnDesktopColumnOnMobile.tsx\n *    - RowOrColumn.tsx\n *\n ***************************************\n */\n\n/**\n *  Center.tsx\n *\n *  Creates a Flex where `justifyContent === 'center'` and `alignItems === 'center'`\n * If `expand === true` it will set the height and width of the Flex to 100%.\n * Passes all extra props to the Flex.\n */\n\nexport type CenterProps = {\n  children: React.ReactNode;\n  expand?: boolean;\n} & FlexProps;\n\nexport const Center = ({ children, expand, ...others }: CenterProps) => {\n  if (expand) {\n    others.height = \"100%\";\n    others.width = \"100%\";\n  }\n\n  return (\n    <Flex justifyContent=\"center\" alignItems=\"center\" {...others}>\n      {children}\n    </Flex>\n  );\n};\n\n/**\n * Column.tsx\n *\n * Creates a Flex with a column direction\n * and sets the `justifyContent` to the `mainAxisAlignment`\n * and the `alignItems` to the `crossAxisAlignment`.\n * If `expand === true` it will set the height and width of the Flex to 100%.\n * Passes all extra props to the Flex.\n */\n\nexport type ColumnProps = {\n  mainAxisAlignment: MainAxisAlignment;\n  crossAxisAlignment: CrossAxisAlignment;\n  children: React.ReactNode;\n  expand?: boolean;\n} & FlexProps;\n\nexport const Column = ({\n  mainAxisAlignment,\n  crossAxisAlignment,\n  children,\n  expand,\n  ...others\n}: ColumnProps) => {\n  if (expand) {\n    others.height = \"100%\";\n    others.width = \"100%\";\n  }\n\n  return (\n    <Flex\n      flexDirection=\"column\"\n      justifyContent={mainAxisAlignment}\n      alignItems={crossAxisAlignment}\n      {...others}\n    >\n      {children}\n    </Flex>\n  );\n};\n\n/**\n * Row.tsx\n *\n * Creates a Flex with a row direction\n * and sets the `justifyContent` to the `mainAxisAlignment`\n * and the `alignItems` to the `crossAxisAlignment`.\n * If `expand === true` it will set the height and width of the Flex to 100%.\n * Passes all extra props to the Flex.\n */\n\nexport type RowProps = {\n  mainAxisAlignment: MainAxisAlignment;\n  crossAxisAlignment: CrossAxisAlignment;\n  children: React.ReactNode;\n  expand?: boolean;\n} & FlexProps;\n\nexport const Row = ({\n  mainAxisAlignment,\n  crossAxisAlignment,\n  children,\n  expand,\n  ...others\n}: RowProps) => {\n  if (expand) {\n    others.height = \"100%\";\n    others.width = \"100%\";\n  }\n\n  return (\n    <Flex\n      flexDirection=\"row\"\n      justifyContent={mainAxisAlignment}\n      alignItems={crossAxisAlignment}\n      {...others}\n    >\n      {children}\n    </Flex>\n  );\n};\n\n\n/** \n *  RowOnDesktopColumnOnMobile.tsx\n * \n * Creates a Flex with a row direction on desktop and a column direction on mobile.\n * and sets the `justifyContent` to the `mainAxisAlignment`\n * and the `alignItems` to the `crossAxisAlignment`.\n * If `expand === true` it will set the height and width of the Flex to 100%.\n * Passes all extra props to the Flex.\n */\n export const RowOnDesktopColumnOnMobile = ({\n  mainAxisAlignment,\n  crossAxisAlignment,\n  children,\n  expand,\n  ...others\n}: RowProps) => {\n  if (expand) {\n    others.height = '100%'\n    others.width = '100%'\n  }\n\n  return (\n    <Flex\n      flexDirection={{ md: 'row', base: 'column' }}\n      justifyContent={mainAxisAlignment}\n      alignItems={crossAxisAlignment}\n      {...others}\n    >\n      {children}\n    </Flex>\n  )\n}\n\n/** \n * RowOrColumn.tsx\n * \n * Creates a Flex which will be a row if `isRow` is true\n * and sets the `justifyContent` to the `mainAxisAlignment`\n * and the `alignItems` to the `crossAxisAlignment`.\n * If `expand === true` it will set the height and width of the Flex to 100%.\n * Passes all extra props to the Flex.\n */\n export const RowOrColumn = ({\n  mainAxisAlignment,\n  crossAxisAlignment,\n  children,\n  expand,\n  isRow,\n  ...others\n}: RowProps & { isRow: boolean }) => {\n  if (expand) {\n    others.height = '100%'\n    others.width = '100%'\n  }\n\n  return (\n    <Flex\n      flexDirection={isRow ? 'row' : 'column'}\n      justifyContent={mainAxisAlignment}\n      alignItems={crossAxisAlignment}\n      {...others}\n    >\n      {children}\n    </Flex>\n  )\n}\n\n/**************************************\n *\n *\n *  Hooks\n *    - useWindowSize.ts\n *    - useLockedViewHeight.ts\n *    - useIsMobile.ts\n *    - useSpacedLayout.ts\n *\n ***************************************\n */\n\n\n/** \n * useWindowSize.ts\n * \n * Gets the height and width of the current window. \n */\nexport const useWindowSize = () => {\n\n  const [windowSize, setWindowSize] = useState({\n    width: window.innerWidth,\n    height: window.innerHeight\n  })\n\n  useEffect(() => {\n    // Handler to call on window resize\n    function handleResize() {\n      // Set window width/height to state\n      setWindowSize({\n        width: window.innerWidth,\n        height: window.innerHeight\n      })\n    }\n\n    // Add event listener\n    window.addEventListener('resize', handleResize)\n\n    // Call handler right away so state gets updated with initial window size\n    handleResize()\n\n    // Remove event listener on cleanup\n    return () => window.removeEventListener('resize', handleResize)\n  }, []) // Empty array ensures that effect is only run on mount\n\n  return windowSize\n}\n\n/** \n * useLockedViewHeight.ts\n * \n * Returns the pixel count of the height of the window,\n * but will not return a value lower or higher than the minimum/maximum passed.\n */\nexport function useLockedViewHeight({\n  min = -1,\n  max = Number.MAX_SAFE_INTEGER\n}: {\n  min?: number\n  max?: number\n}) {\n  const { height } = useWindowSize()\n\n  if (height <= min) {\n    return {\n      windowHeight: new PixelMeasurement(min),\n      isLocked: true\n    }\n  } else if (height >= max) {\n    return {\n      windowHeight: new PixelMeasurement(max),\n      isLocked: true\n    }\n  } else {\n    return {\n      windowHeight: new PixelMeasurement(height),\n      isLocked: false\n    }\n  }\n}\n\n/** \n * useIsMobile.ts\n * \n * Returns whether the width of the window makes it likely a mobile device. \n * */\nexport function useIsMobile() {\n  const { width } = useWindowSize()\n\n  return width < 768\n}\n\n\n/** \n * useSpacedLayout.ts\n * \n * Takes the height of the parent, the desired spacing between children,\n * and the desired percentage sizes of the children (relative to their parent minus the spacing desired and the size of fixed sized children)\n * or the size of the child in pixels\n * and returns the pixel size of each child\n * that makes that child conform to the desired percentage.\n */\n export function useSpacedLayout({\n  parentHeight,\n  spacing,\n  childSizes\n}: {\n  parentHeight: number\n  spacing: number\n  childSizes: (\n    | PercentageSize\n    | PercentOnDesktopPixelOnMobileSize\n    | PixelSize\n    | ResponsivePixelSize\n  )[]\n}) {\n  const isMobile = useIsMobile()\n\n  let parentMinusSpacingAndFixedChildSizes =\n    parentHeight -\n    spacing * (childSizes.length - 1) -\n    childSizes.reduce((past, value) => {\n      if (\n        value instanceof PixelSize ||\n        (value instanceof PercentOnDesktopPixelOnMobileSize && isMobile)\n      ) {\n        return past + value.pixel\n      } else if (value instanceof ResponsivePixelSize) {\n        return past + (isMobile ? value.mobile : value.desktop)\n      } else {\n        return past\n      }\n    }, 0)\n\n  let spacedChildren: PixelMeasurement[] = []\n\n  for (const size of childSizes) {\n    if (\n      size instanceof PercentageSize ||\n      (size instanceof PercentOnDesktopPixelOnMobileSize && !isMobile)\n    ) {\n      spacedChildren.push(\n        new PixelMeasurement(\n          size.percent * parentMinusSpacingAndFixedChildSizes\n        )\n      )\n    } else if (size instanceof PercentOnDesktopPixelOnMobileSize && isMobile) {\n      spacedChildren.push(new PixelMeasurement(size.pixel))\n    } else if (size instanceof ResponsivePixelSize) {\n      spacedChildren.push(\n        new PixelMeasurement(isMobile ? size.mobile : size.desktop)\n      )\n    } else {\n      spacedChildren.push(new PixelMeasurement(size.pixel))\n    }\n  }\n\n  return {\n    parentHeight: new PixelMeasurement(parentHeight),\n    spacing: new PixelMeasurement(spacing),\n    childSizes: spacedChildren\n  }\n}\n"
  },
  {
    "path": "src/utils/chartOptions.ts",
    "content": "import { ApexOptions } from \"apexcharts\";\nimport { smallStringUsdFormatter } from \"./bigUtils\";\n\nexport const LineChartOptions: ApexOptions = {\n  chart: {\n    foreColor: \"#a19f9f\",\n    animations: {\n      enabled: false,\n    },\n\n    dropShadow: {\n      // This looks nice, try it!\n      enabled: false,\n    },\n\n    toolbar: {\n      show: false,\n    },\n\n    selection: {\n      enabled: false,\n    },\n\n    zoom: {\n      enabled: false,\n    },\n  },\n\n  stroke: {\n    curve: \"smooth\",\n  },\n\n  colors: [\"#FFFFFF\", \"#007D43\", \"#F4CD00\", \"#F83536\"],\n\n  grid: {\n    yaxis: {\n      lines: {\n        show: false,\n      },\n    },\n  },\n\n  dataLabels: {\n    enabled: false,\n  },\n\n  legend: {\n    position: \"top\",\n    horizontalAlign: \"left\",\n    showForSingleSeries: false,\n  },\n\n  yaxis: {\n    labels: {\n      style: {\n        fontSize: \"13px\",\n      },\n    },\n  },\n};\n\nexport const PoolReturnChartOptions: ApexOptions = {\n  ...LineChartOptions,\n\n  grid: {\n    ...LineChartOptions.grid,\n    padding: {\n      bottom: -15,\n    },\n  },\n\n  stroke: {\n    lineCap: \"round\",\n  },\n\n  xaxis: {\n    tickAmount: 12,\n    labels: {\n      style: {\n        fontSize: \"8px\",\n      },\n    },\n  },\n\n  yaxis: {\n    labels: {\n      // @ts-ignore\n      ...LineChartOptions.yaxis.labels,\n      formatter: function (value: string) {\n        return \"$\" + parseFloat(value).toFixed(2);\n      },\n    },\n  },\n};\n\nexport const USDSelfReturnChartOptions: ApexOptions = {\n  ...PoolReturnChartOptions,\n  grid: {\n    ...PoolReturnChartOptions.grid,\n    padding: {\n      // No legend so we need to remove the top padding.\n      // This will not shift anything up, just increases the size of the chart to expand vertically.\n      top: -15,\n    },\n  },\n};\n\nexport const ETHSelfReturnChartOptions: ApexOptions = {\n  ...USDSelfReturnChartOptions,\n  yaxis: {\n    labels: {\n      // @ts-ignore\n      ...USDSelfReturnChartOptions.yaxis.labels,\n      formatter: function (value: string) {\n        return smallStringUsdFormatter(value).replace(\"$\", \"\") + \" ETH\";\n      },\n    },\n  },\n};\n\nexport const USDStrategyAllocationChartOptions: ApexOptions = {\n  chart: {\n    foreColor: \"#a19f9f\",\n    animations: {\n      enabled: false,\n    },\n\n    toolbar: {\n      show: false,\n    },\n  },\n\n  plotOptions: {\n    pie: {\n      expandOnClick: false,\n      dataLabels: {\n        offset: -15,\n        minAngleToShowLabel: 20,\n      },\n    },\n  },\n\n  yaxis: {\n    labels: {\n      // @ts-ignore\n      ...LineChartOptions.yaxis.labels,\n      formatter: function (value: string) {\n        return smallStringUsdFormatter(value);\n      },\n    },\n  },\n\n  states: {\n    hover: {\n      filter: {\n        type: \"none\",\n        value: 0,\n      },\n    },\n  },\n\n  legend: {\n    fontSize: \"10px\",\n  },\n\n  dataLabels: {\n    dropShadow: {\n      enabled: false,\n    },\n  },\n\n  stroke: {\n    show: false,\n  },\n\n  colors: [\"#282828\", \"#929292\", \"#5E5E5E\", \"#4C4C4C\", \"#343434\"],\n};\n\nexport const ETHStrategyAllocationChartOptions: ApexOptions = {\n  ...USDStrategyAllocationChartOptions,\n  yaxis: {\n    labels: {\n      // @ts-ignore\n      ...USDStrategyAllocationChartOptions.yaxis.labels,\n      formatter: function (value: string) {\n        return smallStringUsdFormatter(value).replace(\"$\", \"\") + \" ETH\";\n      },\n    },\n  },\n};\n\nexport const DisableChartInteractions: ApexOptions = {\n  tooltip: {\n    enabled: false,\n  },\n};\n\nexport const InterestRateChartOptions: ApexOptions = {\n  ...LineChartOptions,\n\n  stroke: {\n    curve: \"straight\",\n    lineCap: \"round\",\n  },\n\n  grid: {\n    ...LineChartOptions.grid,\n    padding: {\n      top: -50,\n    },\n  },\n\n  dataLabels: {\n    enabled: false,\n  },\n\n  legend: {\n    show: false,\n  },\n\n  tooltip: {\n    x: {\n      formatter: function (value: number) {\n        return parseFloat(value as any).toFixed(2) + \"% Utilization\";\n      },\n    },\n  },\n\n  yaxis: {\n    show: false,\n    labels: {\n      // @ts-ignore\n      ...LineChartOptions.yaxis.labels,\n      formatter: function (value: string) {\n        return parseFloat(value).toFixed(2) + \"%\";\n      },\n    },\n  },\n\n  xaxis: {\n    axisBorder: {\n      show: false,\n    },\n    axisTicks: {\n      show: false,\n    },\n    labels: {\n      show: false,\n      // @ts-ignore\n      ...LineChartOptions.yaxis.labels,\n      formatter: function (value: string) {\n        return parseFloat(value).toFixed(2) + \"%\";\n      },\n    },\n  },\n};\n\nexport const FuseUtilizationChartOptions: ApexOptions = {\n  ...InterestRateChartOptions,\n\n  grid: {\n    ...LineChartOptions.grid,\n  },\n};\n\nexport const FuseIRMDemoChartOptions: ApexOptions = {\n  ...InterestRateChartOptions,\n\n  grid: {\n    ...LineChartOptions.grid,\n    padding: {\n      top: -30,\n    },\n  },\n};\n"
  },
  {
    "path": "src/utils/createComptroller.ts",
    "content": "// Fuse\nimport Fuse from \"../fuse-sdk\";\nimport ERC20ABI from \"../rari-sdk/abi/ERC20.json\";\n\n// Web3\nimport { Contract } from \"web3-eth-contract\";\nimport Web3 from \"web3\";\nimport { alchemyURL } from \"./web3Providers\";\n\nexport const createComptroller = (\n  comptrollerAddress: string,\n  fuse: Fuse\n): Contract => {\n  \n  const comptroller = new fuse.web3.eth.Contract(\n    JSON.parse(\n      fuse.compoundContracts[\"contracts/Comptroller.sol:Comptroller\"].abi\n    ),\n    comptrollerAddress\n  );\n// @ts-ignore\n  return comptroller;\n};\n\nexport const createUnitroller = (\n  unitrollerAddress: string,\n  fuse: Fuse\n): Contract => {\n  \n  const unitroller = new fuse.web3.eth.Contract(\n    JSON.parse(\n      fuse.compoundContracts[\"contracts/Unitroller.sol:Unitroller\"].abi\n    ),\n    unitrollerAddress\n  );\n// @ts-ignore\n  return unitroller;\n};\n\nexport const createRewardsDistributor = (\n  distributorAddress: string,\n  fuse: Fuse\n) => {\n  //   Create instance of contract\n  \n  const rewardsDistributorInstance = new fuse.web3.eth.Contract(\n    JSON.parse(\n      fuse.compoundContracts[\n        \"contracts/RewardsDistributorDelegate.sol:RewardsDistributorDelegate\"\n      ].abi\n    ),\n    distributorAddress\n  );\n\n  return rewardsDistributorInstance;\n};\n\nexport const createOracle = (\n  oracleAddress: string,\n  fuse: Fuse,\n  type: string\n): Contract => {\n\n  \n  const oracle = new fuse.web3.eth.Contract(\n    fuse.oracleContracts[type].abi,\n    oracleAddress\n  );\n// @ts-ignore\n  return oracle;\n};\n\nexport const createCToken = (fuse: Fuse, cTokenAddress: string) => {\n  \n  const cErc20Delegate = new fuse.web3.eth.Contract(\n    JSON.parse(\n      fuse.compoundContracts[\"contracts/CErc20Delegate.sol:CErc20Delegate\"].abi\n    ),\n    cTokenAddress\n  );\n\n  return cErc20Delegate;\n};\n\nexport const createERC20 = (fuse: Fuse, cTokenAddress: string) => {\n  \n  const erc20 = new fuse.web3.eth.Contract(ERC20ABI as any, cTokenAddress);\n  return erc20;\n};\n\nexport const createMasterPriceOracle = (fuse: Fuse) => {\n  \n  const masterPriceOracle = new fuse.web3.eth.Contract(\n    fuse.oracleContracts[\"MasterPriceOracle\"].abi,\n    Fuse.PUBLIC_PRICE_ORACLE_CONTRACT_ADDRESSES.MasterPriceOracle\n  );\n  return masterPriceOracle;\n};\n"
  },
  {
    "path": "src/utils/errorHandling.ts",
    "content": "import LogRocket from \"logrocket\";\n\nexport const handleGenericError = (e: any, toast: (input: any) => any) => {\n  console.log(e);\n  let message: string;\n\n  if (e instanceof Error) {\n    message = e.toString();\n    LogRocket.captureException(e);\n  } else {\n    message = e.message ?? JSON.stringify(e);\n    LogRocket.captureException(new Error(message));\n  }\n\n  toast({\n    title: \"Error!\",\n    description: message,\n    status: \"error\",\n    duration: 9000,\n    isClosable: true,\n    position: \"top-right\",\n  });\n};\n"
  },
  {
    "path": "src/utils/fetchFusePoolData.ts",
    "content": "import Fuse from \"../fuse-sdk\";\nimport Rari from \"../rari-sdk/index\";\n\n// @ts-ignore\nimport Filter from \"bad-words\";\nimport { TokenData } from \"hooks/useTokenData\";\nimport { createComptroller } from \"./createComptroller\";\n\nexport const filter = new Filter({ placeHolder: \" \" });\nfilter.addWords(...[\"R1\", \"R2\", \"R3\", \"R4\", \"R5\", \"R6\", \"R7\"]);\n\nexport function filterOnlyObjectProperties(obj: any) {\n  return Object.fromEntries(\n    Object.entries(obj).filter(([k]) => isNaN(k as any))\n  ) as any;\n}\n\nexport interface FuseAsset {\n  cToken: string;\n\n  borrowBalance: number;\n  supplyBalance: number;\n  liquidity: number;\n\n  membership: boolean;\n\n  underlyingName: string;\n  underlyingSymbol: string;\n  underlyingToken: string;\n  underlyingDecimals: number;\n  underlyingPrice: number;\n  underlyingBalance: number;\n\n  collateralFactor: number;\n  reserveFactor: number;\n\n  adminFee: number;\n  fuseFee: number;\n  oracle: string;\n\n  borrowRatePerBlock: number;\n  supplyRatePerBlock: number;\n\n  totalBorrow: number;\n  totalSupply: number;\n}\n\nexport interface USDPricedFuseAsset extends FuseAsset {\n  supplyBalanceUSD: number;\n  borrowBalanceUSD: number;\n\n  totalSupplyUSD: number;\n  totalBorrowUSD: number;\n\n  liquidityUSD: number;\n\n  isPaused: boolean;\n}\n\nexport interface USDPricedFuseAssetWithTokenData extends USDPricedFuseAsset {\n  tokenData: TokenData;\n}\n\nexport interface FusePoolData {\n  assets: USDPricedFuseAssetWithTokenData[] | USDPricedFuseAsset[];\n  comptroller: any;\n  name: any;\n  oracle: string;\n  oracleModel: string | undefined;\n  isPrivate: boolean;\n  totalLiquidityUSD: any;\n  totalSuppliedUSD: any;\n  totalBorrowedUSD: any;\n  totalSupplyBalanceUSD: any;\n  totalBorrowBalanceUSD: any;\n  id?: number;\n  admin: string;\n  isAdminWhitelisted: boolean;\n}\n\nexport enum FusePoolMetric {\n  TotalLiquidityUSD,\n  TotalSuppliedUSD,\n  TotalBorrowedUSD,\n}\n\nexport const filterPoolName = (name: string) => {\n  if (name === \"Tetranode's Pool\") {\n    return \"Tetranode's Locker\";\n  }\n\n  if (name === \"state's pool\") {\n    return \"Ribbon Pool\";\n  }\n\n  if (name === \"Stake DAO Pool\") {\n    return \"The Animal Kingdom\";\n  }\n\n  if (name === \"Tetranode's ETH Pool\") {\n    return \"ChainLinkGod's / Tetranode's Up Only Pool\";\n  }\n\n  if (name === \"Tetranode's Flavor of the Month\") {\n    return \"FeiRari (Fei DAO Pool)\";\n  }\n\n  if (name === \"WOO pool\") {\n    return \"Warlord's WOO Pool\";\n  }\n\n  if (name === \"Yearn's Yield\") {\n    return \"Yearn Soup Pot of Yield\";\n  }\n\n  return filter.clean(name + \"$W@G0N0M1C$\").replace(\"$W@G0N0M1C$\", \"\");\n};\n\nexport const fetchFusePoolData = async (\n  poolId: string | undefined,\n  address: string,\n  fuse: Fuse,\n  rari?: Rari\n): Promise<FusePoolData | undefined> => {\n  if (!poolId) return undefined;\n  const {\n    comptroller,\n    name: _unfiliteredName,\n    isPrivate,\n  } = await fuse.contracts.FusePoolDirectory.methods\n    .pools(poolId)\n    .call({ from: address });\n\n  // Remove any profanity from the pool name\n  let name = filterPoolName(_unfiliteredName);\n\n  let assets: USDPricedFuseAsset[] = (\n    await fuse.contracts.FusePoolLens.methods\n      .getPoolAssetsWithData(comptroller)\n      .call({ from: address, gas: 1e18 }) \n  ).map(filterOnlyObjectProperties);\n\n  let totalLiquidityUSD = 0;\n\n  let totalSupplyBalanceUSD = 0;\n  let totalBorrowBalanceUSD = 0;\n\n  let totalSuppliedUSD = 0;\n  let totalBorrowedUSD = 0;\n\n  const ethPrice: number = fuse.web3.utils.fromWei(\n    // prefer rari because it has caching\n    await (rari ?? fuse).getEthUsdPriceBN()\n  ) as any;\n\n  let promises = [];\n  const comptrollerContract = createComptroller(comptroller, fuse);\n\n  let oracle: string = await comptrollerContract.methods.oracle().call();\n\n  let oracleModel: string | undefined = await fuse.getPriceOracle(oracle);\n\n  const admin = await comptrollerContract.methods.admin().call();\n\n  // Whitelisted (Verified)\n  const isAdminWhitelisted = await fuse.contracts.FusePoolDirectory.methods\n    .adminWhitelist(admin)\n    .call();\n\n  console.log({ assets });\n\n  for (let i = 0; i < assets.length; i++) {\n    let asset = assets[i];\n\n    promises.push(\n      comptrollerContract.methods\n        .borrowGuardianPaused(asset.cToken)\n        .call()\n        // TODO: THIS WILL BE BUILT INTO THE LENS\n        .then((isPaused: boolean) => (asset.isPaused = isPaused))\n    );\n\n    asset.supplyBalanceUSD =\n      ((asset.supplyBalance * asset.underlyingPrice) / 1e36) * ethPrice;\n\n    asset.borrowBalanceUSD =\n      ((asset.borrowBalance * asset.underlyingPrice) / 1e36) * ethPrice;\n\n    totalSupplyBalanceUSD += asset.supplyBalanceUSD;\n    totalBorrowBalanceUSD += asset.borrowBalanceUSD;\n\n    asset.totalSupplyUSD =\n      ((asset.totalSupply * asset.underlyingPrice) / 1e36) * ethPrice;\n    asset.totalBorrowUSD =\n      ((asset.totalBorrow * asset.underlyingPrice) / 1e36) * ethPrice;\n\n    totalSuppliedUSD += asset.totalSupplyUSD;\n    totalBorrowedUSD += asset.totalBorrowUSD;\n\n    asset.liquidityUSD =\n      ((asset.liquidity * asset.underlyingPrice) / 1e36) * ethPrice;\n\n    totalLiquidityUSD += asset.liquidityUSD;\n  }\n\n  await Promise.all(promises);\n\n  return {\n    assets: assets.sort((a, b) => (b.liquidityUSD > a.liquidityUSD ? 1 : -1)),\n    comptroller,\n    name,\n    isPrivate,\n    oracle,\n    oracleModel,\n    admin,\n\n    totalLiquidityUSD,\n\n    totalSuppliedUSD,\n    totalBorrowedUSD,\n\n    totalSupplyBalanceUSD,\n    totalBorrowBalanceUSD,\n    isAdminWhitelisted,\n  };\n};\n"
  },
  {
    "path": "src/utils/fetchPoolAPY.ts",
    "content": "import Rari from \"../rari-sdk/index\";\n\nimport { getSDKPool, Pool } from \"./poolUtils\";\n\nexport const fetchRGTAPR = async (rari: Rari) => {\n  // TODO: Won't work with all the staked and Fuse TVL included\n  //   const blockNumber = await rari.web3.eth.getBlockNumber();\n\n  //   const tvl = await fetchTVL(rari);\n\n  //   const rgtRawAPR = await rari.governance.rgt.distributions.getCurrentApr(\n  //     blockNumber,\n  //     tvl\n  //   );\n\n  //   const rgtAPR = parseFloat(\n  //     rari.web3.utils.fromWei(rgtRawAPR.mul(rari.web3.utils.toBN(100)))\n  //   ).toFixed(0);\n\n  return \"0\";\n};\n\nexport const fetchPoolAPY = async (\n  rari: Rari,\n  pool: Pool | undefined\n): Promise<string | null > => {\n  if (!pool) return null\n\n  const poolRawAPY = await getSDKPool({\n    rari,\n    pool,\n  }).apy.getCurrentRawApy();\n\n  const poolAPY = parseFloat(\n    rari.web3.utils.fromWei(poolRawAPY.mul(rari.web3.utils.toBN(100)))\n  ).toFixed(2);\n\n  return poolAPY;\n};\n\n// TODO: Don't hardcode this.\nexport const fetchDAIPoolAPY = async (rari: Rari) => {\n  const poolRawAPY = await rari.pools.dai.apy.getCurrentRawApy();\n\n  const poolAPY = parseFloat(\n    rari.web3.utils.fromWei(poolRawAPY.mul(rari.web3.utils.toBN(100)))\n  ).toFixed(2);\n\n  return poolAPY;\n};\n"
  },
  {
    "path": "src/utils/fetchPoolInterest.ts",
    "content": "import Rari from \"rari-sdk/index\";\nimport { stringUsdFormatter, BN } from \"utils/bigUtils\";\n\nexport const fetchPoolInterestEarned = async (rari: Rari, address: string) => {\n  const [\n    stableInterest,\n    yieldInterest,\n    daiInterest,\n    ethInterestInETH,\n    ethPriceBN,\n  ] = await Promise.all([\n    rari.pools.stable.balances.interestAccruedBy(address),\n    rari.pools.yield.balances.interestAccruedBy(address),\n    rari.pools.dai.balances.interestAccruedBy(address),\n    rari.pools.ethereum.balances.interestAccruedBy(address),\n    rari.getEthUsdPriceBN(),\n  ]);\n\n  const ethInterest = ethInterestInETH.mul(\n    ethPriceBN.div(rari.web3.utils.toBN(1e18))\n  );\n\n  return {\n    totalFormattedEarnings: stringUsdFormatter(\n      rari.web3.utils.fromWei(\n        stableInterest.add(yieldInterest).add(ethInterest).add(daiInterest)\n      )\n    ),\n    totalEarnings: stableInterest\n      .add(yieldInterest)\n      .add(ethInterest)\n      .add(daiInterest),\n    yieldPoolInterestEarned: yieldInterest,\n    stablePoolInterestEarned: stableInterest,\n    daiPoolInterestEarned: daiInterest,\n    ethPoolInterestEarned: ethInterest,\n    ethPoolInterestEarnedInETH: ethInterestInETH,\n  };\n};\n\nexport type PoolInterestEarned = {\n  totalFormattedEarnings: string;\n  totalEarnings: BN;\n  daiPoolInterestEarned: BN;\n  yieldPoolInterestEarned: BN;\n  stablePoolInterestEarned: BN;\n  ethPoolInterestEarned: BN;\n  ethPoolInterestEarnedInETH: BN;\n};\n"
  },
  {
    "path": "src/utils/fetchTVL.ts",
    "content": "import Rari from \"../rari-sdk/index\";\nimport Fuse from \"../fuse-sdk\";\nimport BigNumber from \"bignumber.js\";\n\nexport const fetchFuseTVL = async (fuse: Fuse) => {\n  \n  const {\n    2: totalSuppliedETH,\n  } = await fuse.contracts.FusePoolLens.methods\n    .getPublicPoolsByVerificationWithData(true)\n    .call({ gas: 1e18 });\n\n\n  const ethTotal = fuse.web3.utils.toBN(\n    new BigNumber(\n      totalSuppliedETH\n        .reduce((a: number, b: string) => a + parseInt(b), 0)\n        .toString()\n    ).toFixed(0)\n  );\n\n  return ethTotal\n};\n\nexport const perPoolTVL = async (rari: Rari, fuse: Fuse) => {\n  const [\n    stableTVL,\n    yieldTVL,\n    ethTVLInETH,\n    daiTVL,\n    ethPriceBN,\n    stakedTVL,\n    fuseTVLInETH,\n  ] = await Promise.all([\n    rari.pools.stable.balances.getTotalSupply(),\n    rari.pools.yield.balances.getTotalSupply(),\n    rari.pools.ethereum.balances.getTotalSupply(),\n    rari.pools.dai.balances.getTotalSupply(),\n    rari.getEthUsdPriceBN(),\n    rari.governance.rgt.sushiSwapDistributions.totalStakedUsd(),\n    fetchFuseTVL(fuse),\n  ]);\n\n  const ethUSDBN = ethPriceBN.div(rari.web3.utils.toBN(1e18));\n\n  const ethTVL = ethTVLInETH.mul(ethUSDBN);\n  const fuseTVL = fuseTVLInETH.mul(ethUSDBN);\n\n  return { stableTVL, yieldTVL, ethTVL, daiTVL, fuseTVL, stakedTVL };\n};\n\nexport const fetchTVL = async (rari: Rari, fuse: Fuse) => {\n  const tvls = await perPoolTVL(rari, fuse);\n\n  return tvls.stableTVL\n    .add(tvls.yieldTVL)\n    .add(tvls.ethTVL)\n    .add(tvls.daiTVL)\n    .add(tvls.stakedTVL)\n    .add(tvls.fuseTVL);\n};\n"
  },
  {
    "path": "src/utils/format.ts",
    "content": "import Rari from \"rari-sdk/index\";\nimport { BN, stringUsdFormatter } from \"./bigUtils\";\n\n// Formats a BN balance USD or ETH denominated string\nexport const formatBalanceBN = (\n  rari: Rari,\n  balanceData: BN | null,\n  shouldFormatETH: boolean = false\n): string | null => {\n  if (!balanceData) return null;\n\n  let formattedBalance = stringUsdFormatter(\n    rari.web3.utils.fromWei(balanceData!)\n  );\n\n  if (shouldFormatETH)\n    formattedBalance = formattedBalance.replace(\"$\", \"\") + \" ETH\";\n\n  return formattedBalance;\n};\n"
  },
  {
    "path": "src/utils/homepage.ts",
    "content": "import {\n  HomepageOpportunity,\n  HomepageOpportunityType,\n} from \"constants/homepage\";\n\nexport const getOpportunityLink = (\n  opportunity: HomepageOpportunity\n): string => {\n  switch (opportunity.type) {\n    case HomepageOpportunityType.EarnVault:\n      return `/pools/${opportunity.vaultType}`;\n    case HomepageOpportunityType.FusePool:\n      return `/fuse/pool/${opportunity.fusePoolId}`;\n  }\n  return \"/\";\n};"
  },
  {
    "path": "src/utils/i18n.ts",
    "content": "import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport English from \"../locales/en.json\";\nimport ChineseSimplified from \"../locales/zh-CN.json\";\nimport ChineseTraditional from \"../locales/zh-TW.json\";\n\nconst findBrowserLang = () => {\n  let found: string[] = [];\n\n  if (typeof navigator !== \"undefined\") {\n    if (navigator.languages) {\n      // chrome only; not an array, so can't use .push.apply instead of iterating\n      for (let i = 0; i < navigator.languages.length; i++) {\n        found.push(navigator.languages[i]);\n      }\n    }\n    // @ts-ignore\n    if (navigator.userLanguage) {\n      // @ts-ignore\n      found.push(navigator.userLanguage);\n    }\n    if (navigator.language) {\n      found.push(navigator.language);\n    }\n  }\n\n  return found.length > 0 ? found[0] : undefined;\n};\n\nconst findBestLang = () => {\n  const lang = localStorage.getItem(\"rariLang\");\n\n  if (!lang) {\n    return findBrowserLang();\n  } else {\n    return lang;\n  }\n};\n\ni18n.use(initReactI18next).init({\n  resources: {\n    en: { translation: English },\n\n    \"zh-CN\": { translation: ChineseSimplified },\n    \"zh-TW\": { translation: ChineseTraditional },\n  },\n\n  lng: findBestLang() ?? \"en\",\n  fallbackLng: \"en\",\n\n  keySeparator: false,\n\n  nsSeparator: false,\n\n  interpolation: {\n    escapeValue: false,\n  },\n});\n"
  },
  {
    "path": "src/utils/multicall.ts",
    "content": "import Web3 from \"web3\";\nimport Fuse from \"fuse-sdk\";\nimport { alchemyURL } from \"./web3Providers\";\n\nexport const createMultiCall = (web3: Web3) => {\n  const multicallContract = new web3.eth.Contract(\n    MultiCallAbi as any,\n    MULTICALL_ADDRESS\n  );\n  return multicallContract;\n};\n\nexport const sendWithMultiCall = async (\n  fuse: Fuse,\n  encodedCalls: any,\n  address: string\n) => {\n  // @ts-ignore\n  const multicall = createMultiCall(fuse.web3);\n\n  console.log(\"sendWithMultiCall\", { encodedCalls, multicall });\n\n  const returnDatas = await multicall.methods\n    .aggregate(encodedCalls)\n    .send({ from: address });\n\n  return returnDatas;\n};\n\nconst MULTICALL_ADDRESS = \"0xeefba1e63905ef1d7acba5a8513c70307c1ce441\";\n\nconst MultiCallAbi = [\n  {\n    constant: true,\n    inputs: [],\n    name: \"getCurrentBlockTimestamp\",\n    outputs: [{ name: \"timestamp\", type: \"uint256\" }],\n    payable: false,\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    constant: false,\n    inputs: [\n      {\n        components: [\n          { name: \"target\", type: \"address\" },\n          { name: \"callData\", type: \"bytes\" },\n        ],\n        name: \"calls\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"aggregate\",\n    outputs: [\n      { name: \"blockNumber\", type: \"uint256\" },\n      { name: \"returnData\", type: \"bytes[]\" },\n    ],\n    payable: false,\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    constant: true,\n    inputs: [],\n    name: \"getLastBlockHash\",\n    outputs: [{ name: \"blockHash\", type: \"bytes32\" }],\n    payable: false,\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    constant: true,\n    inputs: [{ name: \"addr\", type: \"address\" }],\n    name: \"getEthBalance\",\n    outputs: [{ name: \"balance\", type: \"uint256\" }],\n    payable: false,\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    constant: true,\n    inputs: [],\n    name: \"getCurrentBlockDifficulty\",\n    outputs: [{ name: \"difficulty\", type: \"uint256\" }],\n    payable: false,\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    constant: true,\n    inputs: [],\n    name: \"getCurrentBlockGasLimit\",\n    outputs: [{ name: \"gaslimit\", type: \"uint256\" }],\n    payable: false,\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    constant: true,\n    inputs: [],\n    name: \"getCurrentBlockCoinbase\",\n    outputs: [{ name: \"coinbase\", type: \"address\" }],\n    payable: false,\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    constant: true,\n    inputs: [{ name: \"blockNumber\", type: \"uint256\" }],\n    name: \"getBlockHash\",\n    outputs: [{ name: \"blockHash\", type: \"bytes32\" }],\n    payable: false,\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n];\n"
  },
  {
    "path": "src/utils/poolIconUtils.ts",
    "content": "// Icons\nimport EthIcon from \"../static/ethicon.png\";\nimport StableIcon from \"../static/stableicon.png\";\nimport YieldIcon from \"../static/yieldicon.png\";\nimport { Pool } from \"./poolUtils\";\n\nexport const getPoolLogo = (pool: Pool) => {\n  switch (pool) {\n    case Pool.USDC:\n      return \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png\";\n    case Pool.DAI:\n      return \"https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x6B175474E89094C44Da98b954EedeAC495271d0F/logo.png\";\n    case Pool.ETH:\n      return EthIcon;\n    default:\n      return YieldIcon;\n  }\n};\n"
  },
  {
    "path": "src/utils/poolUtils.ts",
    "content": "import Rari from \"../rari-sdk/index\";\n\nimport EthereumPool from \"../rari-sdk/pools/ethereum\";\nimport StablePool from \"../rari-sdk/pools/stable\";\nimport YieldPool from \"../rari-sdk/pools/yield\";\nimport DaiPool from \"../rari-sdk/pools/dai\";\n\nexport enum Pool {\n  USDC = \"usdc\",\n  DAI = \"dai\",\n  YIELD = \"yield\",\n  ETH = \"eth\",\n}\n\nexport const getSDKPool = ({\n  rari,\n  pool,\n}: {\n  rari: Rari;\n  pool: Pool | undefined;\n}) => {\n  let sdkPool: StablePool | EthereumPool | YieldPool | DaiPool;\n\n  switch (pool) {\n    case Pool.USDC:\n      sdkPool = rari.pools.stable;\n      break;\n    case Pool.DAI:\n      sdkPool = rari.pools.dai;\n      break;\n    case Pool.ETH:\n      sdkPool = rari.pools.ethereum;\n      break;\n    case Pool.YIELD:\n      sdkPool = rari.pools.yield;\n      break;\n    default:\n      sdkPool = rari.pools.yield;\n      break;\n  }\n\n  return sdkPool;\n};\n\nexport function poolHasDivergenceRisk(pool: Pool) {\n  return pool === Pool.YIELD;\n}\n\nexport const getPoolName = (pool: Pool, t: any) => {\n  switch (pool) {\n    case Pool.USDC:\n      return t(\"USDC Pool\");\n    case Pool.DAI:\n      return t(\"DAI Pool\");\n    case Pool.ETH:\n      return t(\"ETH Pool\");\n    case Pool.YIELD:\n      return t(\"Yield Pool\");\n    default:\n      return t(\"Yield Pool\");\n  }\n};\n\nexport const getPoolCaption = (pool: Pool, t: any) => {\n  switch (pool) {\n    case Pool.USDC:\n      return t(\"Earn interest on stablecoins by providing liquidity to Fuse pools.\");\n    case Pool.DAI:\n      return t(\"Earn interest on stablecoins by providing liquidity to Fuse pools.\");\n    case Pool.ETH:\n      return t(\"Please withdraw funds. Pool is no longer in use.\");\n    case Pool.YIELD:\n      return t(\"Please withdraw funds. Pool is no longer in use.\");\n    default:\n      return t(\"Earn interest on tokens by providing liquidity to Fuse pools.\");\n  }\n};\n"
  },
  {
    "path": "src/utils/rewards.ts",
    "content": "import Fuse from \"fuse-sdk\";\nimport { createRewardsDistributor } from \"./createComptroller\";\nimport { sendWithMultiCall } from \"./multicall\";\n\nexport const claimRewardsFromRewardsDistributors = async (\n  fuse: Fuse,\n  address: string,\n  rewardsDistributors: string[]\n) => {\n  const methods = rewardsDistributors.map((rDAddress: string) =>\n    createRewardsDistributor(rDAddress, fuse).methods.claimRewards(address)\n  );\n\n  const addrs = rewardsDistributors;\n\n  const encodedCalls = methods.map((m, i) => {\n    return [addrs[i], m.encodeABI()];\n  });\n\n  const returnDatas = await sendWithMultiCall(fuse, encodedCalls, address);\n\n  console.log(\"claimAllRewards\", { returnDatas });\n};\n"
  },
  {
    "path": "src/utils/shortAddress.ts",
    "content": "export function shortAddress(address: string) {\n  return (\n    address.substring(0, 4) +\n    \"...\" +\n    address.substring(address.length - 2, address.length)\n  );\n}\n\nexport function mediumAddress(address: string) {\n  return (\n    address.substring(0, 8) +\n    \"...\" +\n    address.substring(address.length - 8, address.length)\n  );\n}\n"
  },
  {
    "path": "src/utils/stringUtils.ts",
    "content": "export function truncate(str: string, n: number) {\n  return str.length > n ? str.substr(0, n - 1) + \"...\" : str;\n}\n"
  },
  {
    "path": "src/utils/symbolUtils.ts",
    "content": "import { TokenData } from \"hooks/useTokenData\";\nimport { FuseAsset } from \"./fetchFusePoolData\";\n\nexport function getSymbol(tokenData: TokenData | undefined, asset: FuseAsset) {\n  if (!tokenData) {\n    return asset.underlyingSymbol;\n  }\n\n  if (tokenData.symbol === \"UNI-V2\") {\n    // Fuse lens converts LP token symbols into their underlying (like UNI-V2 -> DAI/USDC),\n    // so we want to use it here.\n    return asset.underlyingSymbol;\n  }\n\n  if (tokenData.symbol === \"G-UNI\") {\n    // Parse the LP token symbols from the G-UNI name (like Gelato DAI/USDC LP -> USDC/DAI).\n    const splitName = asset.underlyingName.split(\" \");\n    return \"G-\" + splitName[splitName.length - 2];\n  }\n\n  return tokenData.symbol!;\n}\n"
  },
  {
    "path": "src/utils/tokenUtils.ts",
    "content": "import { AllTokens } from \"rari-tokens-generator\";\nimport {\n  USDPricedFuseAsset,\n  USDPricedFuseAssetWithTokenData,\n} from \"utils/fetchFusePoolData\";\nimport { TokenData } from \"hooks/useTokenData\";\n\nimport Tokens from \"../static/compiled/tokens.json\";\nexport const tokens = Tokens as AllTokens;\n\nexport interface AssetHash {\n  [address: string]: USDPricedFuseAsset;\n}\n\nexport interface AssetHashWithTokenData {\n  [address: string]: USDPricedFuseAssetWithTokenData;\n}\n\nexport interface TokensDataHash {\n  [address: string]: TokenData;\n}\n\n\nconst ETH_AND_WETH = [\n  \"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2\",\n  \"0x0000000000000000000000000000000000000000\",\n];\n\nexport const isTokenETHOrWETH = (tokenAddress: string) =>\nETH_AND_WETH.includes(tokenAddress.toLowerCase());\n\nexport const createAssetsMap = (assetsArray: USDPricedFuseAsset[][]) => {\n  const assetsMap: AssetHash = {};\n\n  for (const assets of assetsArray) {\n    for (const asset of assets) {\n      const address = asset.underlyingToken;\n      if (!assetsMap[address]) {\n        assetsMap[address] = asset;\n      }\n    }\n  }\n\n  return assetsMap;\n};\n\nexport const createTokensDataMap = (\n  tokensData: TokenData[]\n): TokensDataHash => {\n  const _tokensDataMap: TokensDataHash = {};\n\n  for (const tokenData of tokensData) {\n    if (!tokenData.address) continue;\n    if (!_tokensDataMap[tokenData.address]) {\n      _tokensDataMap[tokenData.address] = tokenData;\n    }\n  }\n\n  return _tokensDataMap;\n};\n"
  },
  {
    "path": "src/utils/web3Providers.ts",
    "content": "import Fuse from \"../fuse-sdk/src\";\ndeclare var window: any\n\nexport const alchemyURL =  `https://eth-mainnet.alchemyapi.io/v2/2Mt-6brbJvTA4w9cpiDtnbTo6qOoySnN`;\nexport const testnetURL =  `http://localhost:8545`;\n\nexport function chooseBestWeb3Provider() {\n  if (typeof window === \"undefined\") {\n    return alchemyURL;\n  }\n\n  if (window.ethereum) {\n    return window.ethereum;\n  } else if (window.web3) {\n    return window.web3.currentProvider;\n  } else {\n    return alchemyURL;\n  }\n}\n\nexport const initFuseWithProviders = (provider = chooseBestWeb3Provider()) => {\n  const fuse = new Fuse(provider);\n\n  // @ts-ignore We have to do this to avoid Infura ratelimits on our large calls.\n  fuse.contracts.FusePoolLens.setProvider(alchemyURL);\n\n  return fuse;\n};\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\n      \"dom\",\n      \"dom.iterable\",\n      \"esnext\"\n    ],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"esModuleInterop\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"jsx\": \"react-jsx\",\n    \"noFallthroughCasesInSwitch\": true,\n    \"baseUrl\": \"src\",\n    \"downlevelIteration\": true\n  },\n  \"include\": [\n    \"src\"\n  ]\n}\n"
  }
]